
# CVE-2026-24688 개념 증명 익스플로잇 pypdf의 개요(outline) 파싱에서 발생하는 서비스 거부(denial-of-service) 취약점인 CVE-2026-24688에 대한 개념 증명 익스플로잇입니다. 메모리 고갈과 시스템 충돌을 입증하는 악성 PDF 생성기와 재현 스크립트가 포함되어 있습니다.
이 저장소에는 CVE-2026-24688을 트리거하기 위한 개념 증명 코드가 포함되어 있습니다.
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 - 이 파일경고: 메모리 사용량을 주시하고 제때 취소하지 않으면 이러한 테스트로 인해 시스템이 충돌할 수 있습니다.
# 자동화된 테스트 스크립트 실행 (타임아웃 보호 포함)
chmod +x test_pypdf.sh
./test_pypdf.sh
# 이 스크립트는 다음을 수행합니다:
# 1. 취약한 버전의 pypdf 설치
# 2. 15초 타임아웃으로 테스트 실행
# 3. 메모리 소비 동작 표시
# pypdf 설치 (취약한 버전 6.6.0)
pip install "pypdf==6.6.0"
# 타임아웃과 함께 실행
timeout 10s python3 simple_read_pdf.py malicious_circular_outline.pdf
# pypdf 설치 (취약한 버전 6.6.0)
pip install "pypdf==6.6.0"
# 타임아웃 없이 실행
python3 simple_read_pdf.py malicious_circular_outline.pdf
def _get_outline(self, node, outline=None):
while True: # ❌ 순환 감지 없음!
outline_obj = self._build_outline_item(node)
if outline_obj:
outline.append(outline_obj) # ❌ 루프 내 힙 할당!
if "/Next" not in node:
break
node = node["/Next"] # ❌ 순환 참조를 따라감
근본 원인: 방문 집합 없음, 반복 제한 없음, 지속적인 메모리 할당
실제 환경 테스트:
공격 특성:
버전 6.6.2에서 수정됨