Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-41651 — إثبات مفهوم لاستغلال CVE-2026-41651، وهو تصعيد صلاحيات محلي من نوع TOCTOU في PackageKit، مع تحليل تقني ومنطق كشف وإرشادات معالجة. | Kitploit
أدوات/GitHubGitHub/baph00met/cve-2026-41651
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالاختبار الاختراقالفريق الأحمرمختبرات وتدريب عملي
GitHubbaph00met/cve-2026-41651

CVE-2026-41651

إثبات مفهوم لاستغلال CVE-2026-41651، وهو تصعيد صلاحيات محلي من نوع TOCTOU في PackageKit، مع تحليل تقني ومنطق كشف وإرشادات معالجة.

عرض المستودع
153منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-41651 — PackageKit TOCTOU تصعيد الامتيازات المحلي

التصنيف: أداة تقييم الفريق الأرجواني
للاستخدام المصرح به فقط. هذه الوثيقة والبرنامج النصي للاختبار المرفق مخصصان حصريًا للتحقق الأمني الداخلي على الأنظمة التي تم الحصول على إذن كتابي لها.


إثبات الاستغلال

إثبات الاستغلال


جدول المحتويات

  1. نظرة عامة على الثغرة
  2. التحليل الفني
  3. وصف البرنامج النصي للاختبار
    • السلوك
    • دعم البيئات المحصّنة
    • التوافق
  4. مؤشرات الاختراق
    • نظام الملفات
    • العمليات والتنفيذ
    • نشاط D-Bus
    • أنماط سجلات التدقيق
    • آثار مدير الحزم
    • آثار تصعيد الامتيازات
  5. منطق الكشف
  6. الأنظمة والإصدارات المتأثرة
  7. المعالجة
  8. المراجع

نظرة عامة على الثغرة

PackageKit هي طبقة تجريد D-Bus لإدارة حزم النظام، وهي موجودة افتراضيًا على أجهزة سطح المكتب القائمة على GNOME عبر Debian وUbuntu وFedora وRHEL وSUSE وArch Linux. نظرًا لأنها تتوسط عمليات الحزم المميزة نيابة عن المستخدمين غير المميزين، فإن وجود خلل في تدفق التفويض الخاص بها له تأثير جذري على مستوى النظام بأكمله.


التحليل الفني

السبب الجذري

pk-transaction.c (قبل الإصدار 1.3.5) لم يفرض حارس حالة على إعادة استدعاء طرق الإجراء. يمكن لعميل D-Bus استدعاء InstallFiles (أو طرق إجراء أخرى) عدة مرات على نفس كائن المعاملة بعد أن انتقل بالفعل خارج PK_TRANSACTION_STATE_NEW.

سلسلة الهجوم

root@kitploit:~
المهاجم (غير مميز)
  │
  ├─① CreateTransaction()          → PackageKit يُرجع مسار كائن المعاملة (tid)
  │
  ├─② InstallFiles(tid, FLAG_SIMULATE=4, [dummy.pkg])
  │       PackageKit يضع فحص تفويض polkit في قائمة الانتظار لـ dummy.pkg.
  │       لا يحدث أي تثبيت بعد — SIMULATE تعني تشغيل تجريبي فقط.
  │
  ├─③ InstallFiles(tid, FLAG_NONE=0, [payload.pkg])   ← نافذة TOCTOU
  │       إعادة استدعاء على نفس tid قبل اكتمال التفويض.
  │       الإصدارات المعرضة تستبدل المعاملات في قائمة الانتظار بـ payload.pkg.
  │
  └─④ polkit يمنح التفويض (وافق المستخدم أو تفويض تلقائي)
          packagekitd يثبّت payload.pkg كجذر.
          سكربت postinst/post الخاص بالحزمة: install -m 4755 /bin/bash /tmp/.suid_bash
          المهاجم ينفذ /tmp/.suid_bash -p  →  قشرة جذر.

لماذا يفوز السباق

