🇰🇷 한글 설명
LibJWT 3.0.0~3.3.2 버전에서 alg 파라미터가 없는 RSA JWK를 HS256/HS384/HS512 토큰의 검증 키로 수용하는 취약점이 있습니다. OpenSSL 백엔드에서 이는 길이 0인 키로 HMAC 검증을 실행하게 하여, 공격자가 비밀이나 RSA 개인키 없이도 유효한 JWT를 위조할 수 있습니다. alg가 생략된 JWKS에서 키를 로드하고 JWT 헤더에서 검증 알고리즘을 선택하는 애플리케이션들이 영향을 받습니다.
💡 쉬운 설명
JWT 검증 라이브러리가 설정 누락으로 인해 암호화 규칙을 잘못 적용하며, 공격자가 비밀번호 없이 위조된 인증 토큰을 만들 수 있습니다. 웹 인증 시스템이 이를 통해 해킹될 수 있습니다.
🇺🇸 원문 (English)
LibJWT is a C JSON Web Token Library. From 3.0.0 to 3.3.2, libjwt accepts an RSA JWK that does not contain an alg parameter as the verification key for an HS256/HS384/HS512 token. In the OpenSSL backend, this causes HMAC verification to run with a zero-length key, so an attacker can forge a valid JWT without knowing any secret or RSA private key. This is an algorithm-confusion authentication bypass. It affects applications that load RSA keys from JWKS where alg is omitted, which is valid JWK syntax and common in real deployments, and then choose the verification algorithm from the JWT header, for example in a kid lookup callback. This vulnerability is fixed in 3.3.3.
📍 영향받는 시스템
LibJWT 3.0.0 ~ 3.3.2 (OpenSSL 백엔드를 사용하는 JWKS 기반 JWK 로딩 애플리케이션)
⚔️ 공격 벡터
JWKS에서 alg 파라미터 없는 RSA JWK를 로드 후 JWT 헤더의 HS256/HS384/HS512로 검증 시 길이 0인 HMAC 키 사용으로 토큰 위조
🛡️ 대응 방법
LibJWT를 3.3.3 이상으로 업그레이드하고 JWK 로드 시 alg 파라미터 필수 검증 및 알고리즘 화이트리스트 적용
🔧 검증 코드
출력된 버전이 3.3.2 이하면 취약; 3.3.3 이상이면 안전; 미설치 또는 RPM 기반 시스템은 rpm 명령으로 확인
dpkg -l 2>/dev/null | grep libjwt | awk '{print $3}' || rpm -qa 2>/dev/null | grep libjwt