
استغلال إثبات المفهوم لـ CVE-2025-50420 يوضح التكرار اللانهائي في pdfseparate الخاص بـ Poppler عبر قواميس /Annots المصممة، مما يسبب رفض الخدمة. يتضمن إعداد fuzzing بـ AFL وتحليل الأعطال بـ GDB.
تحتوي Poppler قبل الإصدار 25.07.0 على ثغرة أمنية في منطق معالجة PDFDoc بأداة pdfseparate الخاصة بها: تؤدي قواميس "/Annots" المصمّمة بعناية والتي تشير إلى نفسها أو إلى بعضها البعض إلى استدعاء متكرر لا نهائي (infinite recursion) في "PDFDoc::markAnnotations --> PDFDoc::markPageObjects --> PDFDoc::markObject --> PDFDoc::markDictionary"، لأن اكتشاف الحلقات يستخدم عناوين مؤشرات القواميس التي تختلف في كل استدعاء لـ fetch(). يمكن لمهاجم عن بُعد التسبّب في رفض الخدمة (تجمّد التطبيق أو تعطّله) من خلال معالجة ملف PDF خبيث.
هنا قمتُ بإنشاء ملف PDF خبيث (poppler-pdfseparate-poc) حيث يحلّ "/Annots" إلى قاموس يشير إلى نفسه أو إلى قاموس آخر يشير إليه بشكل متبادل، مما يتسبب في عدم تمكن العودية markAnnotations --> markPageObjects --> markObject --> markDictionary الخاصة بـ Poppler من اكتشاف الحلقة وبالتالي استنفاد مكدّس الاستدعاء (استدعاء متكرر لا نهائي). لا يتطلب استغلال الثغرة سوى فتح ملف 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/.