🇰🇷 한글 설명
PyJWT 2.11.0부터 2.13.0 버전 사이에서 verify_signature가 false일 때 PyJWT._merge_options() 메서드가 호출자가 제공한 가변 옵션 매핑을 수정할 수 있는 취약점이 존재합니다. 만약 애플리케이션이 동일한 옵션 매핑을 재사용하면서 이후 호출에서 verify_signature를 true로 변경하더라도, 만료 시간이나 발행자 확인 등의 검증 설정이 여전히 false로 유지될 수 있습니다. 이로 인해 서명 검증을 활성화했음에도 불구하고 유효하지 않은 클레임을 가진 서명된 토큰이 수락될 수 있습니다.
💡 쉬운 설명
토큰의 유효성을 검사하는 설정값이 실수로 꺼진 상태로 유지되어, 가짜 정보가 담긴 토큰을 정상적인 것으로 착각할 수 있는 문제입니다. 매번 새로운 설정값을 만들지 않고 기존 설정을 재사용하는 프로그램에서 발생합니다.
🇺🇸 원문 (English)
PyJWT is a Python implementation of JSON Web Token standards. From 2.11.0 through 2.13.0, PyJWT's PyJWT._merge_options() method can modify a caller-supplied mutable options mapping when verify_signature is false. If an application reuses that same mapping for a later decode() or decode_complete() call and changes verify_signature to true, the mapping can retain false values for expiration, not-before, issued-at, audience, issuer, subject, and JWT ID checks. A signed token with invalid registered claims can then be accepted without disabling signature verification, but applications that create a fresh options mapping for each call are not affected.
📍 영향받는 시스템
PyJWT versions 2.11.0 through 2.13.0
⚔️ 공격 벡터
공격자가 조작된 클레임을 포함한 토큰을 전송하여, 재사용되는 옵션 매핑의 검증 로직을 우회함
🛡️ 대응 방법
PyJWT를 2.13.1 이상의 최신 버전으로 업데이트하거나, 매 호출 시마다 새로운 옵션 매핑 객체를 생성하도록 코드를 수정하십시오.
🔧 검증 코드
출력된 버전이 2.11.0에서 2.13.0 사이라면 해당 취약점에 노출된 상태입니다.
pip show PyJWT | grep Version