
CVE-2022-21449 Java ECDSA署名バイパスの教育用デモ。実際のJWTトークンと偽のJWTトークンを使用して、脆弱性とその認証への影響を示します。
このプロジェクトは、Java の ECDSA 署名検証に影響を与える CVE-2022-21449 脆弱性を実証します。この脆弱性により、攻撃者はゼロ値 (r=0 および s=0) の署名を使用して署名検証をバイパスできます。このプロジェクトは、セキュリティパッチが適用されていない Java 17 上で問題を示すために、実際の JWT トークンと偽の JWT トークン (EC 署名付き) を使用します。
r=0, s=0) を持つ JWT トークン。JwtGenerator: 実際の JWT トークンと偽の JWT トークンを生成します。JwtUtils: 公開 EC 鍵を使用して JWT トークンを検証します。SecurityConfig: トークンベースの認証を実証するために Spring Security を設定します。ProtectedController: トークンベースのアクセス制御をテストするためのエンドポイントを提供します。JwtGenerator コンソールアプリの使用方法JwtGenerator クラスは、有効な JWT トークンと偽の JWT トークンの両方を生成して出力するスタンドアロンのコンソールアプリケーションです。
プロジェクトをビルドする:
mvn clean install
JwtGenerator クラスを実行する:
mvn exec:java -Dexec.mainClass="com.symphony_solutions.demo.util.JwtGenerator"
出力: アプリケーションは以下を出力します:
例:
=== 有効な JWT ===
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGljZSIsInJvbGVzIjpbIkFETUlOIiwiVVNFUiJdLCJpYXQiOjE2NzAwMDAwMDAsImV4cCI6MTY3MDAzNjAwMH0.<signature>
=== ゼロ署名の偽の JWT ===
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJib2IiLCJyb2xlcyI6WyJBRE1JTiIsIlVTRVIiXSwiaWF0IjoxNjcwMDAwMDAwLCJleHAiOjE2NzAwMzYwMDB9.<zeroed_signature>
トークンを使用する:
アプリケーションを起動する:
mvn spring-boot:run
保護されたエンドポイントにアクセスする:
/protected/user または /protected/admin にアクセスします。エンドポイント:
/protected/user: USER または ADMIN ロールが必要。/protected/admin: ADMIN ロールが必要。このプロジェクトは MIT ライセンスの下でライセンスされています。