| Version | Baseline | Attack | Result |
|---|
6.0.3 | ✅ | ✅ | 脆弱 |
6.0.4.1 | ✅ | ✅ | 脆弱 |
6.3.3 | ✅ | ❌ | 修正済み |
この PoC は、脆弱なバージョンにおいて攻撃者が制御する subject とロールによる認証済みプロファイルの作成を実証し、修正済みバージョンでは偽造トークンが拒否されることを示します。
これはWeb アプリケーションのデモではありません。
JwtAuthenticator を直接呼び出し、Docker 内で複数バージョンの pac4j-jwt を比較する小さな Java プログラムです。
目的は次の3点を証明することです:
テスト対象のバージョンは意図的に選択されています:
これにより、このラボには3つの有用な参照ポイントがあります:
.
├── docker-compose.yml
├── Dockerfile
├── pom.xml
└── src/main/java/lab/Repro.java
docker-compose.yml
各バージョンのテストマトリクスを定義します。
Dockerfile
コンテナ内で PoC をビルドおよび実行します。
pom.xml
依存関係を定義し、実行可能な fat JAR をビルドします。
src/main/java/lab/Repro.java
実際の PoC ハーネスです。
docker-compose.yml ファイルは3つのサービスを定義します:
v603 = pac4j-jwt 6.0.3 をテストv6041 = pac4j-jwt 6.0.4.1 をテストpatched = pac4j-jwt 6.3.3 をテストつまり、以下のコマンドは「その特定のバージョンに対して PoC を1回実行する」ことを意味します:
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
--rm は、実行終了後に一時コンテナが削除されることを意味します。
docker compose build --no-cache
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
各バージョンに対して、プログラムは2つのケースを実行します。
正規のトークンを生成し、JwtAuthenticator を通じて検証します。
期待される結果:
攻撃者が制御するクレームを含む偽造トークンを生成し、JwtAuthenticator を通じて検証します。
期待される結果:
次のような出力が表示されるはずです:
[case] baseline
result: ACCEPTED
observed_subject: alice
observed_roles: [ROLE_USER]
[case] attack
result: ACCEPTED
observed_subject: admin#override
observed_roles: [ROLE_SUPERUSER, ROLE_ADMIN]
[summary]
conclusion: VULNERABLE: forged token accepted
意味:
次のような出力が表示されるはずです:
[case] baseline
result: ACCEPTED
observed_subject: alice
observed_roles: [ROLE_USER]
[case] attack
result: REJECTED
reason: CredentialsException: A non-signed JWT cannot be accepted as signature configurations have been defined
[summary]
conclusion: PATCHED: forged token rejected
意味:
この CVE はライブラリレベルの認証パスに影響を与えるものであり、単一のユニバーサルなロールモデルを持つ単一のアプリケーションに影響するものではありません。
再利用可能な部分は攻撃の形状です:
JwtAuthenticator に渡される実際のアプリケーション間で普遍的ではないもの:
そのため、このリポジトリは、任意のアプリケーションに対して自動的に機能するユニバーサルなトークンが存在するかのように装うのではなく、脆弱なバージョンでライブラリが攻撃者が制御する偽造クレームを受け入れることを証明することに焦点を当てています。
docker compose run --rm v603docker compose run --rm v6041docker compose run --rm patched


このプロジェクトは、次の3つの核心的な事実を実証します:
6.0.3 と 6.0.4.1 で受け入れられる6.3.3 で拒否されるこれは、このリポジトリにおけるこの CVE の脆弱バージョン対修正済みバージョンの核心的な証拠です。
脆弱なバージョンでは、偽造トークンは単に解析されるだけでなく、攻撃者が制御する subject とロールを持つ認証済みプロファイルを生成します。