当前位置: 首页 > news >正文

CVE-2020-1957 漏洞报告


漏洞概述

CVE-2020-1957 是 Apache Shiro 框架(1.5.2 之前版本)与 Spring 框架集成时存在的权限绕过漏洞。攻击者通过构造包含特殊字符(如 /;)的 URL 路径,利用 Shiro 与 Spring 对路径解析的差异,绕过权限校验并访问受保护的资源。该漏洞可导致未授权访问敏感接口或数据,CVSS 评分为 7.5(高危)。


技术细节分析

1. 漏洞成因
  • 路径解析差异
    Shiro 的 PathMatchingFilterChainResolver 使用简单的字符串匹配逻辑(基于 AntPathMatcher),而 Spring 的 AntPathMatcher 支持更灵活的路径标准化(如忽略结尾的 / 或解析 ; 后的内容)。例如:

    • Shiro 将 /admin//admin 视为不同路径,而 Spring 可能视为同一路径。
    • Shiro 在处理分号 ; 时会截断后续内容(如 /admin;xxx 解析为 /admin),而 Spring 可能保留完整路径。
  • 配置缺陷
    Shiro 的过滤器链配置若未覆盖所有可能的路径变体(如未配置 /admin/**/admin/),攻击者可构造 /admin//admin;xxx 绕过校验。

2. 源码分析
@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();chainDefinition.addPathDefinition("/admin/**", "authc"); // 要求认证return chainDefinition;
}

问题点

  1. 路径匹配逻辑不严格
    Shiro 的 /admin/** 规则无法匹配 /admin//admin;xxx 等变体路径,导致权限校验失效。
  2. 分号处理缺陷
    Shiro 的 decodeAndCleanUriString 方法会截断分号后的内容(如 /admin;../test 变为 /admin),而 Spring 可能解析为 /test,导致绕过。

攻击示例

  • Payload 1/admin/

    • Shiro 校验路径 /admin/ 不匹配 /admin/**,放行请求。
    • Spring 解析为 /admin,命中 AccountInfoController/admin/ 接口。
  • Payload 2/xxx;/../admin

    • Shiro 截断分号后内容,校验路径 /xxx
    • Spring 解析为 /admin,成功访问受保护资源。

漏洞复现

1.环境搭建

vulhub搭建漏洞环境
在这里插入图片描述

2.访问8080端口

在这里插入图片描述

3.访问/admin,出现302

在这里插入图片描述

4.访问/xxx/..;/admin/

在这里插入图片描述
绕过权限校验,访问到管理页面


修复方案

  1. 升级 Shiro 版本
    升级至 Shiro 1.5.3+,修复了路径标准化和分号处理问题。

  2. 严格路径配置
    在 Shiro 规则中覆盖所有可能变体(如同时配置 /admin/admin/):

    chainDefinition.addPathDefinition("/admin", "authc");
    chainDefinition.addPathDefinition("/admin/", "authc");
    chainDefinition.addPathDefinition("/admin/**", "authc");
    
  3. 自定义路径标准化过滤器
    强制规范化请求 URI(移除冗余 /;):

    public class NormalizedPathFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {String uri = request.getRequestURI();String normalizedUri = UriUtils.normalizePath(uri).replaceAll(";.*", "");request = new NormalizedHttpServletRequestWrapper(request, normalizedUri);chain.doFilter(request, response);}
    }
    

总结

CVE-2020-1957 暴露了 Shiro 与 Spring 集成时路径解析不一致的安全风险。其核心问题在于 Shiro 未对请求路径进行充分标准化,而 Spring 的灵活解析机制被攻击者利用。开发者需结合框架升级、严格配置和自定义过滤器,确保权限校验逻辑覆盖所有可能的路径变体。


相关文章:

  • 香港维尔利健康科技集团成都区域运营中心投入使用,西南市场战略全面提速
  • labview硬件驱动——测试软件的安装(基于win11系统)
  • 多线程(2)——Thread类及常见方法
  • 项目功能-图片清理(上)
  • 基于SpringBoot的博客系统测试报告
  • 多模态论文笔记——Coca
  • 回答 | 图形数据库neo4j社区版可以应用小型企业嘛?
  • 手撕算法(定制整理版2)
  • 基于事件驱动和策略模式的差异化处理方案
  • Python动态渲染页面抓取之Selenium使用指南
  • 基于 51 单片机的 PWM 电机调速系统实现
  • 【AI提示词】波特五力模型专家
  • Linux常用命令详解(上):目录与文件操作及拷贝移动命令
  • OpenMCU(六):STM32F103开发板功能介绍
  • mac M2下的centos8:java和jenkins版本匹配,插件安装问题
  • 电厂除灰系统优化:时序数据库如何降低粉尘排放
  • 支付宝API-SKD-GO版
  • HBase进阶之路:从原理到实战的深度探索
  • 基于LVS和Keepalived实现高可用负载均衡架构
  • Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解
  • 特朗普开启第二任期首次外访:中东行主打做生意,不去以色列
  • 西藏日喀则市拉孜县发生5.5级地震,震源深度10公里
  • 5.19中国旅游日,上海56家景区景点限时门票半价
  • 宣布停火后,印控克什米尔地区再次传出爆炸声
  • 北京2025年住房发展计划:供应商品住房用地240-300公顷,建设筹集保租房5万套
  • 国博馆刊|北朝至唐初夏州酋豪李氏家族的发展与身份记忆