
이 프로젝트는 Java의 ECDSA 서명 검증에 영향을 미치는 CVE-2022-21449 취약점을 시연합니다. 이 취약점은 0 값(r=0, s=0)의 서명을 사용하여 악의적인 공격자가 서명 검증을 우회할 수 있게 합니다. 이 프로젝트는 보안 패치가 적용되지 않은 Java 17에서 EC 서명이 포함된 실제 및 가짜 JWT 토큰을 사용하여 이 문제를 보여줍니다.
r=0, s=0).JwtGenerator: 실제 및 가짜 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"
출력: 애플리케이션은 다음을 출력합니다:
예시:
=== Valid JWT ===
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGljZSIsInJvbGVzIjpbIkFETUlOIiwiVVNFUiJdLCJpYXQiOjE2NzAwMDAwMDAsImV4cCI6MTY3MDAzNjAwMH0.<signature>
=== Fake JWT with zero signature ===
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJib2IiLCJyb2xlcyI6WyJBRE1JTiIsIlVTRVIiXSwiaWF0IjoxNjcwMDAwMDAwLCJleHAiOjE2NzAwMzYwMDB9.<zeroed_signature>
토큰 사용:
애플리케이션 시작:
mvn spring-boot:run
보호된 엔드포인트 접근:
/protected/user 또는 /protected/admin에 접근하세요.엔드포인트:
/protected/user: USER 또는 ADMIN 역할이 필요합니다./protected/admin: ADMIN 역할이 필요합니다.이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.