本仓库是Spring官方安全公告中公开的CVE-2026-40987的最小复现PoC。
Remote-file synchronizer in Spring Integration writes server-supplied filename under localDirectory without canonicalizationAV:N/AC:H/PR:L/UI:R/S:C/C:L/I:H/A:LSpring Integration的远程文件同步器在构建本地存储路径时,直接使用了远程服务器提供的文件名。此时,如果规范路径验证不足,恶意或受损的FTP/SFTP/SMB服务器可以返回类似../escaped-by-ftp-list.txt的文件名,从而在设定的localDirectory之外写入文件。
根据官方公告,这不仅仅是FTP的问题,而是属于Spring Integration的FTP/SFTP/SMB远程文件同步系列的问题。本PoC通过使用其中的FtpInboundFileSynchronizer,以最简洁清晰的方式复现了相同的漏洞路径。
官方公告影响产品:
影响版本:
7.0.0 - 7.0.46.5.0 - 6.5.86.4.0 - 6.4.116.3.0 - 6.3.145.5.0 - 5.5.20修复版本:
7.0.5 或 7.0.4.16.5.9 或 6.5.8.16.4.126.3.155.5.21测试展示了两个路径。
SpringIntegrationRemoteFilePathTraversalTest
../escaped-by-spring-integration.txt时,文件路径是否会超出配置的本地目录。SpringIntegrationFtpPathTraversalTest
LIST响应中放入../escaped-by-ftp-list.txt。FtpInboundFileSynchronizer接收到该文件名后,下载incoming/../escaped-by-ftp-list.txt,并确认结果文件创建在downloads目录之外。PoC的核心流程如下:
configured localDirectory = <temp>/downloads
remote LIST filename = ../escaped-by-ftp-list.txt
resulting local path = <temp>/downloads/../escaped-by-ftp-list.txt
normalized location = <temp>/escaped-by-ftp-list.txt
也就是说,可以将文件写入应用程序预期的下载目录之外。
Windows:
.\mvnw.cmd test
macOS/Linux:
./mvnw test
基于漏洞版本的预期结果:
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
测试成功意味着已复现漏洞行为。也就是说,在存在漏洞的依赖中,测试通过并证明了目录逃逸写入操作。
可以使用以下命令验证多个漏洞版本:
.\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-integration.version=7.0.4。
此漏洞允许攻击者将攻击者控制的内容写入客户端应用程序的本地文件系统。攻击者并非普通HTTP客户端,而是需要能够操纵应用程序信任并轮询的远程文件服务器的响应。
因此,虽然存在前提条件,但条件满足时可能产生以下影响:
官方公告将此问题评定为High。
官方Spring公告中记载了以下研究人员负责披露: