Java/SparkJava のラボは、CVE-2026-29000 に関連する JWT/JWE 認証の脆弱性をシミュレートします。アプリケーションはポート 4567 で実行され、有効なログインフロー、偽造トークンの作成、ダッシュボードの確認を試すための API を提供します。
CVE-2026-29000 は、4.5.9、5.7.9、6.3.3 より前のバージョンの pac4j-jwt に影響します。この問題は、暗号化された JWT/JWE を処理する際の JwtAuthenticator に存在し、攻撃者が一部の認証フローで認証トークンを偽造することを可能にします。
使用中のブランチに応じて、最低限アップグレードすべきバージョンは次のとおりです:
4.x: 4.5.9 以上にアップグレード5.x: 5.7.9 以上にアップグレード6.x: 6.3.3 以上にアップグレードプロジェクトのルートディレクトリで次を実行します:
docker compose up --build
ビルドが完了したら、次を開きます:
http://localhost:4567
ラボを停止するには:
docker compose down
イメージをビルド:
docker build -t cve-2026-29000-lab .
コンテナを実行:
docker run --rm -p 4567:4567 --name cve-2026-29000-lab cve-2026-29000-lab
サーバーの公開鍵を確認:
curl http://localhost:4567/api/public-key
lab ディレクトリに移動します:
cd lab
アプリケーションを実行:
mvn exec:java
または、先にビルドしてクラスパスで実行:
mvn -DskipTests package dependency:copy-dependencies
java -cp "target/classes;target/dependency/*" com.demo.App
Linux/macOS では ; の代わりに : を使用します:
java -cp "target/classes:target/dependency/*" com.demo.App
GET / - デモ手順のクイックガイドPOST /api/login - 有効なトークンを生成POST /api/forge-token - バイパスのデモ用トークンを生成GET /api/dashboard - ヘッダー Authorization: Bearer <token> 内のトークンを確認GET /api/public-key - JWK 形式の公開鍵を表示有効なログイン:
curl -X POST http://localhost:4567/api/login \
-H "Content-Type: application/json" \
-d "{\"username\":\"user_lucas\",\"role\":\"user\"}"
偽造トークンの作成:
curl -X POST http://localhost:4567/api/forge-token \
-H "Content-Type: application/json" \
-d "{\"username\":\"admin\",\"role\":\"administrator\"}"
CVE-2026-29000-lab/
|-- Dockerfile
|-- docker-compose.yml
|-- lab/
| |-- pom.xml
| `-- src/main/java/com/demo/
| |-- App.java
| `-- VulnerableAuthenticator.java
`-- README.md
このラボは、学習およびローカル環境でのテスト専用です。公開デプロイや、許可されていないシステムへの攻撃には使用しないでください。