
# تحليل شامل لـ CVE-2026-31431، ثغرة تصعيد صلاحيات محلية (LPE) في نواة لينكس، بما في ذلك منهجية الاستغلال، وسكربتات الكشف، وقواعد YARA، وإعدادات auditd وFalco، وإرشادات المعالجة.
algif_aeadCISA KEV | CVSS 7.8 عالية | يؤثر على نوى لينكس 4.14 – أوائل 2026 (~9 سنوات)
CVE-2026-31431، الملقب بـ "Copy Fail"، هو ثغرة تصعيد امتيازات محلية (LPE) عالية الخطورة في النظام الفرعي للتشفير في نواة لينكس. يمكن لمستخدم محلي منخفض الامتيازات تصعيد صلاحياته إلى الجذر (root) في ثوانٍ على أي نظام غير مُصَحَّح.
| السمة | القيمة |
|---|---|
| CVE | CVE-2026-31431 |
| اللقب | Copy Fail |
| CVSS v3.1 | 7.8 عالية |
| ناقل الهجوم | محلي |
| الامتيازات المطلوبة | منخفضة |
| تفاعل المستخدم | لا شيء |
| المكوّن | crypto/algif_aead.c — قالب authencesn |
| تاريخ الإدخال | 2017 (الالتزام 72548b093ee3) |
| تاريخ الكشف | 2026 |
| سنوات الصمت | ~9 سنوات |
| CISA KEV | نعم |
| PoC عام | نعم (سكربت Python مستقل بحجم 732 بايت) |
detection/check_vulnerable.sh قبل وبعد المعالجة.CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
| المقياس | القيمة | الأساس المنطقي |
|--------|-------|-----------|
| ناقل الهجوم | **محلي** | يتطلب وصولاً إلى الصدفة (SSH، تنفيذ حاوية، فيزيائي) |
| تعقيد الهجوم | **منخفض** | موثوق ومؤتمت بالكامل — لا يتطلب حالة سباق |
| الامتيازات المطلوبة | **منخفضة** | أي حساب مستخدم غير مميز |
| تفاعل المستخدم | **لا شيء** | لا يتطلب تفاعل الضحية |
| السرية | **عالية** | اختراق كامل للنظام |
| النزاهة | **عالية** | اختراق كامل للنظام |
| التوفر | **عالية** | اختراق كامل للنظام |
### مشهد التهديدات
| العامل | التقييم |
|--------|-----------|
| توفر PoC | عام، مُسلّح، بايثون مستقل بحجم 732 بايت |
| موثوقية الاستغلال | عالية — يعمل عبر التوزيعات المختبرة دون تعديل |
| صعوبة الاكتشاف | عالية — لا كتابة على القرص، لا صفحات متسخة |
| مهارة المهاجم المطلوبة | منخفضة — مبتدئ مع PoC عام |
| CISA KEV | أُضيف في 2026 — مراقب بنشاط |
| Microsoft Defender | مُعلَّم كقيد تحقيق نشط |
### البيئات المتأثرة
| البيئة | الخطر |
|-------------|------|
| خوادم Linux على المعدن العاري | حرج |
| أجهزة Linux الافتراضية (سحابية أو محلية) | حرج |
| عُقد Kubernetes | حرج (يتيح أيضًا الهروب من الحاويات) |
| مضيفات Docker | حرج |
| الاستضافة المشتركة / متعددة المستأجرين | حرج |
| WSL2 / Linux على Windows | قيّم حسب إصدار النواة |
---
## 3. الغوص التقني العميق
### 3.1 الخلفية: AF_ALG وAEAD
تعرض نواة Linux العمليات التشفيرية لمساحة المستخدم عبر **مقابس AF_ALG** (`AF_ALG = 38`). تتيح هذه الواجهة (`algif_aead`) للتطبيقات غير المميزة استدعاء مسرعات التشفير الخاصة بالأجهزة في النواة دون الحاجة إلى كود في وضع النواة.
**AEAD** (التشفير المصادق عليه مع البيانات المرتبطة) مثل AES-GCM وChaCha20-Poly1305 تُستخدم على نطاق واسع في TLS وتشفير القرص وبروتوكولات VPN. القالب المعرض للخطر هو `authencesn` — تركيبة AEAD تستخدم `hmac(sha256)` + `cbc(aes)` مع دعم رقم التسلسل الموسع (ESN)، ويُستخدم عادةً في IPsec.
### 3.2 السبب الجذري
في عام 2017، أدخل الالتزام `72548b093ee3` **عملية AEAD في المكان** إلى `algif_aead` كتحسين للأداء — مما سمح لمحرك التشفير بقراءة وكتابة نفس المخزن المؤقت. كان هذا معيبًا:```
The bug chain:
1. Caller binds AF_ALG socket to:
authencesn(hmac(sha256),cbc(aes))
2. Caller sends a decryption request via sendmsg() with specific flags
3. Caller uses splice() to feed PAGE CACHE PAGES from an open file
descriptor directly into the socket's scatterlist
4. The authencesn template, during ESN header processing, uses the
OUTPUT BUFFER as scratch space — writing 4 bytes past the
expected output boundary
5. Because the scatterlist contains page cache pages (not private
copies), this scratch write lands DIRECTLY IN THE PAGE CACHE
6. Page cache is shared kernel-wide — all processes reading the
same file now see the modified bytes
Key insight: splice() is zero-copy — it hands page cache references
to the socket. The in-place "optimization" then writes INTO those
pages. No dirty bit is set because the write goes through the crypto
engine, not the normal write path.
توفر الثغرة كتابة محكومة بحجم 4 بايت في ذاكرة التخزين المؤقت للصفحات لأي ملف يمكن للمهاجم فتحه للقراءة:
| الخاصية | القيمة |
|---|---|
| حجم الكتابة | 4 بايت |
| التحكم في الإزاحة | نعم — يتحكم المهاجم بها عبر إزاحة splice |
| الهدف | ذاكرة التخزين المؤقت للصفحات لأي ملف قابل للقراءة |
| وضع علامة الصفحة المتسخة | لا شيء |
| التعديل على القرص | لا شيء |
| تحديث الطابع الزمني | لا شيء |
| إدخال سجل النواة | لا شيء (ما لم يتم تكوين auditd) |
الكتابة قابلة للتكرار — يقوم الاستغلال بتكرار الكتابة بحجم 4 بايت لترقيع تسلسلات أكواد أكبر.
[1] Open /usr/bin/su (or any setuid-root binary) for reading ↓ [2] Map a copy to find target instruction bytes (e.g., UID check, execve path, security gate) ↓ [3] Compute exact page cache offset of target bytes ↓ [4] Set up AF_ALG socket → authencesn(hmac(sha256),cbc(aes)) ↓ [5] splice() the target binary's page cache into the socket ↓ [6] Trigger decryption → authencesn scratch write patches the target bytes in page cache (4 bytes per iteration) ↓ [7] Repeat for each 4-byte patch needed ↓ [8] Execute /usr/bin/su → runs root-owned setuid binary but now with attacker-controlled code in page cache ↓ [9] Root shell
### 3.5 لماذا تفشل الدفاعات القياسية
| الدفاع | تم تجاوزه؟ | السبب |
|---------|-----------|--------|
| مراقبة تكامل الملفات (Tripwire/AIDE) | **نعم** | لا يوجد تغيير على القرص |
| فحوصات تجزئة الملفات في IDS | **نعم** | بايتات القرص لم تتغير |
| مراقبة الملفات عبر `inotify` | **نعم** | لا يوجد حدث كتابة في VFS |
| SELinux / AppArmor | **جزئي** | يتحكم في العملية، وليس في الكتابة إلى page cache عبر محرك التشفير |
| وحدات التخزين للقراءة فقط | **نعم** | يتم تعديل page cache في الذاكرة، وليس عبر وحدة التخزين |
| مراقبة `auditd` على الملف الثنائي | **نعم** | يراقب audit عمليات الكتابة في VFS — وهذا يتجاوز VFS |
### 3.6 إصدارات النواة المتأثرة
| الفرع | معرّض حتى | الإصلاح من |
|--------|-------------------|------------|
| 4.14.x | الكل (أصل الثغرة) | لا يوجد إصلاح من upstream (نهاية الدعم) |
| 5.4.x (LTS) | الكل | مطلوب backport من التوزيعة |
| 5.10.x (LTS) | الكل | مطلوب backport من التوزيعة |
| 5.15.x (LTS) | الكل | مطلوب backport من التوزيعة |
| 6.1.x (LTS) | ≤ 6.1.129 | **6.1.130+** |
| 6.6.x (LTS) | ≤ 6.6.86 | **6.6.87+** |
| 6.12.x (LTS) | ≤ 6.12.22 | **6.12.23+** |
| 6.15-rc | تم إصلاحه في rc | **6.15-rc+** |
> قد تكون نواة التوزيعات قد طبّقت الإصلاح بأرقام إصدارات مختلفة. تحقق دائمًا من النشرة الأمنية لتوزيعتك.
---
## 4. منهجية الهجوم — الفريق الأحمر
> **التفويض مطلوب.** هذا القسم موجود لمساعدة المدافعين على فهم منظور المهاجم. نفّذ فقط على أنظمة تملكها أو لديك تفويض كتابي صريح لاختبارها.
### 4.1 المتطلبات الأساسية