
Exploit de preuve de concept pour CVE-2025-50420 démontrant une récursion infinie dans pdfseparate de Poppler via des dictionnaires /Annots falsifiés, provoquant un déni de service. Inclut la configuration de fuzzing AFL et l'analyse de crash GDB.
Poppler avant la version 25.07.0 contient une vulnérabilité dans la logique de traitement PDFDoc de son utilitaire pdfseparate : des dictionnaires "/Annots" modifiés qui se référencent eux-mêmes ou entre eux mènent à une récursion infinie dans "PDFDoc::markAnnotations --> PDFDoc::markPageObjects --> PDFDoc::markObject --> PDFDoc::markDictionary", car la détection de boucle utilise des adresses de pointeur de dictionnaire qui diffèrent à chaque fetch(). Un attaquant distant peut provoquer un déni de service (gel ou crash de l'application) en traitant un PDF malveillant.
Ici, je crée un PDF malveillant (poppler-pdfseparate-poc) où "/Annots" se résout en un dictionnaire auto-référencé ou mutuellement référencé, ce qui fait que la récursion markAnnotations --> markPageObjects --> markObject --> markDictionary de Poppler ne détecte jamais la boucle et épuise ainsi la pile d'appels (récursion infinie). L'exploitation nécessite seulement d'ouvrir ou de traiter le PDF (par exemple, via pdfseparate).
Le processus de reproduction est le suivant:```bash afl_env(base) user@ubuntu:~/zgd/AFLProject/pdf_parsers/poppler-25.04.0/build/utils$ ./pdfseparate ./../../../../pdf_fuzz/p oppler-master/pdfseparate/analyze_crashes/only_custom/all_crashes/poppler-pdfseparate-poc /dev/null Segmentation fault (core dumped)
afl_env(base) user@ubuntu:/zgd/AFLProject/pdf_parsers/poppler-25.04.0/build/utils$ gdb ./pdfseparate core.2332378
GNU gdb (Ubuntu 12.1-0ubuntu122.04.2) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
https://www.gnu.org/software/gdb/bugs/.
Find the GDB manual and other documentation resources online at:
http://www.gnu.org/software/gdb/documentation/.