【技术干货】 CVE-2022-32532 Apache Shiro RegExPatternMatcher 认证绕过漏洞

admin 2022年7月7日16:23:17评论107 views字数 1994阅读6分38秒阅读模式
【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞


【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞
【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞
xxhzz
@PortalLab实验室

前言

结合自身经历,在使用正则表达式去匹配流量特征时,由于正则表达式中元字符“.”不匹配换行符(n、r)导致一直提取不上所需的流量。而如今,之前踩过的坑却出现在了Apache Shiro框架之中......

漏洞描述

6月29日,Apache 官方披露 Apache Shiro 权限绕过漏洞(CVE-2022-32532),当 Apache Shiro 中使用 RegexRequestMatcher 进行权限配置,且正则表达式中携带“.”时,未经授权的远程攻击者可通过构造恶意数据包绕过身份认证。

相关介绍

Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,它可以执行身份验证、授权、加密和会话管理,可以用于保护任何应用程序——从命令行应用程序、移动应用程序到最大的 web 和企业应用程序。

利用范围

Apache Shiro < 1.9.1

漏洞分析

环境搭建
这里使用此漏洞提交者4ra1n 师傅的漏洞demo(https://github.com/4ra1n/CVE-2022-32532)进行复现分析。

漏洞原理

在漏洞分析之前,先了解一下相关漏洞产生原理。

在正则表达式中元字符.是匹配除换行符(nr)之外的任何单个字符。
【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞

要匹配包括 n 在内的任何字符,需使用像(.|n)的模式。

【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞
结合4ra1n师傅的分析,在java中的正则默认情况下.也同样不会包含n、r字符,因此在一些场景中,使用正则.的规则就有可能被绕过。
【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞
新增Pattern.DOTALL模式后,正则表达式.就可以匹配任何字符包括换行符。
【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞

源码分析

结合shiro源码和漏洞场景分析,在shiro-core-1.9.0.jar中存在一个RegExPatternMatcher类

org.apache.shiro.util.RegExPatternMatcher.class。
【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞

RegexRequestMatcher和AntPathMatcher类似,提供请求路径匹配功能及拦截器参数解析的功能。而一般情况下RegexRequestMatcher类是不会在项目中出现,需要用户自己配置。

分析RegexRequestMatcher用于匹配的代码。

【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞
可以看到,这里正如上面漏洞原理分析的一样,pattern存在带.的正则表达式匹配,若source中存在r或n字符时,将判断错误。

而在4ra1n师傅构造的漏洞场景中。

【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞

自定义了Filter,增加权限认证场景:

1、判断请求头中的Token是否匹配。

2、如果不存在Token或者Token头错误则认为认证失败。

并且配置了自定义的AccessControlFilter实现类,并将 PatternMatcher配置为RegExPatternMatcher。

同时自定义MyShiroFilterFactoryBean。

【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞
继承自ShiroFilterFactoryBean类;设置匹配规则为/permit/.*字符串,表示需要拦截/permit/下所有的路径。
【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞

在自定义controller中,配置了/permit/{value}这样从路径取参数的路由和/permit/*这样的通配路由。

漏洞复现

当访问/permit/any,返回拒绝访问。
【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞
当访问/permit/a%0any或/permit/a%0dny时,返回success,即认证成功。
【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞

【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞

【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞
所以在如上满足使用了RegExPatternMatcher类,设置带有.的正则表达式等条件的场景下,利用该漏洞可实现权限认证绕过。

修复建议

参考漏洞影响范围进行排查,目前官方已发布修复补丁:https://github.com/apache/shiro/commit/6bcb92e06fa588b9c7790dd01bc02135d58d3f5b

参考材料

1.https://xz.aliyun.com/t/11501#toc-2
2.https://github.com/apache/shiro/commit/6bcb92e06fa588b9c7790dd01bc02135d58d3f5b
3.https://lists.apache.org/thread/y8260dw8vbm99oq7zv6y3mzn5ovk90xh

关于Portal Lab

星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。



【技术干货】 CVE-2022-32532  Apache Shiro RegExPatternMatcher 认证绕过漏洞

原文始发于微信公众号(星阑PortalLab):【技术干货】 CVE-2022-32532 Apache Shiro RegExPatternMatcher 认证绕过漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月7日16:23:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【技术干货】 CVE-2022-32532 Apache Shiro RegExPatternMatcher 认证绕过漏洞http://cn-sec.com/archives/1163632.html

发表评论

匿名网友 填写信息