これは、CVE-2024-38819 向けの Cloud Foundry 対応 Spring Boot デモです。CVE-2024-38819 は、Spring Framework の機能的静的リソース処理におけるパストラバーサルの脆弱性です。
CVE-2024-38819 は Spring Framework で修正されており、Spring Boot 自体で直接修正されているわけではありません。
Spring Boot は、アプリケーションが使用する Spring Framework の依存関係バージョンを管理するため、このデモでは依然として重要です。言い換えれば、Spring Boot のメンテナンスリリースで修正済み Framework バージョンを導入できますが、脆弱なコードパスとセキュリティ修正は Spring Framework の WebFlux/WebMvc 機能的静的リソース処理にあります。
このアプリは、小さな顧客文書ボールト UI を提供します。公開文書は、FileSystemResource を指定した WebFlux.fn RouterFunctions.resources(...) を使用して /files/** から配信されます。これは、Spring アドバイザリの脆弱な条件に一致します。起動時にアプリは以下を作成します。
シークレットはアプリによって生成され、実際の認証情報は含まれていません。
このラボでは、両モードとも意図的に Spring Boot を 3.3.4 に保ち、管理される Spring Framework バージョンのみを変更しています。
| Mode | Spring Boot | Spring Framework | Artifact |
|---|
| Vulnerable | 3.3.4 | 6.1.13 | target/cve-2024-38819-vulnerable.jar |
| Patched | 3.3.4 | 6.1.14 | target/cve-2024-38819-patched.jar |
patched Maven プロファイルは次を設定します。
<spring-framework.version>6.1.14</spring-framework.version>
そのプロファイルがない場合、Spring Boot 3.3.4 は Spring Framework 6.1.13 を管理します。これはデモに使用される脆弱なバージョンです。
両方のデモ成果物をビルドします。
scripts/build-artifacts.sh
これにより、2 つの異なるデプロイ可能な 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