Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2024-38819 — CVE-2024-38819の詳細な分析。Spring WebFluxのファイルトラバーサル脆弱性で、コードレベルの分析、PoC、フィルタやIPSルールを含む緩和策を提供します。 | Kitploit
ツール/GitHubGitHub/skrkcb2/cve-2024-38819
脆弱性分析エクスプロイトウェブセキュリティペネトレーションテスト論文と研究学習と教育
GitHubskrkcb2/cve-2024-38819

cve-2024-38819

CVE-2024-38819の詳細な分析。Spring WebFluxのファイルトラバーサル脆弱性で、コードレベルの分析、PoC、フィルタやIPSルールを含む緩和策を提供します。

リポジトリを見る
11年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2024-38819

01. File-Traversal と WebFlux の概要

  • 1) File-Traversal と WebFlux の概要

    File-Traversal(パストラバーサル、Path Traversal)の脆弱性は、攻撃者がWebアプリケーションでファイルシステムの権限を迂回して任意のファイルにアクセスできるようにする脆弱性であり、CWE-22に 指定されている攻撃の一種です。

    Spring WebFluxはSpring 5で導入されたリアクティブプログラミングをサポートするモジュールで、非同期ノンブロッキングアプリケーションの開発をサポートし、WebFlux.fnは関数型エンドポイントルーティングを提供して、ラムダ式を使用した簡潔で柔軟なルーティング構成をサポートします。

    CVE-2024-38819はWebFlux.fn、WebMVC.fnを使用するアプリケーションで発生し、本ドキュメントは当該脆弱性がWebFluxを基準にどのように発生するのかコードの流れを確認し、これに応じた対応策を模索します。

02. WebFlux 6.13環境での File-Traversal 脆弱性分析

  • 2.1 WebFlux 6.13を利用した File-Traversal 分析

    Spring WebFlux 6.13 で**静的リソース(static resource)**を配信(Serving)する例を通じて、File-Traversal攻撃が可能です。
    例を見ながら、Spring WebFluxを利用してどのようにFile-Traversalが引き起こされるのか確認していきます。

1) Spring WebFlux 6.13を活用した File-Traversal 攻撃フロー

画像の説明

[図 1]はSpring WebFluxで/static/**に入るすべてのリクエストをサーバーのC:/fileディレクトリから探して配信(Serving)します。ここで RouterFunctions.resources呼び出し中に[図 2]、[図 3]のWebFluxのPathResourceLookupFunction.classで問題が始まります。 [図 2] PathResourceLookupFunction - applyはSpring WebFluxで指定されたパスが有効なリソースを指しているか確認し、そのリソースを Mono形式で返す役割を果たします。この過程でパスマッチング、妥当性検証、パスデコード、リソースアクセスなどの複数のステップを実行中に、isInvalidPath 関数で脆弱性が発生します。 [図 3] PathResourceLookupFunction - isInvalidPathを見ると、StringUtils.cleanPath(path).contains("../")という条件が存在しますが、 http://localhost:8080/static/file/../Windows/System32/drivers/etc/hostsリクエスト時にその条件はTrueになり得ません。理由は、 [図 4] StringUtils.class - cleanPathを見ると、StringUtils.cleanPath(path)はTOP_PATH("..")を除去した後、パスをpathElementsに入れ、topは0になるため、 ".."が1回入った攻撃構文は正常な構文として処理されます。これにより、[図 3]のisInvalidPath関数はfalseを返し、 [図 5] のisResourceUnderLocationのcleanPath呼び出しにより、[図 6]を通じてcleanPathによるもう一度の検証が行われ、[図 5]で渡されたパスはC:/file../Windows/System32/drivers/etc/hostsであり、 [図 7] のコードにより、prefixはC:/となり、パスは[図 4]を通じて/Windows/System32/drivers/etc/hostsに変更され、最終リターンは C:/Windows/System32/drivers/etc/hostsとして処理される流れです。

[図 1] FileApplication.java



画像の説明

[図 2] PathResourceLookupFunction.class - apply




画像の説明

[図 3] PathResourceLookupFunction.class - isInvalidPath


画像の説明

画像の説明

[図 4] StringUtils.class - cleanPath


画像の説明

[図 5] PathResourceLookupFunction.class - apply - 2

画像の説明

[図 6] PathResourceLookupFunction.class - isResourceUnderLocation

画像の説明

[図 7] StringUtils.class - cleanPath -2


2) Spring WebFlux 6.13を活用した File-Traversal 攻撃例

現在はWindowsでC:/fileでテストを実施しましたが、このケースがLinuxでシンボリックリンクと一緒に動作する場合、非常に危険です。
(../../と2回設定した場合は正常ロジックとなり、../と1回の場合のみ脆弱性が発生) 20250207_150316

2-1) Spring WebFlux 6.13を活用した File-Traversal 攻撃例2

Linuxサーバーでシンボリックリンクと一緒に攻撃

root@kitploit:~
 public RouterFunction<ServerResponse> staticResourceRouter() {
     return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
 }

シンボリックリンク追加 ln -s /static /app/static/link の後に攻撃 20250208_101836

03. 対応策

これまでSpring WebFlux環境でFile Traversal(CVE-2024-38819)が実行される流れを確認しました。サーバーの情報が奪取される攻撃方式であるため、 対応策が重要です。そのために、最新バージョンへのアップデート、追加検証ロジックの作成、IPSによる遮断策を提示します。

  • Spring Framework のアップデート

    以下の表を参考に、使用バージョンを確認の上、アップグレードしてください。

    画像の説明

  • 追加検証ロジック作成の例

    上記の攻撃例のとおり、TOP_PATH(..)が1回含まれるケースが問題となるため、簡易的なフィルタ適用ロジックです(参考にして開発者の方々がさらに追加してください)。
    root@kitploit:~
    @Bean
    public RouterFunction<ServerResponse> staticResourceRouter() {    
      return RouterFunctions.resources("/static/**", new FileSystemResource("C:/file"))
              .filter((request, next) -> {
                  String path = request.path();
                  if (path.contains("..")) {
                     if(!StringUtils.cleanPath(path).contains("../")) {
                         return ServerResponse.status(HttpStatus.FORBIDDEN).bodyValue("Vuln path access.");
                     }        
                  }
                  return next.handle(request);
              });
    }
    
  • IPS による遮断

    攻撃例 : Postmanを介してURLに../パスを含めてリクエスト
    image ../ 上位パスへの移動を引き起こすURLリクエストをすべて遮断
    20250210_150316

04. 結論

これまでWebFluxを通じたFile Traversalを確認しました。本脆弱性は、StringUtils.cleanPath()のロジックに起因する問題を認識せずに使用したケースでした。

05. 参考資料

(POC) https://github.com/masa42/CVE-2024-38819-POC
(Spring公式) https://spring.io/security/cve-2024-38819
(CVE-DETAIL) https://www.cvedetails.com/cve/CVE-2024-38819/
(NIST) https://nvd.nist.gov/vuln/detail/cve-2024-38819

ツールをダウンロード