🇰🇷 한글 설명
pyasn1은 Python용 범용 ASN.1 라이브러리입니다. 0.6.5 이전 버전에서는 구조화된(constructed) BIT STRING 디코딩 시 이전 조각까지 누적된 비트 값을 반복적으로 시프트하고 복사하여 이차적(quadratic) 연산량이 발생합니다. 공격자가 조작한 BER/CER 입력이나 스키마 기반 DER 입력으로 인해 decode() 중 CPU가 고갈될 수 있습니다.
💡 쉬운 설명
pyasn1 라이브러리가 인증서나 암호화 데이터를 해석할 때, 아주 조각난 데이터를 처리하면 계산이 기하급수적으로 느려집니다. 공격자가 이런 데이터를 보내면 서버의 CPU를 소모시켜 서비스를 멈추게 할 수 있습니다.
🇺🇸 원문 (English)
pyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, constructed BIT STRING decoding repeatedly shifts and copies the complete bit value accumulated from earlier fragments. Attacker-controlled BER or CER input contains many constructed BIT STRING fragments; schema-driven DER also accepts a definite-length constructed BIT STRING. BitStringPayloadDecoder repeatedly calls BitString.fromOctetString with the prior bitString as prepend, shifting an ever-growing SizedInteger for each fragment and causing quadratic work. Large fragmented values can exhaust CPU during decode() without requiring later conversion or formatting. This issue is fixed in version 0.6.5.
📍 영향받는 시스템
pyasn1 0.6.5 미만 버전을 사용하는 Python 애플리케이션 전반 (인증서·LDAP·SNMP·Kerberos 등 ASN.1 처리 시스템)
⚔️ 공격 벡터
공격자가 많은 구조화된 BIT STRING 조각을 포함한 조작된 BER/CER/DER 데이터를 디코딩하는 서비스에 전송하여 CPU 자원을 고갈시킴
🛡️ 대응 방법
pyasn1을 0.6.5 이상으로 업그레이드 (pip install --upgrade 'pyasn1>=0.6.5')
🔧 검증 코드
출력된 버전이 0.6.5 이상이면 취약점이 해결된 것이며, 0.6.5 미만이면 업그레이드가 필요합니다.
pip show pyasn1 2>/dev/null | grep -i '^version'