
Практическая лаборатория, демонстрирующая уязвимость обхода пути CVE-2024-38819 в Spring Framework, с уязвимыми и исправленными развертываниями Spring Boot для обучения безопасности.
Это демонстрационное приложение Spring Boot, готовое для Cloud Foundry, для CVE-2024-38819 — уязвимости обхода пути в функциональной обработке статических ресурсов Spring Framework.
CVE-2024-38819 исправлена в Spring Framework, а не напрямую в Spring Boot.
Spring Boot по-прежнему важен в демонстрации, потому что он управляет версиями зависимостей Spring Framework, используемых приложением. Другими словами, обслуживающий релиз Spring Boot может принести исправленную версию Framework, но уязвимый путь кода и исправление безопасности находятся в функциональной обработке статических ресурсов WebFlux/WebMvc Spring Framework.
Приложение представляет небольшой UI хранилища документов клиентов. Публичные документы обслуживаются из /files/** с помощью WebFlux.fn RouterFunctions.resources(...) с FileSystemResource, что соответствует уязвимым условиям в уведомлении Spring. При запуске приложение создает:
Секрет генерируется приложением и не содержит реальных учетных данных.
Эта лаборатория намеренно оставляет Spring Boot на 3.3.4 в обоих режимах и изменяет только управляемую версию Spring Framework:
| Режим | Spring Boot | Spring Framework |
|---|
Профиль Maven patched устанавливает:
<spring-framework.version>6.1.14</spring-framework.version>
Без этого профиля Spring Boot 3.3.4 управляет Spring Framework 6.1.13, что является уязвимой версией, используемой в демонстрации.
Соберите оба демонстрационных артефакта:
scripts/build-artifacts.sh
Это создает два отдельных развертываемых jar-файла:
target/cve-2024-38819-vulnerable.jar
target/cve-2024-38819-patched.jar
mvn spring-boot:run
Откройте:
http://127.0.0.1:8080
Запустите ограниченное доказательство:
python3 scripts/prove-secret-exposure.py --expect vulnerable
Ожидаемый результат для уязвимой версии:
RESULT: vulnerable behavior confirmed. The fake secret was served from outside the public file root.
Запустите исправленный режим:
mvn -Ppatched spring-boot:run
Затем:
python3 scripts/prove-secret-exposure.py --expect patched
Отправьте уязвимую версию:
scripts/cf-push-vulnerable.sh
Это развертывает target/cve-2024-38819-vulnerable.jar как patch-your-spring-vulnerable.
Запустите доказательство против вашего маршрута приложения:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-VULNERABLE-ROUTE \
--allow-remote-demo \
--expect vulnerable
Отправьте исправленную версию:
scripts/cf-push-patched.sh
Это развертывает target/cve-2024-38819-patched.jar как patch-your-spring-patched.
Запустите то же доказательство:
python3 scripts/prove-secret-exposure.py \
--target https://YOUR-PATCHED-ROUTE \
--allow-remote-demo \
--expect patched
Очистка:
cf delete patch-your-spring-vulnerable -f -r
cf delete patch-your-spring-patched -f -r
| Artifact |
|---|
| Уязвимая | 3.3.4 | 6.1.13 | target/cve-2024-38819-vulnerable.jar |
| Исправленная | 3.3.4 | 6.1.14 | target/cve-2024-38819-patched.jar |