daehyuh/CVE-2026-40987
GitHub: daehyuh/CVE-2026-40987
该项目复现了 Spring Integration 远程文件同步器中因未校验服务器返回文件名而导致的路径穿越漏洞(CVE-2026-40987)。
Stars: 0 | Forks: 0
# CVE-2026-40987: Spring Integration 远程文件路径穿越复现项目
此仓库包含了一个用于复现 CVE-2026-40987 的最小 Maven 示例,这是一个高危的
Spring Integration 漏洞,远程文件同步器可能会
将服务器提供的文件名写入到已配置的本地目录之外。
官方安全公告:https://spring.io/security/cve-2026-40987/
## 状态
已发布的 CVE 复现项目。
该问题已由多名研究人员负责任地报告。官方 Spring
安全公告致谢了 M0untainShley、SharlongWen 和 daehyuh。
## 漏洞概述
恶意或被攻陷的 FTP/SFTP/SMB 服务器可以返回包含
父目录穿越序列的文件名,例如 `../escaped-by-ftp-list.txt`。
Spring Integration 的远程文件入站同步路径使用了
服务器提供的文件名,来在已配置的 `localDirectory` 下构建本地目标路径。由于缺乏规范路径验证,生成的
路径可能会逃逸出预期目录,并将攻击者控制的内容
写入到客户端文件系统的其他位置。
## 示例所涉及的受影响组件
- 项目:Spring Integration
- Maven 包:
- `org.springframework.integration:spring-integration-file`
- `org.springframework.integration:spring-integration-ftp`
- 相关的 Spring 代码路径:
- `org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer`
- `org.springframework.integration.ftp.inbound.FtpInboundFileSynchronizer`
## 漏洞代码路径
`AbstractInboundFileSynchronizer` 通过以下方式构建本地目标路径:
```
File localFile = new File(localDirectory, localFileName);
```
默认情况下,`localFileName` 是由 `getFilename(remoteFile)` 返回的远程文件名。
如果远程文件条目提供了 `../escaped-by-spring-integration.txt`,Spring
Integration 会将其写入到已配置的本地下载目录之外。
## 示例演示内容
该示例包含:
* `SpringIntegrationRemoteFilePathTraversalTest`:通过 Spring Integration 的
`Session` 抽象,直接测试共享的
`AbstractInboundFileSynchronizer` 行为。
* `SpringIntegrationFtpPathTraversalTest`:使用真实的
`FtpInboundFileSynchronizer` 对抗一个小型的测试内恶意 FTP 服务器,该服务器的
`LIST` 响应包含 `../escaped-by-ftp-list.txt`。
## 运行示例
Windows:
```
.\mvnw.cmd test
```
macOS/Linux:
```
./mvnw test
```
预期的漏洞运行结果:
```
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
```
该漏洞行为记录于:
```
remoteFilenameWithParentTraversalEscapesConfiguredLocalDirectory
maliciousFtpServerListedFilenameEscapesConfiguredLocalDirectory
```
控制行为记录于:
```
ordinaryRemoteFilenameStaysInsideConfiguredLocalDirectory
```
于 2026-05-12 在本地复现的版本:
```
.\mvnw.cmd "-Dspring-integration.version=6.4.10" test
.\mvnw.cmd "-Dspring-integration.version=6.5.8" test
.\mvnw.cmd "-Dspring-integration.version=7.0.4" test
.\mvnw.cmd "-Dspring-integration.version=7.1.0-RC1" test
```
## 参考
- Spring 安全公告:https://spring.io/security/cve-2026-40987/
标签:CISA项目, JS文件枚举, PoC, Spring框架, 域名枚举, 暴力破解, 漏洞复现, 路径穿越