0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
1.简介
1.1 Apache Shiro
Apache Shiro 是一个强大且易于使用的 Java 安全框架,用于保护应用程序的安全性。它提供了认证、授权、加密、会话管理等一系列安全功能,可以简化应用程序中的身份验证和授权操作。
下面是 Apache Shiro 的一些主要功能:
认证(Authentication):验证用户的身份以确定其是否是合法用户。
授权(Authorization):定义用户被允许执行的操作和访问的资源。
会话管理(Session Management):管理用户会话,包括会话的创建、维护和失效等。
密码加密(Password Encryption):提供安全的密码存储和验证机制,并支持多种密码加密算法。
单点登录(Single Sign-On):允许用户使用一组凭据(如用户名和密码)登录并在多个应用程序之间共享身份验证信息。
使用 Apache Shiro,您可以轻松地将安全功能集成到您的 Java 应用程序中,无需过多关注底层实现细节。它还提供了灵活的配置选项和可插拔的安全组件,使得适应不同的安全需求变得更加容易
1.2 漏洞描述
2022年6月29日,Apache官方披露Apache Shiro权限绕过漏洞(CVE-2022-32532),当Apache Shiro中使用RegexRequestMatcher进行权限配置,且正则表达式中携带"."时,未经授权的远程攻击者可通过构造恶意数据包绕过身份认证,导致配置的权限验证失效。
漏洞 | 详细情况 |
---|---|
编号 | CVE-2022-32532 |
影响版本 | Apache Shiro < 1.9.1 |
漏洞检测 | 在config\pom.xml的version标签中查看当前使用的shiro版本号。 |
2.漏洞复现
2.1 搭建环境
系统 | 工具 | 备注 |
---|---|---|
kali(2023) | docker,vulfocus(在线靶场),burpsuit |
环境搭建:
(104条消息) vulfocus 靶机环境搭建部署vulfocus部署csd_ct的博客-CSDN博客
(104条消息) vulfocus不能同步的解决方法/vulfocus同步失败_key_info的博客-CSDN博客
2.2 启动环境
2.3 验证漏洞
抓包分析(404)
get方式/permit/any不加token
GET /permit/any HTTP/1.1
get方式/permit/any加token
GET /permit/any HTTP/1.1
token:4ra1n
使用 %0a 进行权限绕过
GET /permit/a%0any HTTP/1.1
3.总结
3.1漏洞原理:
(1)在4ra1n师傅构造的漏洞场景中,自定义了Filter,增加权限认证场景:
判断请求头中的Token是否匹配。
如果不存在Token或者Token头错误则认为认证失败。
(2)java中的正则
在正则表达式中元字符.是匹配除换行符(\n、\r)之外的任何单个字符。
要匹配包括 \n 在内的任何字符,需使用像(.|\n)的模式。
在java中的正则默认情况下.也同样不会包含\n、\r字符,因此在一些场景中,使用正则.的规则就有可能被绕过。
新增Pattern.DOTALL模式后,正则表达式.就可以匹配任何字符包括换行符。
在shiro-core-1.9.0.jar中存在一个RegExPatternMatcher类,提供请求路径匹配功能及拦截器参数解析的功能。pattern存在带.的正则表达式匹配,若source中存在\r或\n字符时,将判断错误。
配置了自定义的AccessControlFilter实现类,并将 PatternMatcher配置为RegExPatternMatcher。
同时自定义MyShiroFilterFactoryBean。
继承自ShiroFilterFactoryBean类;设置匹配规则为/permit/.*字符串,表示需要拦截/permit/下所有的路径。
所以,当访问/permit/any,返回拒绝访问。
3.2修复建议
目前Apache官方已发布此漏洞修复版本,建议用户尽快升级至Apache Shiro 1.9.1及以上版本。
3.3参考文章
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)