
إثبات مفهوم بلغة Python يعيد إنتاج ثغرة الطابعة المحلية في CUPS 2.4.16: يلتقط رمز مصادقة Local عبر نقطة نهاية IPP خبيثة، وينشئ طابعة file://، ويسابق مهمة لكتابة ملفات مملوكة لـ root.
للاستخدام في الاختبار المصرّح به / البحث فقط. شغّل هذا الإثبات فقط ضد الأنظمة التي تملكها أو المصرّح لك صراحةً باختبارها.
يحتوي هذا المستودع على إعادة إنتاج موجّهة إلى CUPS النظامي لثغرة الطابعة المحلية في CUPS 2.4.16.
طُوِّر هذا التنفيذ انطلاقًا من إعادة إنتاج ثغرة CUPS المنشورة، وتم تكييفه ليعمل ضد تثبيت CUPS نظامي قيد التشغيل بالفعل، بدلًا من اشتراط بناء CUPS مثبَّت بشكل منفصل وأداة إعادة إنتاج تُشغَّل بصلاحيات الجذر.
تتبع إعادة الإنتاج هذه السلسلة العامة:
CUPS 2.4.16
│
▼
Local authentication challenge
│
▼
Attacker-controlled IPP endpoint
│
▼
Authorization: Local <token>
│
▼
Authenticated CUPS administration
│
▼
CUPS-Create-Local-Printer
│
▼
file:// device URI
│
▼
Printer/job race
│
▼
Root-owned target file
الاستغلال يعتمد على حالة التسابق (race)، لذا فإن نجاح التنفيذ غير مضمون في كل محاولة.
صُمِّمت إعادة الإنتاج المنشورة كأداة اختبار ثغرة مُتحكَّم بها. وعلى وجه الخصوص، فإنها تفترض تثبيت CUPS مخصَّصًا وتنفّذ عمليات إعداد/إعادة تعيين مناسبة لبيئة إعادة إنتاج لكنها لا تمثّل تثبيتًا توزيعيًا قيد التشغيل بالفعل.
أما هذا التنفيذ فيقوم بدلًا من ذلك بما يلي:
ipptool التنفيذي المثبَّت.cups-create-local-printer.test الخاص بالنظام عند توفره.Local الخاص بـ CUPS.file://.تم الاختبار في مختبر المؤلف باستخدام:
ipptoolيُتوقَّع وجود تعريف الاختبار في:
/usr/share/cups/ipptool/cups-create-local-printer.test
تحقق من تثبيتك باستخدام:
cupsd -v
which ipptool
find /usr/share/cups -name 'cups-create-local-printer.test' 2>/dev/null
اضبط هوية المهاجم والمسار الهدف عبر متغيرات البيئة:
export CUPS_ATTACKER="$USER"
export CUPS_TARGET="/tmp/cups-poc-target"
python3 exploit.py
لإعادة إنتاج مُتحكَّم بها لتصعيد الصلاحيات، اختر هدفًا مناسبًا لبيئة الاختبار المعزولة لديك.
كما يستهدف السكربت افتراضيًا ملفًا بأسلوب sudoers تحت /etc/sudoers.d/، لذا لا تشغّله بشكل عابر على نظام إنتاجي.
يشغّل الإثبات مستمع IPP ويجعل CUPS يوثّق نفسه أمامه. يعيد المستمع في البداية تحدّي 401 مع:
WWW-Authenticate: Local trc="y"
يحتوي الطلب اللاحق على:
Authorization: Local <token>
ثم يُعاد استخدام الرمز ضد نقطة نهاية إدارة CUPS المحلية.
تستخدم إعادة الإنتاج:
CUPS-Create-Local-Printer
مع معرّف جهاز file://.
تنفّذ حلقة المرشّح عمليات الطابعة بشكل متكرر، بما في ذلك:
CUPS-Add-Modify-Printer
CUPS-Accept-Jobs
Resume-Printer
Print-Job
يُكرَّر التسابق عمدًا لأن محاولة واحدة قد لا تنجح.
هذا المستودع هو تكييف، وليس التنفيذ الأصلي المرجعي.
تستند منطقية بناء الطلبات وتسلسل الاستغلال إلى إعادة الإنتاج المنشورة. وتتمحور التغييرات الرئيسية حول التشغيل ضد تثبيت CUPS نظامي موجود وإزالة افتراضات الإعداد/إعادة التعيين الخاصة ببيئة إعادة الإنتاج.
راجع الاستشارة الأمنية ومستودع OpenPrinting CUPS الأصليين للحصول على معلومات الثغرة الموثوقة وإعادة الإنتاج الأصلية.
لا تستخدم هذا ضد تثبيتات CUPS دون تصريح.
للتحقق الدفاعي، تشمل المؤشرات المفيدة طلبات IPP غير المتوقعة إلى نقاط نهاية يتحكم بها المهاجم، وتبادلات توثيق Local غير المعتادة، وإنشاء طابعات محلية غير متوقعة، ونشاط طابعة/مهمة مريب.