前段时间,Spring Security发布更新,修复了一个高危漏洞-Spring Security 身份认证绕过漏洞(CVE-2022-22978),因为我们也有部分项目使用了Spring Security,遂对该漏洞进行了简单的分析复现。
漏洞信息
漏洞简述:在 Spring Security中,RegexRequestMatcher 很容易被错误配置,如果RegexRequestMatcher中使用的正则表达式带有".",应用程序的访问限制容易被绕过。
根据官方描述,问题出现在了RegexRequestMatcher,而且使用的正则表达式中要带有"."。
那我们先看下5.6.4版本对于RegexRequestMatcher的变更:
可以看到对正则表达式的匹配规则进行了变更,设置了Pattern.DOTALL模式。
默认情况下,正则表达式中点(.)不会匹配换行符,设置了Pattern.DOTALL模式,才会匹配所有字符包括换行符。再结合官方的描述,我们已经基本了解了漏洞的成因。
漏洞复现
环境准备
这里选用了5.6.3版本的Spring Security:
使用Spring Security通过正则表达式为admin接口增加了认证(正则表达式中使用了.*来匹配任意字符):
正常访问/admin/*被拦截,响应403:
增加换行符:
CVE-2022-32532
近日Apache Shiro 修复的身份认证绕过漏洞(CVE-2022-32532),也是因为相同原因所导致的。
修复方式也与CVE-2022-22978一样,设置了Pattern.DOTALL模式:
-
https://spring.io/blog/2022/05/15/cve-2022-22978-authorization-bypass-in-regexrequestmatcher
-
https://github.com/spring-projects/spring-security
-
https://lists.apache.org/thread/y8260dw8vbm99oq7zv6y3mzn5ovk90xh
-
https://github.com/apache/shiro/commit/6bcb92e06fa588b9c7790dd01bc02135d58d3f5b
致力于以务实的工作保障陌陌旗下所有产品及亿万用户的信息安全
以开放的心态拥抱信息安全机构、团队与个人之间的共赢协作
以自由的氛围和丰富的资源支撑优秀同学的个人发展与职业成长
SRC活动进行中:9.16-9.30,陌陌、创新产品双倍季
WMCTF 2022 挑战赛 chess writeup
原文始发于微信公众号(陌陌安全):一个换行符为什么可以绕过认证?
评论