
POC para CVE-2026-24688
Este repositorio incluye código de prueba de concepto para desencadenar la CVE-2026-24688.
Vulnerabilidad crítica de denegación de servicio en la lógica de análisis de esquemas (marcadores) de pypdf. Al procesar un PDF con referencias circulares en el esquema, el analizador entra en un bucle infinito que asigna memoria continuamente, consumiendo cientos de MB de memoria por segundo, en mi máquina (TM), y provoca un colapso total del sistema.
Esto es un DoS a nivel de sistema, no solo un cuelgue de la aplicación.
malicious_circular_outline.pdf - PDF de explotación con esquema circular (754 bytes)create_malicious_pdf.py - Script para generar el PDF de explotaciónsimple_read_pdf.py - Script de prueba simple para reproducir la vulnerabilidadtest_pypdf.sh - Script de prueba automatizado (instala pypdf y ejecuta la prueba)README.md - Este archivoADVERTENCIA: Estas pruebas pueden provocar el colapso de su sistema si no vigila el consumo de memoria y lo cancela a tiempo.
# Ejecute el script de prueba automatizado (con protección de tiempo de espera)
chmod +x test_pypdf.sh
./test_pypdf.sh
# Esto:
# 1. Instalará la versión vulnerable de pypdf
# 2. Ejecutará la prueba con un tiempo de espera de 15 segundos
# 3. Mostrará el comportamiento del consumo de memoria
# Instale pypdf (versión vulnerable 6.6.0)
pip install "pypdf==6.6.0"
# Ejecute con tiempo de espera
timeout 10s python3 simple_read_pdf.py malicious_circular_outline.pdf
# Instale pypdf (versión vulnerable 6.6.0)
pip install "pypdf==6.6.0"
# Ejecute sin tiempo de espera
python3 simple_read_pdf.py malicious_circular_outline.pdf
def _get_outline(self, node, outline=None):
while True: # ❌ ¡Sin detección de ciclos!
outline_obj = self._build_outline_item(node)
if outline_obj:
outline.append(outline_obj) # ❌ ¡Asignación de memoria en el bucle!
if "/Next" not in node:
break
node = node["/Next"] # ❌ Sigue referencias circulares
Causa raíz: Sin conjunto de nodos visitados, sin límite de iteraciones, asignación continua de memoria
Prueba en el mundo real:
Características del ataque:
Corregido en la versión 6.6.2