
CVE-2026-24688에 대한 PoC
이 저장소에는 CVE-2026-24688을 트리거하기 위한 개념 증명(PoC) 코드가 포함되어 있습니다.
pypdf의 개요(책갈피) 파싱 로직에서 심각한 서비스 거부(DoS) 취약점이 발견되었습니다. 순환 개요 참조가 포함된 PDF를 처리할 때 파서는 무한 루프에 빠져 메모리를 지속적으로 할당하며, 제 시스템(TM)에서는 초당 수백 MB의 메모리를 소비하다가 결국 완전한 시스템 충돌을 일으킵니다.
이는 단순한 애플리케이션 중단이 아닌, 시스템 수준의 DoS입니다.
malicious_circular_outline.pdf - 순환 개요가 포함된 익스플로잇 PDF (754바이트)create_malicious_pdf.py - 익스플로잇 PDF를 생성하는 스크립트simple_read_pdf.py - 취약점을 재현하는 간단한 테스트 스크립트test_pypdf.sh - 자동화된 테스트 스크립트 (pypdf를 설치하고 테스트 실행)README.md - 이 파일경고: 메모리 사용량을 주시하고 제때 취소하지 않으면 이러한 테스트로 인해 시스템이 충돌할 수 있습니다.
# Run the automated test script (with timeout protection)
chmod +x test_pypdf.sh
./test_pypdf.sh
# This will:
# 1. Install the vulnerable version of pypdf
# 2. Run test with 15-second timeout
# 3. Show memory consumption behavior
# Install pypdf (vulnerable version 6.6.0)
pip install "pypdf==6.6.0"
# Run with timeout
timeout 10s python3 simple_read_pdf.py malicious_circular_outline.pdf
# Install pypdf (vulnerable version 6.6.0)
pip install "pypdf==6.6.0"
# Run without timeout
python3 simple_read_pdf.py malicious_circular_outline.pdf
def _get_outline(self, node, outline=None):
while True: # ❌ NO cycle detection!
outline_obj = self._build_outline_item(node)
if outline_obj:
outline.append(outline_obj) # ❌ Heap allocation in loop!
if "/Next" not in node:
break
node = node["/Next"] # ❌ Follows circular references
근본 원인: 방문한 노드 집합(visited set) 없음, 반복 횟수 제한 없음, 지속적인 메모리 할당
실제 환경 테스트:
공격 특성:
6.6.2 버전에서 수정되었습니다.