الخطوتان ② و③ تُرسلان كاستدعاءات D-Bus غير متزامنة غير محظورة على نفس الاتصال وتُفرَّغان في كتابة واحدة. تصل الرسالتان إلى packagekitd قبل أن يتمكن من معالجة ② وتقديم آلة الحالة، مما يترك نافذة TOCTOU مفتوحة. يضيف الإصلاح في 1.3.5 فحص حالة صريحًا يُرجع PK_TRANSACTION_ERROR_INVALID_STATE على أي إعادة استدعاء بعد PK_TRANSACTION_STATE_NEW.


وصف البرنامج النصي للاختبار

الملف: cve-2026-41651-purpleteam.py
اللغة: Python 3
التبعيات: python3-gi (ربط GObject introspection / GLib/Gio)

الغرض

يوضح قابلية استغلال CVE-2026-41651 على نظام اختبار مُجهّز لأغراض:

  • التحقق مما إذا كان إصدار PackageKit المثبت معرضًا للخطر
  • توليد بيانات IOC واقعية لضبط SIEM/EDR
  • اختبار تغطية الكشف قبل وبعد التصحيح

السلوك

دعم البيئات المحصّنة

يمكن للأنظمة المحصّنة افتراضيًا حظر الاستغلال عند نقطتين مستقلتين. يتعامل البرنامج النصي مع كلتيهما تلقائيًا.

1. umask تقييدي (027 / 077)

يؤدي umask الموروث من العملية بقيمة 027 أو 077 إلى إنتاج mkdir() لأدلة 750 أو 700. يجب على كل من dpkg-deb وrpmbuild اجتياز شجرة البناء الكاملة — إذا كان أي دليل غير قابل للقراءة يفشل البناء بصمت.

الإصلاح المطبق: يتم استدعاء os.umask(0o022) عند بدء التشغيل قبل إنشاء أي ملف أو دليل. بالإضافة إلى ذلك، يتلقى كل دليل وملف في شجرة البناء chmod صريحًا فور الإنشاء (0o755 للأدلة والسكربتات، 0o644 لملفات البيانات)، بحيث تكون الأذونات الصحيحة مضمونة بغض النظر عن umask الموروث.

2. أعلام تحميل nosuid / noexec على /tmp

العلمالتأثير على الاستغلال
nosuidالنواة تزيل بصمت بت SUID من أي ملف مخزن على نظام الملفات هذا — bash المنسوخ لا يصبح جذرًا أبدًا
noexecلا يمكن تنفيذ ثنائي SUID على الإطلاق

الإصلاح المطبق: عند بدء التشغيل، يقرأ _find_suid_dir() ملف /proc/mounts ويختبر الأدلة المرشحة بترتيب الأفضلية حتى يجد نظام ملفات لا يحتوي على أي من العلمين. يتم بعد ذلك دمج المسار المُحل في سكربت ما بعد التثبيت للحمولة ويُستخدم للتحقق والتنفيذ.

إذا كانت جميع المرشحات محظورة يخرج البرنامج النصي برسالة خطأ واضحة بدلاً من الفشل بصمت.

التوافق

عائلة التوزيعاتأداة الحزمتم الاختبار
Debian / Ubuntudpkg-deb✓
RHEL / Fedora

مؤشرات الاختراق

تُدرج مؤشرات الاختراق من المستوى العام/البنية التحتية وصولًا إلى آثار البرنامج النصي المحددة. سيكتشف الكشف المبني على المؤشرات العامة هذه الثغرة بغض النظر عن متغير PoC المستخدم.

نظام الملفات

العمليات والتنفيذ

نشاط D-Bus

أنماط سجلات التدقيق

التفعيل مع: auditctl -a always,exit -F arch=b64 -S all -F path=/usr/bin/packagekitd
أو استخدم القواعد أدناه في /etc/audit/rules.d/:

root@kitploit:~
# كشف إنشاء ملفات SUID في جميع أدلة الإسقاط المرشحة
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/var/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/dev/shm -k suid_drop

# كشف dpkg-deb / rpmbuild بواسطة غير الجذر
-w /usr/bin/dpkg-deb -p x -k pkg_build_nonroot
-w /usr/bin/rpmbuild -p x -k pkg_build_nonroot

