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