一、漏洞简介

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

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。