
تحليل متعمق لـ CVE-2026-41651 (Pack2TheRoot)، وهو تصعيد امتيازات محلي في PackageKit. يتضمن تفصيل الثغرة، وسلسلة الهجوم، ومؤشرات الاختراق (IoCs)، وإرشادات التخفيف.
تصعيد الامتيازات المحلية في PackageKit (حالة سباق TOCTOU)
CVSS v3.1: 8.8 (عالية) | CWE-367 | نُشر: 2026-04-22
يُوثّق هذا المستودع تقرير تحليل شخصي ومواد بحثية حول ثغرة تصعيد الامتيازات المحلية CVE-2026-41651 (Pack2TheRoot) في PackageKit، والتي تم الكشف عنها في أبريل 2026.
| البند | المحتوى |
|---|---|
| معرّف CVE | CVE-2026-41651 |
| اسم الثغرة | Pack2TheRoot |
| البرنامج المتأثر | PackageKit 1.0.2 ~ 1.3.4 |
| إصدار التصحيح | PackageKit 1.3.5 |
| نوع الهجوم | تصعيد الامتيازات المحلية (LPE) |
| المكتشف | Deutsche Telekom Red Team |
تتفاعل ثلاثة أخطاء داخل pk-transaction.c في PackageKit معًا، مما يسمح لمستخدم محلي غير مُصرَّح له بالحصول على صلاحيات root.
Bug 1: استدعاء InstallFiles() يكتب فوق cached_transaction_flags دون قيد (السطر 4036)
↓
Bug 2: عند رفض انتقال الحالة، تبقى العلامات الملوثة في الذاكرة دون تراجع (السطر 876~881)
↓
Bug 3: قراءة العلامات الملوثة عند تنفيذ pk_transaction_run() (السطر 2273~2277)
↓
النتيجة: تجاوز مصادقة polkit → تثبيت حزم عشوائية بصلاحيات root → إنشاء bash بصلاحيات SUID
InstallFiles(SIMULATE=0x4, dummy) → تجاوز مصادقة polkitInstallFiles(NONE=0x0, payload) → تلويث العلامات (TOCTOU)NOT_AUTHORIZED يكون تثبيت الحزمة قد اكتمل بالفعل/tmp/.suid_bash → الحصول على euid=0(root)| البند | المحتوى |
|---|---|
| إعادة إنتاج PoC | Docker (Ubuntu 24.04.4 LTS) |
| جمع مؤشرات الاختراق (IoC) | VirtualBox (Ubuntu 22.04.5 LTS, PackageKit 1.2.5) |
| تحليل الكود | GitHub — PackageKit commit 2149735 (ثغرة) / 76cfb675 (تصحيح) |
CVE-2026-41651-analysis/
├── README.md
└── CVE-2026-41651_분석보고서.docx # تقرير التحليل التفصيلي
عند محاولة الهجوم، تُسجَّل أنماط السجلات التالية في النظام.
# أوامر الكشف
journalctl -u packagekit | grep -i "assertion\|emitted\|failed"
PackageKit[PID]: pk_backend_job_emit: assertion 'PK_IS_BACKEND_JOB(job)' failed
PackageKit[PID]: g_signal_emit_valist: assertion 'G_TYPE_CHECK_INSTANCE(instance)' failed
PackageKit[PID]: GLib-Object:CRITICAL: g_object_unref: assertion 'G_IS_OBJECT(object)' failed
PackageKit[PID]: backend job failed
PackageKit[PID]: emit transaction failed
PackageKit[PID]: daemon stop ← تعطل
PackageKit[PID]: daemon start ← إعادة تشغيل تلقائية
# كشف ملفات SUID
find /tmp -perm -4000 -type f 2>/dev/null
# → إذا وُجد /tmp/.suid_bash، يلزم اتخاذ إجراء فوري
# Ubuntu / Debian
sudo apt update && sudo apt upgrade packagekit
# RHEL / Fedora
sudo dnf update PackageKit
# التحقق من الإصدار (الإصدار 1.3.4 أو أقل يعني وجود الثغرة)
dpkg -l | grep -i packagekit # Debian/Ubuntu
rpm -qa | grep -i PackageKit # RHEL/Fedora
# التحقق من حالة الخدمة
systemctl status packagekit
# تعطيل PackageKit
sudo systemctl disable --now packagekit
⚠️ عند التعطيل، لن تعمل أدوات إدارة الحزم الرسومية مثل GNOME Software
أُعدّ هذا المستودع لأغراض البحث الأمني والتعلم.
قد يؤدي استغلال الثغرات أو الوصول غير المصرح به إلى الأنظمة إلى عقوبات قانونية، وقد تم إجراء جميع الاختبارات في بيئات معزولة مملوكة للباحث.
| التاريخ | الحدث |
|---|
| 2026-04-08 | Deutsche Telekom Red Team → الإبلاغ الأولي إلى Red Hat/PackageKit |
| 2026-04-10 | استلام PackageKit من قبل المطوّرين وتأكيد إعادة الإنتاج |
| 2026-04-13 | إعداد مسودة تصحيح خاصة |
| 2026-04-15 | مشاركة الثغرة مع Canonical |
| 2026-04-19 | إشعار خاص لموزّعي التوزيعات |
| 2026-04-22 | إصدار PackageKit 1.3.5، تخصيص CVE، والإفصاح العام |