
مستودع مخصص لـ CVE-2026-41651، يحتوي على معلومات وتحليل خاص بالثغرة الأمنية لهذه المشكلة الأمنية الواحدة.
🛡️ وحدة أداة الأمن بالذكاء الاصطناعي
CVE-2026-41651: تصعيد الصلاحيات المحلية عبر TOCTOU في PackageKit (Pack2TheRoot)
وحدة تدقيق أمني واستغلال رسمية لمنظومة أداة الأمن بالذكاء الاصطناعي
🌐 عرض توضيحي على الويب • 📚 موقع المشروع • 💬 محادثة المجتمع
التنقل في الموقع: الرئيسية • التحديثات • التنزيلات • الوحدات
توفّر هذه الوحدة أدوات تشخيصية وتحليلًا تقنيًا معمّقًا لـ CVE-2026-41651 (Pack2TheRoot)، وهي حالة تسابق حرجة من نوع Time-of-Check to Time-of-Use (TOCTOU) في معالج المعاملات الخاص بـ PackageKit (packagekitd).
تتيح الثغرة لأي مستخدم محلي غير متمتع بالصلاحيات تجاوز فحوصات التفويض وتثبيت حزم عشوائية بصلاحيات الجذر دون الحاجة إلى أي مصادقة.
| المواصفة | القيمة المعيَّنة | ملاحظات |
|---|---|---|
| معرّف CVE | CVE-2026-41651 |
تصعيد الصلاحيات المحلية عبر TOCTOU في PackageKit |
| المكوّن | خدمة PackageKit الخفية (packagekitd) |
معالج المعاملات الأساسي |
| الإصدارات المتأثرة | 1.0.2 – 1.3.4 |
إصدارات الخدمة غير المُرقَّعة |
| تم الإصلاح في | 1.3.5 |
أُضيف حارس حالة في معالج المعاملات |
| التأثير وناقل الهجوم | تصعيد الصلاحيات المحلية ← root | لا يتطلب مصادقة أو تفاعلًا من المستخدم |
| المنصات المُختبَرة | Ubuntu 24.04، Debian 12 | إعدادات النظام القياسية |

تتسلسل ثلاث عيوب متمايزة في src/pk-transaction.c لتكوين نافذة TOCTOU بين التفويض والتنفيذ:
InstallFiles() فوق cached_transaction_flags وcached_full_paths دون أي شرط، ومن دون التحقق من الحالة.pk_transaction_set_state() الانتقالات العكسية بصمت بينما تبقى الأعلام مكتوبة فوقها.pk_transaction_run() الأعلام المخزّنة مؤقتًا وقت الإرسال من GLib idle، وليس وقت التفويض.PK_TRANSACTION_FLAG_SIMULATE (البت 2، القيمة 0x4) إلى تخطي فحص polkit بالكامل.Attacker packagekitd
│ │
│ CreateTransaction() │
│─────────────────────────────────►│ state = NEW
│◄─────────────────────────────────│
│ │
│ InstallFiles(SIMULATE, dummy) │
│─────────────────────────────────►│ SIMULATE → polkit skipped
│◄─────────────────────────────────│ state = READY
│ │ g_idle_add(run_idle_cb) ← queued
│ │
│ InstallFiles(NONE, payload) │ [BUG 1] flags + paths overwritten
│─────────────────────────────────►│ [BUG 2] set_state(WAITING_FOR_AUTH)
│◄─────────────────────────────────│ → silently rejected
│ │ state stays READY
│ │
│ │ [idle fires]
│ │ pk_transaction_run()
│ │ [BUG 3] reads NONE + payload
│ │ → dpkg installs payload as root
│ │ → postinst: chmod +s /bin/bash
│ │
│ execv("/tmp/.suid_bash -p") │
│─────────────────────────────────►│
│ euid=0(root) │
يتم إرسال كلا استدعاءي InstallFiles كاستدعاءات D-Bus غير متزامنة من نوع fire-and-forget قبل أن تتكرر حلقة main loop الخاصة بالعميل. في النهاية يُرجع Polkitd القيمة NOT_AUTHORIZED للاستدعاء الثاني، لكن بحلول ذلك الوقت يكون APT قد أرسل التثبيت بالفعل.
sudo apt install libglib2.0-dev make
لا توجد تبعيات أخرى — يتم بناء حزم .deb بلغة C خالصة في وقت التشغيل.