CVE-2020-5405 Spring Cloud Config 路径穿越漏洞浅析
字数 1478 2025-08-20 18:17:53
Spring Cloud Config 路径穿越漏洞(CVE-2020-5405)深度分析与利用指南
漏洞概述
CVE-2020-5405是Spring Cloud Config中存在的一个路径穿越漏洞,允许攻击者通过精心构造的URL访问服务器上的任意文件。该漏洞影响以下版本:
- 2.2.x系列至2.2.2版本
- 2.1.x系列至2.1.7版本
- 以及已停止更新的更早版本
漏洞背景
Spring Cloud Config是一个为微服务架构提供集中化外部配置支持的组件,分为服务端和客户端两部分:
- 服务端:分布式配置中心,连接配置服务器并为客户端提供获取配置信息的接口
- 客户端:从指定配置中心获取和加载配置信息
默认情况下,配置服务器使用git存储配置信息,便于版本管理和访问控制。
漏洞复现
环境搭建
-
下载受影响版本(如2.1.5.RELEASE):
https://github.com/spring-cloud/spring-cloud-config/archive/v2.1.5.RELEASE.zip -
修改配置文件
src/main/resources/configserver.yml:info: component: Config Server spring: application: name: configserver autoconfigure.exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration jmx: default_domain: cloud.config.server profiles: active: native cloud: config: server: native: search-locations: - file:///Users/rai4over/Desktop/spring-cloud-config-2.1.5/config-repo server: port: 8888 management: context_path: /admin -
运行
org.springframework.cloud.config.server.ConfigServerApplication
漏洞利用POC
基本利用方式:
http://127.0.0.1:8888/1/1/..(_)..(_)..(_)..(_)..(_)..(_)..(_)..(_)..(_)etc/passwd
URL编码变形:
http://127.0.0.1:8888/1/1/..%28_%29..%28_%29..%28_%29..%28_%29..%28_%29..%28_%29..%28_%29..%28_%29etc/passwd
漏洞分析
请求处理流程
-
请求路由到
ResourceController#retrieve方法,路径结构为/{name}/{profile}/{label}/{path}name: 仓库名称(解析为1)profile: 配置文件环境(解析为1)label: git分支名(解析为..(_)..(_)..(_)..(_)..(_)..(_)..(_)..(_)..(_)etc)path: 文件路径(解析为passwd)
-
关键处理函数:
resolveName: 替换name中的(_),本例中name不变resolveLabel: 将..(_)替换为../,最终label变为../../../../../../../../../etc
-
GenericResourceRepository#findOne处理:- 获取配置的搜索路径(
search-locations) - 通过
getProfilePaths生成可能的文件路径集合 - 进行安全检查(
isInvalidPath和isInvalidEncodedPath)
- 获取配置的搜索路径(
安全绕过机制
漏洞核心在于:
- 路径中的
(_)被替换为/,但安全检查未完全覆盖这种变形 - 安全检查函数(
isInvalidPath和isInvalidEncodedPath)主要检测:WEB-INF和META-INF路径- URL格式路径
- 直接的
../路径遍历
- 但未检测
..(_)这种变形形式,导致可以绕过路径检查
补丁分析
官方修复提交:
https://github.com/spring-cloud/spring-cloud-config/commit/651f458919c40ef9a5e93e7d76bf98575910fad0
主要修复内容:
- 在
GenericResourceRepository中新增isInvalidLocation方法 - 在
findOne函数中增加对..的严格检测 - 强化了路径规范化处理
防御建议
-
升级到安全版本:
- 2.2.x用户升级到2.2.3+
- 2.1.x用户升级到2.1.8+
-
配置限制:
- 严格限制
search-locations的目录范围 - 避免使用高权限账户运行服务
- 严格限制
-
网络层面:
- 配置WAF规则拦截包含
..(_)的异常请求 - 限制外部访问配置服务器的权限
- 配置WAF规则拦截包含
参考资源
-
官方漏洞公告:
https://pivotal.io/security/cve-2020-5405 -
Spring Cloud Config文档:
https://cloud.spring.io/spring-cloud-static/spring-cloud.html#_serving_plain_text -
相关技术分析:
http://www.lmxspace.com/2019/04/26/Spring-Cloud-Config-Server-%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E5%88%86%E6%9E%90/ -
漏洞复现项目:
https://github.com/DSO-Lab/defvul/tree/master/CVE-2020-5405_SpringCloudConfig