
Prova de conceito de exploit para CVE-2026-24688, uma vulnerabilidade de negação de serviço na análise de contornos do pypdf. Inclui gerador de PDF malicioso e scripts de reprodução que demonstram esgotamento de memória e travamento do sistema.
Este repositório inclui código de prova de conceito para acionar a CVE-2026-24688.
Vulnerabilidade crítica de Negação de Serviço na lógica de análise de contornos (marcadores) do pypdf. Ao processar um PDF com referências circulares de contorno, o analisador entra em um loop infinito que aloca memória continuamente, consumindo centenas de MBs de memória por segundo, na minha máquina (TM), e leva a uma falha completa do sistema.
Este é um DoS a nível de sistema, não apenas um travamento de aplicação.
malicious_circular_outline.pdf - PDF de exploração com contorno circular (754 bytes)create_malicious_pdf.py - Script para gerar o PDF de exploraçãosimple_read_pdf.py - Script de teste simples para reproduzir a vulnerabilidadetest_pypdf.sh - Script de teste automatizado (instala o pypdf e executa o teste)README.mdAVISO: Estes testes podem travar o seu sistema se você não monitorar o consumo de memória e cancelá-los a tempo.
# Execute o script de teste automatizado (com proteção de timeout)
chmod +x test_pypdf.sh
./test_pypdf.sh
# Isso irá:
# 1. Instalar a versão vulnerável do pypdf
# 2. Executar o teste com timeout de 15 segundos
# 3. Mostrar o comportamento do consumo de memória
# Instalar o pypdf (versão vulnerável 6.6.0)
pip install "pypdf==6.6.0"
# Executar com timeout
timeout 10s python3 simple_read_pdf.py malicious_circular_outline.pdf
# Instalar o pypdf (versão vulnerável 6.6.0)
pip install "pypdf==6.6.0"
# Executar sem timeout
python3 simple_read_pdf.py malicious_circular_outline.pdf
def _get_outline(self, node, outline=None):
while True: # ❌ Sem detecção de ciclo!
outline_obj = self._build_outline_item(node)
if outline_obj:
outline.append(outline_obj) # ❌ Alocação de heap no loop!
if "/Next" not in node:
break
node = node["/Next"] # ❌ Segue referências circulares
Causa Raiz: Sem conjunto de visitados, sem limite de iteração, alocação contínua de memória
Teste no Mundo Real:
Características do Ataque:
Corrigido na versão 6.6.2