# كشف تنفيذ bash SUID من أي دليل إسقاط مرشح
-a always,exit -F arch=b64 -S execve -F dir=/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/var/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/dev/shm -F uid!=0 -F euid=0 -k priv_esc_drop

آثار مدير الحزم

آثار تصعيد الامتيازات


منطق الكشف

قاعدة SIEM شبه رمزية (عامة — تغطي جميع متغيرات CVE-2026-41651)

root@kitploit:~
(
  event.category == "process"
  AND process.name IN ("dpkg-deb", "rpmbuild")
  AND process.user.id != "0"
  AND NOT process.parent.name IN ("apt", "apt-get", "dpkg", "rpm", "dnf", "yum", "zypper", "mock", "koji")
)
OR
(
  event.category == "file"
  AND file.path LIKE "/tmp/%" OR file.path LIKE "/var/tmp/%" OR file.path LIKE "/dev/shm/%"
  AND file.owner == "root"
  AND (file.mode LIKE "04%")
)
OR
(
  event.category == "process"
  AND process.name == "bash"
  AND process.real_user.id != "0"
  AND process.effective_user.id == "0"
  AND NOT process.parent.name IN ("sudo", "su", "sshd", "login", "pam")
)

سلسلة سلوك EDR

root@kitploit:~
packagekitd
  └─ sh / bash  (cwd أو الوسيطة تطابق /tmp, /var/tmp, /dev/shm, أو $HOME)
       └─ install / cp / chmod  (الهدف لديه SUID + المالك root)

قم بوضع علامة على السلسلة الكاملة. أي خطوة فردية وحدها قد تكون حميدة؛ علاقة الأصل-الفرع عبر packagekitd إلى أمر يضبط SUID عالية الدقة بغض النظر عن دليل الإسقاط المحدد. وسّع القواعد القائمة على المسار لتغطية جميع المرشحات الأربعة.


الأنظمة والإصدارات المتأثرة

تحقق من الإصدار المثبت: pkcon backend-details أو packagekit --version
معرضة إذا كان الإصدار المبلغ عنه ≤ 1.3.4.


المعالجة

الأساسي: ترقية PackageKit إلى 1.3.5 أو تطبيق النقل الخلفي الخاص بالبائع.

root@kitploit:~
# Debian / Ubuntu
apt update && apt install --only-upgrade packagekit

# Fedora / RHEL
dnf upgrade packagekit

# SUSE
zypper update packagekit

التخفيفات (إذا لم يكن التصحيح ممكنًا فورًا):


المراجع


تم الإنشاء: 2026-04-24 | تم التحديث: 2026-04-25 | تقييم الفريق الأرجواني | للاستخدام الداخلي فقط

