
C exploit لـ CVE-2026-31431 (فشل النسخ) يستهدف ثغرة splice في AF_ALG لنظام Linux. يتضمن اختبار كشف وتصعيد الامتيازات عبر التلاعب بذاكرة التخزين المؤقت للصفحات في /usr/bin/su للحصول على shell الجذر.
CVE-2026-31431 (Copy Fail) PoC بلغة C، منطق متوافق مع theori-io/copy-fail-CVE-2026-31431 النسخة الأصلية لـ Python exploit.
للاستخدام فقط في بيئات الأبحاث الأمنية والتجارب المصرح بها. ممنوع الاستخدام على الأنظمة غير المصرح بها.
في Linux، مسار authencesn(hmac(sha256),cbc(aes)) ضمن AF_ALG عبر splice + AEAD يمكنه كتابة 4 بايتات من AAD إلى ذاكرة التخزين المؤقت للصفحات للملف الهدف (محتوى القرص لا يتغير).
سلوك exploit في هذا المستودع مطابق للإصدار الأصلي:
/usr/bin/susu، حيث يتم تحميل su المزيف من ذاكرة التخزين المؤقت للصفحات المعدلة، وعادةً ما يتم الحصول على root shell بدون كلمة مرورcopy-fail/
├── include/
│ ├── copy_fail.h
│ └── su_payload_zlib.h
├── src/
│ ├── alg.c # AF_ALG / splice 原语
│ ├── util.c # 前置检查
│ ├── test_main.c # 漏洞检测
│ └── exploit_main.c # 提权
├── Makefile
└── README.md
Ubuntu / Debian:
sudo apt install build-essential zlib1g-dev
cd copy-fail
make
يُنتج:
| المنتج | الوصف |
|---|---|
bin/copy-fail-test | كشف الثغرات (ملف sentinel مؤقت، لا يعدل ملفات النظام) |
bin/copy-fail-exploit | رفع الامتيازات (يعدل ذاكرة التخزين المؤقت للصفحات لـ /usr/bin/su ثم ينفذ exec su) |
بعد التجميع على نظام بإصدار عالٍ، إذا ظهر GLIBC_2.34 / GLIBC_2.38 not found، قم بتنفيذ الأمر التالي على جهاز التجميع:
make static
انسخ bin/copy-fail-test و bin/copy-fail-exploit إلى الجهاز الهدف وشغّلهما. يمكنك أيضًا تشغيل make على الجهاز الهدف باستخدام الكود المصدري (رابط ديناميكي، حجم أصغر).
./bin/copy-fail-test
echo $?
| رمز الخروج | المعنى |
|---|---|
| 0 | لم تظهر خصائص الثغرة / الشروط المسبقة غير مستوفاة |
| 2 | توجد خصائص الثغرة |
| 1 | حدث خطأ أثناء عملية الاختبار |
./bin/copy-fail-exploit
id
عدم وجود مخرجات هو التصميم الطبيعي؛ عند النجاح يتم الدخول إلى root shell. عند الفشل echo $? يكون عادة 1.
AF_ALGauthencesn(hmac(sha256),cbc(aes)) باستخدام bind/usr/bin/susplice الكتابة إلى socket من نوع AF_ALGإذا أظهر الكاشف cannot be instantiated (No such file or directory):
grep -r algif_aead /etc/modprobe.d/
sudo modprobe algif_aead
grep authencesn /proc/crypto
بعض التوزيعات تعطل algif_aead عبر modprobe (مثل تخفيف Ubuntu USN)، يجب إلغاء التعطيل على جهاز اختبار بصلاحيات root قبل إعادة الاختبار.
بعد اختبار رفع الامتيازات (داخل root shell) يمكن التخلص من تلوث ذاكرة التخزين المؤقت للصفحات:
echo 3 > /proc/sys/vm/drop_caches
أو إعادة تشغيل الجهاز الظاهري.