
CVE-2026-40987 PoC
이 저장소는 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의 remote-file synchronizer가 원격 서버가 제공한 파일명을
로컬 저장 경로를 만들 때 그대로 사용할 수 있었습니다. 이때 canonical path
검증이 충분하지 않으면, 악성 또는 침해된 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일 때 configured local
directory 밖으로 파일 경로가 만들어지는지 확인합니다.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 권고문에는 다음 연구자가 책임 있게 보고한 것으로 기재되어 있습니다.