前言
结合自身经历,在使用正则表达式去匹配流量特征时,由于正则表达式中元字符“.”不匹配换行符(n、r)导致一直提取不上所需的流量。而如今,之前踩过的坑却出现在了Apache Shiro框架之中……
漏洞描述
相关介绍
Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,它可以执行身份验证、授权、加密和会话管理,可以用于保护任何应用程序——从命令行应用程序、移动应用程序到最大的 web 和企业应用程序。
利用范围
Apache Shiro < 1.9.1
漏洞分析
漏洞原理
在漏洞分析之前,先了解一下相关漏洞产生原理。
.
是匹配除换行符(n
、r
)之外的任何单个字符。要匹配包括 n 在内的任何字符,需使用像(.|n)的模式。
源码分析
结合shiro源码和漏洞场景分析,在shiro-core-1.9.0.jar中存在一个RegExPatternMatcher类
RegexRequestMatcher和AntPathMatcher类似,提供请求路径匹配功能及拦截器参数解析的功能。而一般情况下RegexRequestMatcher类是不会在项目中出现,需要用户自己配置。
分析RegexRequestMatcher用于匹配的代码。
而在4ra1n师傅构造的漏洞场景中。
自定义了Filter,增加权限认证场景:
1、判断请求头中的Token是否匹配。
2、如果不存在Token或者Token头错误则认为认证失败。
并且配置了自定义的AccessControlFilter实现类,并将 PatternMatcher配置为RegExPatternMatcher。
同时自定义MyShiroFilterFactoryBean。
在自定义controller中,配置了/permit/{value}这样从路径取参数的路由和/permit/*这样的通配路由。
漏洞复现
修复建议
参考漏洞影响范围进行排查,目前官方已发布修复补丁:https://github.com/apache/shiro/commit/6bcb92e06fa588b9c7790dd01bc02135d58d3f5b
参考材料
关于Portal Lab
星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。
原文始发于微信公众号(星阑PortalLab):【技术干货】 CVE-2022-32532 Apache Shiro RegExPatternMatcher 认证绕过漏洞