CVE-2022-32532:Apache Shiro RegExPatternMatcher 认证绕过复现

一、漏洞简介

Apache Shiro 是一个强大且易用的 Java 安全框架,通过它可以执行身份验证、授权、密码和会话管理。使用 Shiro 的易用 API,您可以快速、轻松地保护任何应用程序 —— 从最小的移动应用程序到最大的 WEB 和企业应用程序。
2022年6月29日,Apache官方披露Apache Shiro权限绕过漏洞(CVE-2022-32532),当Apache Shiro中使用RegexRequestMatcher进行权限配置,且正则表达式中携带"."时,未经授权的远程攻击者可通过构造恶意数据包绕过身份认证,导致配置的权限验证失效。

二、漏洞编号

CVE-2022-32532

三、基本原理

无论是CVE-2022-22978还是CVE-2022-32532本质都是以下的内容
在Java中的正则默认情况下.并不包含\r和\n字符,因此某些情况下正则规则可以被绕过

String regex = "a.*b";
Pattern pattern = Pattern.compile(regex); 
boolean flag1 = pattern.matcher("aaabbb").matches(); 
// true 
System.out.println(flag1); 
boolean flag2 = pattern.matcher("aa\nbb").matches(); 
// false 
System.out.println(flag2); 

虽然说编写正则是开发者的责任,如果是完善的正则表达式则不会出现这类漏洞。但在开发者的意识中:如果配置了/permit/.*路径规则,他的目标应该是拦截所有/permit/下的请求,如果出现了意料之外的问题,可以认为是一种安全风险。从框架角度来说,有必要针对这种问题改善部分代码,目标是在通常的意识中不会出现意外的情况。针对于这种问题的修复其实很简单,加入一个flag即可

String regex = "a.*b";
// add DOTALL flag 
Pattern pattern = Pattern.compile(regex,Pattern.DOTALL); 
boolean flag1 = pattern.matcher("aaabbb").matches(); 
// true 
System.out.println(flag1); boolean flag2 = pattern.matcher("aa\nbb").matches(); 
// true 
System.out.println(flag2);

四、影响范围

受影响版本
● Apache Shiro < 1.9.1
不受影响版本
● Apache Shiro = 1.9.1

五、实验步骤

1、进入实验网站
在这里插入图片描述

在这里插入图片描述

2.根据java正则表达式的特点(新增Pattern.DOTALL模式后,正则表达式.就可以匹配任何字符),构造换行符进行漏洞利用绕过
在这里插入图片描述

六、修复方式

安装修补补丁:https://github.com/apache/shiro/commit/6bcb92e06fa588b9c7790dd01bc02135d58d3f5b
或https://shiro.apache.org/download.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值