
Exploit proof-of-concept per CVE-2025-50420 che dimostra la ricorsione infinita in pdfseparate di Poppler tramite dizionari /Annots appositamente creati, causando denial-of-service. Include configurazione di fuzzing AFL e analisi del crash con GDB.
Prima della versione 25.07.0, Poppler contiene una vulnerabilità nella logica di elaborazione PDFDoc dell'utility pdfseparate: dizionari "/Annots" appositamente creati che fanno riferimento a sé stessi o tra loro portano a ricorsione infinita in "PDFDoc::markAnnotations --> PDFDoc::markPageObjects --> PDFDoc::markObject --> PDFDoc::markDictionary", perché il rilevamento dei loop usa indirizzi di puntatore del dizionario che differiscono a ogni fetch(). Un attaccante remoto può causare un denial-of-service (blocco o crash dell'applicazione) elaborando un PDF malevolo.
Qui creo un PDF malevolo (poppler-pdfseparate-poc) in cui "/Annots" risolve un dizionario auto-referenziante o mutuamente referenziante, causando la ricorsione di Poppler markAnnotations --> markPageObjects --> markObject --> markDictionary che non rileva mai il loop e quindi esaurisce lo stack di chiamate (ricorsione infinita). Lo sfruttamento richiede solo l'apertura o l'elaborazione del PDF (ad es. tramite pdfseparate).
La procedura di riproduzione è la seguente:```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/.