当前位置:

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

访客 2024-04-24 283 0

一、漏洞简介

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

二、漏洞编号

CVE-2022-32532

三、基本原理

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

Stringregex="a.*b";Patternpattern=Pattern.compile(regex);booleanflag1=pattern.matcher("aaabbb").matches();//trueSystem.out.println(flag1);booleanflag2=pattern.matcher("aa\nbb").matches();//falseSystem.out.println(flag2);

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

Stringregex="a.*b";//addDOTALLflagPatternpattern=Pattern.compile(regex,Pattern.DOTALL);booleanflag1=pattern.matcher("aaabbb").matches();//trueSystem.out.println(flag1);booleanflag2=pattern.matcher("aa\nbb").matches();//trueSystem.out.println(flag2);

四、影响范围

受影响版本
●ApacheShiro<1.9.1
不受影响版本
●ApacheShiro=1.9.1

五、实验步骤

1、进入实验网站

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

六、修复方式

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

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~