ApacheShiro认证绕过漏洞(CVE-2022-32532)分析原创

admin 2022年10月30日19:37:34ApacheShiro认证绕过漏洞(CVE-2022-32532)分析原创已关闭评论106 views字数 732阅读2分26秒阅读模式

漏洞背景#

Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,它可以执行身份验证、授权、加密和会话管理,可以用于保护任何应用程序——从命令行应用程序、移动应用程序到最大的 web 和企业应用程序。

漏洞分析#

漏洞原理#

当 Apache Shiro 中使用 RegexRequestMatcher 进行权限配置,且正则表达式中携带“.”时,未经授权的远程攻击者可通过构造恶意数据包绕过身份认证。

漏洞分析#

  1. 正则表达式中的元字符

元字符.是匹配除换行符(\n、\r)之外的任何单个字符。

  1. 在 Java 中如果需要匹配换行符、回车符,则需要使用『DOTALL』模式进行匹配,默认情况下也不匹配换行符。

  1. 我们来看一看 shiro 提供的 RegExPatternMatcher,默认没有使用【DOTALL】模式,如果开发提供的正则为【.*】就会存在换行符绕过问题。

  1. 回到问题的关键部分,我们使用/permit/.*来过滤需要认证的 URL,符合条件的 URL 需要进行认证

  1. 此处简单测试校验,只校验 header 中的 token

  1. 真实场景中使用通配路由或者取值路由

  1. 由于此处使用的【.*】来匹配路由,所以 shiro 的权限认证框架无法匹配到包含换行符的路径,从而导致不需要认证直接进入该函数。

漏洞复现#

不添加 token 直接访问会被拦截

使用 %0a,即换行符进行绕过,可以看到实际的路径是【\nhello】,这个路径没有被正则匹配到,从而导致该路径不需要认证。

添加 token 后成功认证,路径为【hello】

影响范围#

Apache Shiro < 1.9.1

碎碎念#

个人感觉这种漏洞有造洞嫌疑,开发正则不严谨的问题不应该由框架来承担,将上述 .* 换成 [\s\S]* 即可修复该问题,同时也可更新到新版本 shiro 来规避这个漏洞。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月30日19:37:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ApacheShiro认证绕过漏洞(CVE-2022-32532)分析原创http://cn-sec.com/archives/1379972.html