
إثبات المفهوم لـ CVE-2026-43494 (PinTheft): تصعيد امتيازات محلي في نواة لينكس يستغل خللًا في عدد المراجع لخاصية zerocopy في RDS مع مخازن io_uring الثابتة لاستبدال ذاكرة التخزين المؤقت لصفحات ثنائي SUID.
إثبات المفهوم — uid=1000(raken) → uid=0(root) بعد ./sley على WSL2 (6.6.87.2-microsoft-standard-WSL2)
إثبات مفهوم بملف واحد لـ CVE-2026-43494 (PinTheft): تصعيد صلاحيات محلي في نواة لينكس يجمع بين خطأ في عدد مراجع RDS zerocopy والمخازن المؤقتة الثابتة في io_uring لاستبدال ذاكرة التخزين المؤقت للصفحات لثنائي SUID-جذر.
إخلاء مسؤولية: هذا المستودع مخصص للبحث الأمني المصرح به والتعليم والاختبار الدفاعي فقط. تشغيل هذا ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها أمر غير قانوني وغير أخلاقي. لا يتحمل المؤلفون أي مسؤولية عن إساءة الاستخدام.
نُشر البحث العام الأصلي وإثبات المفهوم بواسطة فريق V12 Security (Aaron Esau). SLEY هو إعادة تنفيذ مستقلة ومدمجة مع واجهة طرفية منسّقة للاستخدام في المختبر والتعلم.
flowchart LR
A[mmap anonymous page] --> B[io_uring: register fixed buffer]
B --> C[Clone buffer table to 2nd ring]
C --> D[1024× failing RDS zerocopy sends]
D --> E[Drain FOLL_PIN bias / steal refs]
E --> F[munmap → page freed]
F --> G[SUID binary page reclaimed in page cache]
G --> H[Stale io_uring ptr writes ELF stub]
H --> I[exec SUID → root shell]su, mount, passwd, …).FOLL_PIN bias ≈ 1024).execve للثنائي SUID يشغّل الكتلة المحقونة بصلاحيات الجذر.CONFIG_RDS=y وCONFIG_RDS_TCP=yCONFIG_IO_URING=y وkernel.io_uring_disabled = 0rds / rds_tcp محمّلة (أو قابلة للتحميل التلقائي من قبل مستخدمين غير مميزين)IORING_REGISTER_CLONE_BUFFERS المستخدمة في سلسلة الاستغلال العامةsudo apt install build-essential linux-libc-dev # Debian/Ubuntu
# or equivalent headers package on your distro
# Patched? (example — adjust for your distro)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# RDS available?
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# io_uring enabled?
cat /proc/sys/kernel/io_uring_disabled # expect 0
gcc -O2 -Wall -Wextra -o sley sley.c
الربط الثابت (اختياري، للصور المختبرية المصغّرة):
gcc -O2 -static -o sley sley.c
./sley
كل مخرجات الحالة تذهب إلى stderr (واجهة ANSI بألوان 256، شريط تقدم، تسجيل مرحلي). تأكد من أن طرفيتك تدعم UTF-8 والألوان الحقيقية/256 لونًا لواجهة رسم الصناديق.
مراحل مثال:
PHASE 1 │ Reconnaissance
PHASE 2 │ Memory & io_uring setup
PHASE 3 │ Pin reference theft (RDS zerocopy)
PHASE 4 │ Page cache overwrite & privesc
على إعداد تم استغلاله بنجاح، تكتمل السلسلة وتُسلَّم إلى ثنائي SUID المكتشف مع صفحة أولى مستبدلة — مما يمنح شل جذر إذا توافقت حالة السباق والنواة.
على النوى المُصحّحة، أو المضيفات المحصّنة، أو عند غياب RDS/io_uring، سيفشل إثبات المفهوم مبكرًا (لا يوجد هدف SUID، أخطاء mmap/io_uring/socket، إلخ).
قد تصدر النشرات الأمنية الخاصة بالتوزيعات تصحيحات backported — تابع قائمة انتظار أمان نواة موردك.
.
├── README.md # This file
├── proof-of-concept.jpg # Screenshot: successful LPE (uid 1000 → root)
├── sley.c # Single-file PoC + terminal UI
└── .gitignore
هذا البرنامج مقدَّم كما هو لأغراض البحث والتعليم. أنت مسؤول عن الامتثال للقوانين المعمول بها والحصول على تفويض كتابي قبل اختبار أي نظام لا تملكه.
MIT — راجع ملف الترخيص في المستودع إذا أُضيف. استخدم بمسؤولية.
| البند | التفاصيل |
|---|
| CVE | CVE-2026-43494 |
| الاسم العام | PinTheft |
| المكوّن | net/rds — مسار إرسال zerocopy (rds_message_zcopy_from_user) |
| البدائية | استدعاء مزدوج لـ put_page() عند فشل تثبيت الصفحة → سرقة مراجع FOLL_PIN |
| التسليح | مخزن ثابت في io_uring + فشل zerocopy في RDS → كتابة use-after-free في ذاكرة التخزين المؤقت للصفحات |
| الأثر | صلاحيات جذر محلية على الإعدادات القابلة للاستغلال |
| الإصلاح في المنبع | e17492979319 |
| الإجراء | ملاحظات |
|---|
| تصحيح النواة | طبّق الإصلاح المستقر الذي يتضمن الالتزام e17492979319 |
| تعطيل RDS | modprobe -r rds_tcp rds (واحظر التحميل التلقائي) إذا لم تكن مطلوبة |
| تقييد io_uring | kernel.io_uring_disabled=1 أو 2 عبر sysctl |
| أقل الصلاحيات | أزل ثنائيات SUID غير الضرورية؛ استخدم حاويات بملفات تعريف محصّنة |
| المراقبة | نبّه على انفجارات إخفاقات RDS zerocopy + أنماط تسجيل مخازن io_uring |