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

admin 2022年10月1日23:16:03安全文章评论13 views1221字阅读4分4秒阅读模式

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


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



原文始发于微信公众号(陌陌安全):一个换行符为什么可以绕过认证?

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月1日23:16:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  一个换行符为什么可以绕过认证? http://cn-sec.com/archives/1304760.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: