
Эксплойт proof-of-concept для CVE-2025-50420, демонстрирующий бесконечную рекурсию в pdfseparate из Poppler через специально сформированные словари /Annots, вызывающую отказ в обслуживании. Включает настройку фаззинга AFL и анализ краха в GDB.
Poppler до версии 25.07.0 содержит уязвимость в логике обработки PDFDoc утилиты pdfseparate: специально созданные словари "/Annots", которые ссылаются сами на себя или друг на друга, приводят к бесконечной рекурсии в "PDFDoc::markAnnotations --> PDFDoc::markPageObjects --> PDFDoc::markObject --> PDFDoc::markDictionary", поскольку обнаружение циклов использует адреса указателей словарей, которые различаются при каждом вызове fetch(). Удалённый злоумышленник может вызвать отказ в обслуживании (зависание или сбой приложения), обработав вредоносный PDF-файл.
Здесь я создаю вредоносный PDF-файл (poppler-pdfseparate-poc), в котором "/Annots" разрешается в самореферентный или взаимно ссылающийся словарь, из-за чего рекурсия Poppler markAnnotations --> markPageObjects --> markObject --> markDictionary никогда не обнаруживает цикл и, таким образом, исчерпывает стек вызовов (бесконечная рекурсия). Для эксплуатации требуется лишь открыть или обработать PDF-файл (например, с помощью pdfseparate).
Процесс воспроизведения выглядит следующим образом:```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/.