该项目演示了 CVE-2022-21449 漏洞,该漏洞影响 Java 的 ECDSA 签名验证。此漏洞允许恶意行为者通过使用零值签名(r=0 和 s=0)绕过签名验证。项目使用真实和伪造的 JWT 令牌以及 EC 签名,在未安装安全补丁的 Java 17 上展示该问题。
r=0, s=0)。JwtGenerator:生成真实和伪造的 JWT 令牌。JwtUtils:使用 EC 公钥验证 JWT 令牌。SecurityConfig:配置 Spring Security 以演示基于令牌的身份验证。ProtectedController:提供端点以测试基于令牌的访问控制。JwtGenerator 控制台应用JwtGenerator 类是一个独立的控制台应用程序,用于生成并打印有效和伪造的 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 许可证。