
إثبات مفهوم لـ CVE-2026-43494 (PinTheft): Linux LPE via RDS zerocopy refcount bug + io_uring fixed buffers → SUID page-cache overwrite. لأغراض البحث المصرح به فقط.
إثبات المفهوم — uid=1000(raken) → uid=0(root) بعد تشغيل ./sley على WSL2 (6.6.87.2-microsoft-standard-WSL2)
ملف واحد لإثبات المفهوم لـ CVE-2026-43494 (PinTheft): تصعيد صلاحيات محلي في نواة لينكس يجمع بين خطأ في عد المراجع في zerocopy لـ RDS والمخازن المؤقتة الثابتة لـ io_uring لاستبدال ذاكرة التخزين المؤقت للصفحات لملف ثنائي SUID-root.
إخلاء مسؤولية: هذا المستودع مخصص للبحث الأمني المصرح به والتعليم والاختبار الدفاعي فقط. تشغيله ضد أنظمة لا تملكها أو تفتقر إلى إذن صريح لاختبارها غير قانوني وغير أخلاقي. لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام.
البحث العام الأصلي وإثبات المفهوم نُشرا بواسطة فريق 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، …).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
# أو حزمة الرؤوس المكافئة على توزيعتك
# هل تم التصحيح؟ (مثال — عدّل حسب توزيعتك)
uname -r
grep -r CVE-2026-43494 /usr/share/doc/linux* 2>/dev/null || true
# هل RDS متاح؟
grep CONFIG_RDS /boot/config-$(uname -r) 2>/dev/null
lsmod | grep -E '^rds'
# هل io_uring مفعل؟
cat /proc/sys/kernel/io_uring_disabled # توقع 0
gcc -O2 -Wall -Wextra -o sley sley.c
الربط الثابت (اختياري، لصور المختبر الصغيرة):
gcc -O2 -static -o sley sley.c
./sley
جميع مخرجات الحالة تذهب إلى stderr (واجهة مستخدم بألوان ANSI 256، شريط تقدم، تسجيل مرحلي). تأكد من أن طرفيتك تدعم UTF-8 و truecolor/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، إلخ).
قد تصدر تنبيهات أمان خاصة بالتوزيعة تصحيحات خلفية — تابع قائمة أمان النواة الخاصة بموزعك.
.
├── README.md # هذا الملف
├── proof-of-concept.jpg # لقطة شاشة: LPE ناجح (uid 1000 → root)
├── sley.c # ملف واحد لإثبات المفهوم + واجهة طرفية
└── .gitignore
يتم توفير هذا البرنامج كما هو للبحث والتعليم. أنت مسؤول عن الامتثال للقوانين السارية والحصول على إذن كتابي قبل اختبار أي نظام لا تملكه.
MIT — راجع ملف الترخيص في المستودع إذا تمت إضافته. استخدم بمسؤولية.
| العنصر | التفاصيل |
|---|
| CVE | CVE-2026-43494 |
| الاسم العام | PinTheft |
| المكون | net/rds — مسار الإرسال zerocopy (rds_message_zcopy_from_user) |
| البدائية (Primitive) | استدعاء put_page() مزدوج عند فشل تثبيت الصفحة → سرقة مراجع FOLL_PIN |
| التسليح (Weaponization) | مخزن مؤقت ثابت لـ 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 غير الضرورية؛ استخدم الحاويات مع ملفات تعريف محصنة |
| المراقبة | تنبيه عند حدوث اندفاع من فشل zerocopy لـ RDS مع أنماط تسجيل المخازن المؤقتة لـ io_uring |