تنزيل الأداة
الحقلالقيمة
معرف CVECVE-2026-41651
CWECWE-367 — سباق التحقق من الوقت مقابل وقت الاستخدام (TOCTOU)
المكوّنPackageKit (packagekitd, خدمة D-Bus)
المتأثرPackageKit ≤ 1.3.4
تم الإصلاح فيPackageKit 1.3.5
الأثرتصعيد الامتيازات المحلي → الجذر
ناقل الهجوممحلي / D-Bus (جلسة مستخدم غير مميز)
تم الكشف2026-04-22 (فريق الاختراق الأحمر لـ Deutsche Telekom)
النشرةGHSA-f55j-vvr9-69xv
التزام الإصلاح76cfb675fb31acc3ad5595d4380bfff56d2a8697
المرحلةالإجراء
الإعداديفحص /proc/mounts لاختيار دليل إسقاط SUID/قابل للتنفيذ، ويضبط umask(022)، ويطبق chmod صريحًا على جميع مخرجات البناء، ثم يبني حزمة وهمية وحزمة حمولة في /tmp
الاستغلاليفتح اتصال D-Bus للنظام، وينشئ معاملة PackageKit، ويطلق سباق الاستدعاءين
الحمولةسكربت ما بعد التثبيت في الحزمة ينسخ /bin/bash إلى <drop_dir>/.suid_bash بالوضع 04755، المالك root. يتم تحديد دليل الإسقاط في وقت التشغيل (انظر دعم البيئات المحصّنة)
التصعيديتحقق من وجود ثنائي SUID (مهلة 90 ثانية)، ثم ينفذ execl عليه مع -p للحصول على قشرة جذر
التنظيفيزيل ملفات .deb/.rpm المؤقتة عند الخروج (نجاحًا أو فشلًا)
الأولويةالمرشحالتحصين النموذجي
1/var/tmpنادرًا ما يحمل nosuid/noexec؛ يبقى بعد إعادة التشغيل
2/dev/shmtmpfs، عادةً متساهل؛ يُمسح عند إعادة التشغيل
3/tmpغالبًا محصّن على أنظمة CIS/STIG
4$HOMEالملاذ الأخير؛ دائمًا قابل للكتابة من قبل المستخدم
rpmbuild
✓
SUSE / openSUSErpmbuild✓
IOCالمسار / النمطملاحظات
ثنائي SUID في دليل قابل للكتابة عالميًا<drop_dir>/.suid_bash — دليل الإسقاط هو /var/tmp أو /dev/shm أو /tmp أو $HOME اعتمادًا على أعلام التحميليختار البرنامج النصي أول دليل بدون nosuid/noexec؛ وسّع عمليات الكشف لتغطية جميع المرشحات الأربعة
ملف حزمة مؤقت في /tmp/tmp/*.deb, /tmp/*.rpmمبني بواسطة مستخدم غير مميز؛ عمليات الحزم المشروعة تستخدم /var/cache أو مسارات التنزيل
شجرة بناء dpkg/tmp/pkbuild_*, /tmp/build_*أدلة مؤقتة لـ dpkg-deb -b
شجرة rpmbuild في /tmp/tmp/rpmbuild_*أدلة مؤقتة لـ rpmbuild المستدعى خارج ~/rpmbuild
سكربت postinst / %post في /tmp/tmp/*/DEBIAN/postinst, /tmp/*/SPECS/*.specالسكربتات التي تنسخ أو تعدل أذونات ثنائيات النظام عالية الثقة
IOCالتفاصيل
dpkg-deb تم تشغيله بواسطة عملية غير جذر وغير aptالأصل هو عملية Python/قشرة للمستخدم، وليس apt أو dpkg أو unattended-upgrades
rpmbuild تم تشغيله بواسطة مستخدم غير مميزبدون أصل متعلق بالتعبئة (mock, koji, مشغل CI) هذا شاذ
packagekitd يشغّل /bin/sh أو /bin/bash من مسار /tmppackagekitd يشغّل سكربتات postinst؛ مسار المصدر في /tmp هو الشذوذ
عملية bash حيث UID ≠ EUIDتنفيذ SUID؛ EUID=0, UID=<المهاجم>
استدعاء bash -pالعلم -p يفعّل الوضع المميز عند تعيين SUID — نادرًا ما يُستخدم بشكل مشروع
سلسلة أصل قصيرة لعملية .suid_bashالجد هو packagekitd، الأصل هو قشرة المهاجم
IOCالتفاصيل
org.freedesktop.PackageKit.Transaction.InstallFiles يُستدعى مرتين على نفس مسار الكائنكلا الاستدعاءين يصلان خلال ميلي ثانية؛ العملاء الشرعيون يستدعون مرة واحدة لكل معاملة
FLAG_SIMULATE (4) يتبعه فورًا FLAG_NONE (0) على نفس tidلا يوجد حالة استخدام مشروعة لهذا التسلسل
نمط CreateTransaction → استدعاء مزدوج سريع لـ InstallFilesقابل للاكتشاف عبر مراقب D-Bus (dbus-monitor --system) أو قواعد تدقيق dbus
InstallFiles مع مسار ملف تحت /tmpمثبّتات الحزم الرسومية الشرعية (GNOME Software, Discover) تستخدم مسارات في $HOME أو /var/cache
IOCالتفاصيل
حزمة باسم pk-dummy-* أو pk-payload-* في سجل dpkg/rpmخاص بالبرنامج النصي لكن المتغيرات ستستخدم أسماء مختلفة
حزمة مثبتة من ملف محلي (/tmp/*.deb أو /tmp/*.rpm)dpkg -l أو rpm -qa --last — ابحث عن حزم بدون أصل مستودع
حزمة مثبتة بدون سجل تغييرات / وصف فارغالحزم المصنّعة تستخدم بيانات وصفية دنيا؛ dpkg -s <pkg> أو rpm -qi <pkg>
حزمة أُزيلت فورًا بعد التثبيت أو لا تظهر أبدًا في قاعدة بيانات الحزممحاولات الاستغلال الفاشلة قد تترك حالة جزئية
إدخالات سجل معاملات packagekit لتثبيتات الملفات المحلية/var/log/PackageKit/transactions.db أو إدخالات journald لـ packagekitd
IOCالتفاصيل
.suid_bash في أي دليل إسقاط مرشحمسار الإسقاط يُختار في وقت التشغيل من /var/tmp أو /dev/shm أو /tmp أو $HOME بناءً على أعلام التحميل — تحقق من جميع الأربعة: find /var/tmp /dev/shm /tmp $HOME -uid 0 -perm -4000 2>/dev/null
أي ملف مملوك لـ root مع بت SUID في دليل قابل للكتابة من قبل المستخدميجب أن يُرجع دائمًا فارغًا على الأنظمة النظيفة
شجرة عمليات bash مع euid=0 وبدون أصل PAM / sudo / suيشير إلى مسار تنفيذ SUID بدلاً من انتقال امتياز مشروع
منح polkit لـ org.freedesktop.packagekit.package-install لمستخدم غير مسؤولغير متوقع إذا لم يكن المستخدم في مجموعة sudo / wheel
التوزيعةPackageKit الافتراضيمعرضةالإصدار المُصحح متاح
Ubuntu 24.04 LTS1.3.xنعمعبر apt upgrade
Ubuntu 22.04 LTS1.2.xنعمالنقل الخلفي قيد التقدم
Debian 12 (Bookworm)1.2.xنعممتتبع الأمان معلق
Fedora 411.3.xنعمdnf upgrade packagekit
RHEL 9 / CentOS Stream 91.2.xنعمRHSA معلق
SUSE Linux Enterprise 151.1.xمحتملنشرة SUSE معلقة
Arch Linux1.3.xنعمAUR / pacman محدث
التخفيفالأمر / الإعدادتحذير
تعطيل خدمة PackageKitsystemctl disable --now packagekitdيكسر تحديثات GNOME Software / Discover الرسومية
تقييد الوصول إلى D-Busأضف قاعدة deny في /etc/dbus-1/system.d/org.freedesktop.PackageKit.conf للمستخدمين غير المميزينقد يكسر أدوات الحزم المشروعة الموجهة للمستخدم
تحصين polkitاضبط org.freedesktop.packagekit.package-install على auth_admin (يتطلب كلمة مرور المسؤول دائمًا)يقلل الراحة لكنه يضيّق سطح الهجوم
مراقبة التدقيقانشر قواعد التدقيق من قسم أنماط سجلات التدقيقكشف فقط، وليس وقائيًا
الموردالرابط
إفصاح OSS-Securityhttps://www.openwall.com/lists/oss-security/2026/04/22/6
نشرة أمان GitHubGHSA-f55j-vvr9-69xv
التزام الإصلاحhttps://github.com/PackageKit/PackageKit/commit/76cfb675fb31acc3ad5595d4380bfff56d2a8697
إصدار PackageKit 1.3.5https://github.com/PackageKit/PackageKit/releases/tag/v1.3.5
مرجع PoC عامhttps://github.com/CipherCloak/CVE-2026-41651
CWE-367https://cwe.mitre.org/data/definitions/367.html
توثيق polkithttps://www.freedesktop.org/software/polkit/docs/latest/