CVE-2020-5410 Spring Cloud Config目录穿越漏洞
字数 1265 2025-08-25 22:58:55

Spring Cloud Config 目录穿越漏洞(CVE-2020-5410)深度分析与利用教学

漏洞概述

Spring Cloud Config 在2.2.3之前的2.2.x版本、2.1.9之前的2.1.x版本以及更早的不受支持版本中存在目录穿越漏洞,允许攻击者通过特制URL请求读取服务器上的任意文件。这是Spring Cloud Config继CVE-2019-3799和CVE-2020-5405之后的第三个目录穿越漏洞。

漏洞影响范围

  • 2.2.x版本 < 2.2.3
  • 2.1.x版本 < 2.1.9
  • 更早的不受支持版本

漏洞原理分析

漏洞入口点

漏洞主要存在于EnvironmentController类中,攻击者可以通过构造特殊的namelabel参数实现目录穿越。

关键处理流程

  1. 参数拼接过程

    • 请求参数经过NativeEnvironmentRepository.java中的getArgs方法处理
    • 调用getLocations方法拼接路径:url = env-uri + label + name + extension
  2. 资源加载机制

    • 使用loader.load函数加载资源
    • 遍历locations并拼接name来获取资源
    • 首先检查文件是否存在,若存在则使用url.openConnection获取资源

绕过限制的技术

  1. 锚点(#)绕过

    • 通过在name中以#结尾,使extension成为锚点,从而绕过后缀限制
    • 例如:flag.txt%23会使.txt被当作锚点而非文件扩展名
  2. 路径替换绕过

    • 使用(_)替换/进行目录穿越
    • 处理函数normalize会将SLASH_PLACEHOLDER(即"(_)")替换为"/"

漏洞利用方法

方法一:通过label参数实现穿越

POC示例:

http://127.0.0.1:8889/flag.txt%23/222/..%28_%29..%28_%29..%28_%29..%28_%29..%28_%29..%28_%29..%28_%29tmp%28_%29

解码后等效于:

http://127.0.0.1:8889/flag.txt#/222/../../../../../../../tmp/

方法二:通过name参数实现穿越

POC示例:

http://127.0.0.1:8889/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252Ftmp%252Fflag.txt%23/222/11

解码后等效于:

http://127.0.0.1:8889/../../../../../../../../../../../tmp/flag.txt#/222/11

补丁分析

补丁主要包含两部分:

  1. 路径检测封装

    • 将路径检测方法封装到PathUtils
    • 新增对#字符的检测
  2. 入口参数验证

    • EnvironmentController中增加对namelabel字段的检测

漏洞复现环境搭建

  1. 配置本地读取环境:
profiles:
  active: native
cloud:
  config:
    server:
      native:
        search-locations:
          - file:/test/config-repo-master
  1. 启动易受攻击版本的Spring Cloud Config Server

防御措施

  1. 升级到安全版本:

    • 2.2.x用户升级到2.2.3+
    • 2.1.x用户升级到2.1.9+
  2. 输入验证:

    • 对所有用户输入的路径参数进行严格验证
    • 禁止包含..#等特殊字符
  3. 文件系统权限:

    • 限制应用服务器的文件系统访问权限
    • 使用最小权限原则运行服务

总结

CVE-2020-5410漏洞利用Spring Cloud Config Server对用户输入验证不足的缺陷,通过精心构造的URL实现目录穿越。攻击者可以读取服务器上的任意文件,可能导致敏感信息泄露。开发人员应及时升级到安全版本,并实施严格的输入验证机制。

Spring Cloud Config 目录穿越漏洞(CVE-2020-5410)深度分析与利用教学 漏洞概述 Spring Cloud Config 在2.2.3之前的2.2.x版本、2.1.9之前的2.1.x版本以及更早的不受支持版本中存在目录穿越漏洞,允许攻击者通过特制URL请求读取服务器上的任意文件。这是Spring Cloud Config继CVE-2019-3799和CVE-2020-5405之后的第三个目录穿越漏洞。 漏洞影响范围 2.2.x版本 < 2.2.3 2.1.x版本 < 2.1.9 更早的不受支持版本 漏洞原理分析 漏洞入口点 漏洞主要存在于 EnvironmentController 类中,攻击者可以通过构造特殊的 name 和 label 参数实现目录穿越。 关键处理流程 参数拼接过程 : 请求参数经过 NativeEnvironmentRepository.java 中的 getArgs 方法处理 调用 getLocations 方法拼接路径: url = env-uri + label + name + extension 资源加载机制 : 使用 loader.load 函数加载资源 遍历locations并拼接name来获取资源 首先检查文件是否存在,若存在则使用 url.openConnection 获取资源 绕过限制的技术 锚点(#)绕过 : 通过在name中以 # 结尾,使extension成为锚点,从而绕过后缀限制 例如: flag.txt%23 会使 .txt 被当作锚点而非文件扩展名 路径替换绕过 : 使用 (_) 替换 / 进行目录穿越 处理函数 normalize 会将 SLASH_PLACEHOLDER (即"(_ )")替换为"/" 漏洞利用方法 方法一:通过label参数实现穿越 POC示例: 解码后等效于: 方法二:通过name参数实现穿越 POC示例: 解码后等效于: 补丁分析 补丁主要包含两部分: 路径检测封装 : 将路径检测方法封装到 PathUtils 类 新增对 # 字符的检测 入口参数验证 : 在 EnvironmentController 中增加对 name 和 label 字段的检测 漏洞复现环境搭建 配置本地读取环境: 启动易受攻击版本的Spring Cloud Config Server 防御措施 升级到安全版本: 2.2.x用户升级到2.2.3+ 2.1.x用户升级到2.1.9+ 输入验证: 对所有用户输入的路径参数进行严格验证 禁止包含 .. 、 # 等特殊字符 文件系统权限: 限制应用服务器的文件系统访问权限 使用最小权限原则运行服务 总结 CVE-2020-5410漏洞利用Spring Cloud Config Server对用户输入验证不足的缺陷,通过精心构造的URL实现目录穿越。攻击者可以读取服务器上的任意文件,可能导致敏感信息泄露。开发人员应及时升级到安全版本,并实施严格的输入验证机制。