
POC pour CVE-2026-24688
Ce dépôt contient un code de preuve de concept pour déclencher CVE-2026-24688.
Vulnérabilité critique de déni de service dans la logique d'analyse des contours (signets) de pypdf. Lors du traitement d'un PDF avec des références circulaires de contours, l'analyseur entre dans une boucle infinie qui alloue continuellement de la mémoire, consommant des centaines de Mo par seconde, sur ma machine (TM), et entraîne un crash complet du système.
Il s'agit d'un DoS au niveau du système, pas seulement d'un blocage de l'application.
malicious_circular_outline.pdf - PDF d'exploitation avec contour circulaire (754 octets)create_malicious_pdf.py - Script pour générer le PDF d'exploitationsimple_read_pdf.py - Script de test simple pour reproduire la vulnérabilitétest_pypdf.sh - Script de test automatisé (installe pypdf et exécute le test)README.md - Ce fichierATTENTION : Ces tests peuvent faire planter votre système si vous ne surveillez pas la consommation mémoire et ne l'annulez pas à temps.
# Exécute le script de test automatisé (avec protection par timeout)
chmod +x test_pypdf.sh
./test_pypdf.sh
# Cela va :
# 1. Installer la version vulnérable de pypdf
# 2. Exécuter le test avec un timeout de 15 secondes
# 3. Afficher le comportement de consommation mémoire
# Installer pypdf (version vulnérable 6.6.0)
pip install "pypdf==6.6.0"
# Exécuter avec timeout
timeout 10s python3 simple_read_pdf.py malicious_circular_outline.pdf
# Installer pypdf (version vulnérable 6.6.0)
pip install "pypdf==6.6.0"
# Exécuter sans timeout
python3 simple_read_pdf.py malicious_circular_outline.pdf
def _get_outline(self, node, outline=None):
while True: # ❌ PAS de détection de cycle !
outline_obj = self._build_outline_item(node)
if outline_obj:
outline.append(outline_obj) # ❌ Allocation en mémoire dans la boucle !
if "/Next" not in node:
break
node = node["/Next"] # ❌ Suit les références circulaires
Cause racine : Aucun ensemble visité, aucune limite d'itération, allocation mémoire continue
Test réel :
Caractéristiques de l'attaque :
Corrigé dans la version 6.6.2