Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)

admin 2022年10月16日09:24:58评论76 views字数 2655阅读8分51秒阅读模式


Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)

Apache Shiro是一个强大且易用的Java安全框架,它可以用来执行身份验证、授权、密码和会话管理。目前常见集成于各种应用中进行身份验证、授权等。

本文仅对此漏洞进行了复现,关于此漏洞的分析可以参考以下链接:

https://xlab.tencent.com/cn/2020/06/30/xlab-20-002/

https://xz.aliyun.com/t/7964

https://www.secshi.com/41318.html

https://xz.aliyun.com/t/7218

一、漏洞详情

在Apache Shiro 1.5.3之前的版本,将Apache Shiro与Spring控制器一起使用时,特制请求可能会导致身份验证绕过。

二、风险等级

高风险

三、影响版本

Apache Shiro 1.5.3之前的版本

Spring 框架中只使用 Shiro 鉴权

四、漏洞复现

4.1 环境搭建

  • 源码下载:git clone https://github.com/l3yx/springboot-shiro.git
  • IntelliJ IDEA
  • maven
  • Java环境
  • Tomcat环境

4.2 环境部署

springboot-shiro项目导入IntelliJ IDEA,配置 Maven:

/Users/Tide/Library/apache-maven-3.6.3/conf/settings.xml(本地演示环境:Mac OS)

添加本地镜像:

  <mirrors>
    <mirror>
      <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven.</name>
        <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
      </mirror>
    <mirror>
      <id>repo1</id>
      <mirrorOf>central</mirrorOf>
      <name>HHuman Readable Name for this Mirror.</name>
      <url>http://repo1.maven.org/maven2/</url>
    </mirror>

    <mirror>
      <id>repo2</id>
      <mirrorOf>central</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://repo2.maven.org/maven2/</url>
    </mirror>
  </mirrors>

注意:settings.xml的缩进问题,否则生成war包时会报错。

更改 IDEA 中的 Maven home directory 和 User settings file 配置:

Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)

生成 war 包:

Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)
Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)

将打包好的 war 包部署于 Tomcat 。该漏洞成功利用存在下面两个条件

  • 应用不能部署在根目录,也就是需要 context-pathserver.servlet.context-path=/shiro,如果为根目录则context-path为空,就会被 CVE-2020-1957 的 patch 将 URL 格式化,值得注意的是若 Shiro 版本小于 1.5.2 的话那么该条件就不需要。
  • Spring 控制器中没有另外的权限校验代码
Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)
Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)

漏洞环境的权限配置如下,其中 /admin 下的路由需要登录才能访问:

@Bean
ShiroFilterFactoryBean shiroFilterFactoryBean(){
   ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
   bean.setSecurityManager(securityManager());
   bean.setLoginUrl("/login");
   bean.setSuccessUrl("/index");
   bean.setUnauthorizedUrl("/unauthorizedurl");
   Map<String, String> map = new LinkedHashMap<>();
   map.put("/doLogin""anon");
   map.put("/admin/*""authc");
   bean.setFilterChainDefinitionMap(map);
   return  bean;
}
---
@GetMapping("/admin/page")
public String admin() {
   return "admin page";
}

4.3 漏洞复现

1、直接访问http://192.168.31.68:8080/shiro/admin/page

Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)

会返回 302 跳转要求登录。

2、直接访问/;/shiro/admin/page , 就能直接绕过 Shiro 权限验证,访问到/admin路由中的信息。

Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)
Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)

五、漏洞修复

Shiro 1.5.3修改了URL获取的逻辑,不单独处理context-path,具体代码如下所示:org.apache.shiro.web.util.WebUtils#getPathWithinApplication

Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)

因此就无法再通过构造context-path的方式来进行绕过了。


E


N


D








Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。

Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)


Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)我知道你在看

Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)



原文始发于微信公众号(白帽子):Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月16日09:24:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Apache Shiro 身份验证绕过漏洞复现 (CVE-2020-11989)https://cn-sec.com/archives/1352052.html

发表评论

匿名网友 填写信息