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

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 的灵活解析机制被攻击者利用。开发者需结合框架升级、严格配置和自定义过滤器,确保权限校验逻辑覆盖所有可能的路径变体。


http://www.xdnf.cn/news/5741.html

相关文章:

  • 基于MCP的智能体架构设计:实现智能体与外部世界的无缝连接
  • 辣椒青椒幼苗和杂草检测数据集VOC+YOLO格式706张2类别
  • IP协议、以太网包头及UNIX域套接字
  • 在 Java 8 中 常用时间日期类
  • 【Linux系统】自动化构建-make/Makefile的使用
  • AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(上)
  • #S4U2SELF#S4U2Proxy#CVE-2021-42278/42287
  • 按指定位置或关键字批量删除工作表-Excel易用宝
  • 关系实验课--笛卡尔积
  • cURL:通过URL传输数据的命令行工具库介绍
  • 请求参数:Header 参数,Body 参数,Path 参数,Query 参数分别是什么意思,什么样的,分别通过哪个注解获取其中的信息
  • 每日算法刷题Day4 5.12:leetcode数组4道题,用时1h
  • zabbix6.4监控主机并触发邮件告警
  • Egg.js知识框架
  • Linux驱动:驱动编译流程了解
  • 向量组的维度是单个向量中元素的个数
  • Vue3的命名规范
  • 从ES5到ES6+:JavaScript语法演进与实现解析
  • 《汽车软件升级通用技术要求》 GB 44496-2024——解读
  • 仿函数和函数对象
  • Java中堆栈
  • vue实现进度条带指针
  • Elasticsearch 字段映射与数据类型
  • 面试专栏-03-Git的常用命令
  • 异构计算时代:混合编程的崛起与未来
  • 大型视频学习平台项目问题解决笔记
  • Megatron系列——流水线并行
  • KUKA机器人安装包选项KUKA.PLC mxAutomation软件
  • 产品功能更新迭代后需要重做算法备案吗?
  • Linux系统管理与编程20:Apache