🇰🇷 한글 설명
joserfc는 JOSE 표준(JWS, JWE 등)을 구현한 Python 라이브러리입니다. 1.7.5 이전 버전에서는 joserfc.jwe.decrypt_json()이 JWE General JSON Serialization의 recipients 배열 개수를 제한하지 않아, 각 항목마다 개인키 복호화 연산이 수행됩니다. 인증되지 않은 공격자가 RSA 키 관리 알고리즘을 사용하는 엔드포인트에 조작된 JWE를 전송하면 요청 한 번으로 많은 개인키 연산을 유발해 CPU 자원을 고갈시킬 수 있으며, 기밀성과 무결성에는 영향을 주지 않습니다.
💡 쉬운 설명
이 취약점은 공격자가 하나의 요청에 많은 암호 해독 작업을 몰래 끼워 넣어 서버의 CPU를 과도하게 사용하게 만듭니다. 그 결과 서버가 느려지거나 서비스 거부(DoS) 상태가 될 수 있지만, 데이터가 유출되거나 변조되지는 않습니다.
🇺🇸 원문 (English)
joserfc is a Python library that provides an implementation of several JSON Object Signing and Encryption (JOSE) standards. Prior to 1.7.5, joserfc.jwe.decrypt_json() accepts a JWE General JSON Serialization recipients array without a count limit and calls decrypt_cek() for every entry. An unauthenticated attacker who can submit a JWE to an endpoint using an RSA key-management algorithm can choose the number of private-key decryption operations performed by one request. The verify_all_recipients option does not reduce this work because the affected loop processes every recipient before consulting that setting, allowing repeated requests to exhaust service CPU without affecting confidentiality or integrity. This issue is fixed in version 1.7.5.
📍 영향받는 시스템
joserfc 1.7.5 미만 버전을 사용하는 Python 애플리케이션 (RSA 키 관리 알고리즘 기반 JWE 복호화 기능 사용 시)
⚔️ 공격 벡터
인증 없이 recipients 항목이 대량으로 포함된 JWE General JSON 객체를 복호화 엔드포인트에 반복 전송하여 서버 CPU를 고갈시키는 DoS 공격
🛡️ 대응 방법
joserfc를 1.7.5 이상 버전으로 업그레이드하고, 가능하다면 JWE recipients 개수에 상한선을 두는 입력 검증을 추가하십시오.
🔧 검증 코드
출력된 Version 값이 1.7.5 미만이면 취약하므로 업그레이드가 필요하고, 1.7.5 이상이면 패치가 적용된 상태입니다.
pip show joserfc 2>/dev/null | grep -i '^version'