🇰🇷 한글 설명
Pillow 파이썬 이미지 라이브러리의 5.1.0부터 13.0.0 이전 버전에서는 PdfParser.get_value()가 중첩된 PDF 객체를 읽을 때 재귀 깊이 제한 없이 동작합니다. 기존 PDF를 append 모드로 열 때 공격자가 제어하는 배열과 딕셔너리를 따라가므로, 깊게 중첩된 PDF로 인해 처리되지 않은 RecursionError가 발생하거나 워커 프로세스가 종료되어 서비스 거부(DoS)가 발생할 수 있습니다. 이 문제는 13.0.0 버전에서 수정되었습니다.
💡 쉬운 설명
이미지 처리 도구인 Pillow가 아주 복잡하게 중첩된 PDF 파일을 읽을 때 무한히 깊이 들어가다 프로그램이 멈추거나 비정상 종료될 수 있습니다. 악성 PDF 파일 하나로 이미지를 저장하는 서비스를 마비시킬 수 있습니다.
🇺🇸 원문 (English)
Pillow is a Python imaging library. From 5.1.0 until 13.0.0, Pillow's PdfParser.get_value() can recurse without a limit while reading nested PDF objects. The parser follows attacker-controlled arrays and dictionaries when an existing PDF is opened for append. An attacker can provide a deeply nested PDF to an application that saves an image with PDF append enabled. This can raise an uncaught RecursionError or terminate the worker, causing denial of service. This issue is fixed in version 13.0.0.
📍 영향받는 시스템
Pillow 5.1.0 이상 13.0.0 미만을 사용하는 Python 애플리케이션 (PDF append 저장 기능 사용 시)
⚔️ 공격 벡터
공격자가 깊게 중첩된 악성 PDF 파일을 만들어 PDF append 기능으로 이미지를 저장하는 애플리케이션에 제공하여 재귀 오류 또는 프로세스 종료를 유발
🛡️ 대응 방법
Pillow를 13.0.0 이상으로 업그레이드 (pip install --upgrade 'pillow>=13.0.0')
🔧 검증 코드
출력에 VULNERABLE이 표시되면 취약 버전이며 13.0.0 이상으로 업그레이드가 필요하고, PATCHED이면 수정된 버전입니다. 명령 실행 오류 시 packaging 모듈 설치 여부를 확인하세요.
python3 -c "import PIL; from packaging.version import Version; print(PIL.__version__, 'VULNERABLE' if Version(PIL.__version__) < Version('13.0.0') else 'PATCHED')" 2>/dev/null