一个换行符为什么可以绕过认证?

语言: CN / TW / HK

前段时间,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

About us

陌陌安全

致力于以务实的工作 保障陌陌旗下所有产品及亿万用户的信息安全

以开放的心态 拥抱信息安全机构、团队与个人之间的共赢协作

以自由的氛围和丰富的资源 支撑优秀同学的个人发展与职业成长

/   往 期 分 享   /

SRC活动进行中:9.16-9.30, 陌陌、创新产品双倍季

WMCTF 2022 挑战赛 chess writeup

「陌陌安全」

扫上方二维码码关注我们 ,惊喜不断哦

M   O   M   O   S   E   C   U   R   I   T   Y