CVE-2022-22978 Spring-security 认证绕过漏洞分析和漏洞挖掘思考

阅读量74406

发布时间 : 2022-09-08 14:30:26

 

前言

在此之前,已经对CVE-2022-32532 Apache Shiro RegExPatternMatcher 认证绕过漏洞进行了分析,它和CVE-2022-22978漏洞产生原理上,本质是一样的。在分析这两个漏洞后,结合今年kcon议题《自动化API漏洞Fuzz实战》,产生了对漏洞挖掘关注点的一些思考。

 

漏洞描述

当Spring-security使用 RegexRequestMatcher 进行权限配置,由于RegexRequestMatcher正则表达式配置权限的特性,正则表达式中包含“.”时,未经身份验证攻击者可以通过构造恶意数据包绕过身份认证。

 

影响版本

Spring Security 5.5.x < 5.5.7

Spring Security 5.6.x < 5.6.4

 

环境搭建

使用github上的漏洞环境(https://github.com/XuCcc/VulEnv/tree/master/springboot/cve_2022_22978)

 

漏洞分析

具体漏洞产生的原理分析可参考CVE-2022-32532 Apache Shiro RegExPatternMatcher 认证绕过漏洞

构造的漏洞应用场景。

创建一个Controller,自定义接口。

通过正则表达式添加认证配置。

在访问/admin/{name}接口时,需要认证才能访问。

因为之前对CVE-2022-32532 Apache Shiro RegExPatternMatcher 认证绕过的分析,此次很快就将漏洞点定位在spring-security-web-5.6.3.jar中。

org.springframework.security.web.uti.matcher.RegexRequestMatcher#matchers

request.getServletPath()会对字符解码 并且会将;之后的字符到/字符删除,随后通过getServletPath获取URL,尝试提取?后的参数进行拼接,然后使用正则表达式匹配。

联想到在HttpServletRequest中URL解析函数中利用;进行权限绕过的场景:

其中HTTPServletRequest中对URL路径的几种解析方法。

request.getRequestURL():返回全路径;
request.getRequestURI():返回除去Host(域名或IP)部分的路径;
request.getContextPath():返回工程名部分,如果工程映射为/,则返回为空;
request.getServletPath():返回除去Host和工程名部分的路径;
request.getPathInfo():仅返回传递到Servlet的路径,如果没有传递额外的路径信息,则此返回Null;

当认证接口使用getRequestURI()或getRequestURL()函数来解析用户请求的URL时,若URL中包含了一些特殊符号,如分号;就可能产生限制绕过。

而在spring-security中,存在StrictHttpfirewall机制默认对特殊字符进行过滤,所以使用/admin/..;/1这种方式也就无法绕过。

不过在之前分析shiro认证绕过也提到,在正则表达式中元字符“.”是匹配除换行符(\n、\r)之外的任何单个字符,在java中的正则默认情况下“.”也同样不会包含\n、\r字符,所以RegexRequestMatcher在进行正则匹配时不会处理\n、\r

在spring-security中利用换行符可实现权限认证进行绕过,\r的URl编码为%0d,\n的URL编码为%0a

这样的绕过方式也和CVE-2022-32532 Apache Shiro RegExPatternMatcher 认证绕过如出一辙。

 

漏洞复现

访问/admin/1会302跳转至登陆页面进行权限验证。

使用/admin/1%0d%0a,成功绕过登陆认证。

 

漏洞挖掘的思考

因为我自己是在分析了CVE-2022-32532后再分析CVE-2022-22978,也在用正则匹配流量的过程中发现过正则“.”号不匹配换行符的问题,在拜读了CVE-2022-32532发现者分析文章,了解了其发现漏洞的过程。

 

高效的漏洞挖掘方法

从漏洞分析的角度来讲,CVE-2022-32532 和CVE-2022-22978的原理其实很简单,那从漏洞发现和挖掘上看,在了解了类似于CVE-2022-22978这样的安全漏洞后或者是其他的过程发现一些特性,拓展到其他框架或组件中去寻找类似的安全问题,构造利用场景,这是无疑一种高效挖洞的方法。一些未知由语言特性、机制特性等引发的安全漏洞,也等着我们去发现和研究。

在这样的背景下,结合今年KCon《自动化API漏洞Fuzz实战》议题介绍的自动化API漏洞 Fuzz方案,让我觉得API由于本身的特性和发展,以及产生的安全问题,也会逐渐成为漏洞挖掘中一个重要的关注点。

 

API特性与发展

简单介绍下,API本质上是一种跨语言、跨架构的数据传输约定,API连接了不同层次、不同编程语言、不同厂商 所研发的软件,让数据可以跨应用软件进行自由流动。

API本身的概念,这里不用做过多介绍。大多数人关注API安全可能在于数据隐私保护方面,这也是API安全近几年崛起的主要原因之一,对于攻击者而言,攻击API从而获取系统权限或者数据的成本也是极低的。

看得出API也在这个万物互联互通的时代正高速发展。

 

浅谈自动化API Fuzz到高危漏洞挖掘

API本身的会存在涉及到各种安全风险,而其大部分安全问题可进阶利用,产生危害更大的安全问题。

通过自动化API fuzz,发现API的安全漏洞,再对这些漏洞可以进一步挖掘和利用,例如通过API未授权漏洞、权限绕过、安全性错误配置等,进一步挖掘文件上传、命令执行等等漏洞。

API Fuzz流程。

当然,通过API Fuzz挖掘漏洞在SRC挖掘的过程中,同样适用。具体可参考https://mp.weixin.qq.com/s/MCtwiT93Fo9Js9ekuD-8wA中的实际案例。

在如今安全研究漏洞挖掘卷到飞起的天下,挖掘高危漏洞,安全研究员除了自身扎实的基础、丰富的漏洞经验外,可能有时还需要一点运气或灵感。通过自动化API Fuzz去挖掘新的高危漏洞的方式,也可以成为一个新的卷点。

 

参考材料

1.https://mp.weixin.qq.com/s?__biz=Mzg3NDcwMDk3OA==&mid=2247484068&idx=1&sn=89ea1b1be48a0cb7f93a4750765719d1&chksm=cecd8b79f9ba026f7fbf52771e41272d684fc3af5175587f768082f8dbaee12d6d33bb892ceb&scene=126&&sessionid=1662041689#rd

2.https://xz.aliyun.com/t/11501#toc-2

3.https://mp.weixin.qq.com/s/GiQJj2iD3ta8ltsHX9fYJw

4.https://github.com/XuCcc/VulEnv/tree/master/springboot/cve_2022_22978

本文由星阑科技原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/279670

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
星阑科技
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66