
تحليل - POC - تخفيف
لأغراض تعليمية فقط. لا تستخدم على أنظمة دون إذن صريح.
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-31431 |
| الاسم المستعار | Copy Fail |
| CVSS | 7.8 (عالية) |
| النوع | رفع الامتيازات المحلية (LPE) |
| النواة المتأثرة | 2017 – 2026 (commit 72548b093ee3 فصاعدًا) |
| الإصلاح الرئيسي | commit a664bf3d603d (تراجع عن 2017) |
| الإفصاح | 29 أبريل 2026 (Theori / Xint Code) |
Copy Fail هو خطأ منطقي حتمي (لا يتطلب ظروف تسابق) في النظام الفرعي للتشفير لنواة لينكس. يسمح لمستخدم غير مميز بكتابة 4 بايتات مسيطر عليها في ذاكرة التخزين المؤقت للصفحات لأي ملف قابل للقراءة في النظام، بما في ذلك الثنائيات setuid مثل su أو sudo.
على عكس الثغرات السابقة المماثلة:
Linux kernel — crypto/authencesn.c
└── algif_aead (مُدمة AF_ALG)
└── تحسين في المكان (commit 72548b093ee3, 2017)
└── كتابة مؤقتة لـ AEAD → تتجاوز حدود scatterlist
└── تكتب 4 بايتات في ذاكرة التخزين المؤقت لملف خارجي
التوزيعات المتأثرة: Ubuntu، Debian، RHEL، Amazon Linux، SUSE، Fedora، Arch، AlmaLinux — أي توزيعة بنواة ≥ 2017.
في 2017 تم إدخال تحسين يجعل req->src و req->dst يشيران إلى نفس قائمة التشتت المدمجة. يتسبب ذلك في ربط صفحات ذاكرة التخزين المؤقت (القادمة من splice()) مباشرة في قائمة التشتت الوجهة القابلة للكتابة.
1. فتح مقبس AF_ALG بخوارزمية authencesn
2. استخدام splice() لتغذية صفحات ذاكرة التخزين المؤقت للثنائي الهدف إلى مقبس AF_ALG (مثال: /usr/bin/sudo)
3. تنفيذ عملية فك تشفير AEAD
4. authencesn تستخدم المخزن الوجهة كمساحة عمل → تكتب seqno_hi (4 بايتات مسيطر عليها) خارج المخرجات المشروعة، متجاوزة حدود قائمة التشتت
5. تهبط الـ 4 بايتات في صفحة ذاكرة التخزين المؤقت للثنائي الهدف
6. الملف على القرص لا يتغير → فحوصات التكامل لا تكتشف شيئًا
7. الثنائي المعدل في الذاكرة ينفذ الحمولة → صلاحية الجذر
الكتابة تتجاوز مسار الكتابة VFS العادي. يبقى الملف على القرص سليمًا. أدوات مثل sha256sum، aide، tripwire، أو inotify لا تكتشف التغيير لأنها تعمل على الملف على القرص أو onode inode، وليس على ذاكرة التخزين المؤقت للصفحات في الذاكرة.
يستخدم المختبر نواة ضعيفة لإظهار تلف ذاكرة التخزين المؤقت للصفحات. في بيئات Docker، يعتمد رفع الامتيازات الكامل على تكوين المضيف (النواة المشتركة).
# Clonar el repo
cd cve-2026-31431
# Construir la imagen vulnerable
docker build -t copyfail-lab -f docker/Dockerfile.vulnerable .
# Ejecutar el lab
docker run --rm -it \
--cap-add=NET_ADMIN \
--security-opt seccomp=unconfined \
copyfail-lab bash
# Dentro del contenedor:
cd /lab
python3 exploit/poc.py
os.splice)انظر exploit/poc.py و exploit/README.md.
يثبت PoC:
انظر mitigation/README.md للحصول على تعليمات مفصلة.
الخلاصة — تخفيف فوري (بدون إعادة تشغيل):
# Deshabilitar el módulo afectado
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo modprobe -r algif_aead 2>/dev/null || true
الإصلاح النهائي: تحديث النواة إلى إصدار مُصَحَّح (بعد a664bf3d603d).
cve-2026-31431/
├── README.md ← este archivo
├── docs/
│ ├── technical-analysis.md ← análisis técnico profundo
│ └── affected-kernels.md ← tabla de versiones afectadas/parcheadas
├── exploit/
│ ├── README.md ← documentación del PoC
│ └── poc.py ← proof of concept (Python 3.10+)
├── mitigation/
│ ├── README.md ← guía de mitigación
│ ├── disable-algif.conf ← modprobe config
│ └── check-vulnerable.sh ← script de detección
├── docker/
│ ├── Dockerfile.vulnerable ← lab vulnerable
│ └── Dockerfile.patched ← lab con mitigación aplicada
└── scripts/
└── setup-lab.sh ← automatización del lab
a664bf3d603d| الثغرة | النوع | هل تتطلب سباق؟ | محمولة؟ | حجم الاستغلال |
|---|
| Dirty Cow (CVE-2016-5195) | سباق CoW | نعم | جزئية | ~KB |
| Dirty Pipe (CVE-2022-0847) | مخزن الأنبوب | لا | محدود | ~KB |
| Copy Fail (CVE-2026-31431) | منطقي | لا | كلي | 732 بايت |
| التاريخ | الحدث |
|---|
| 2017 | Commit 72548b093ee3 يُدخل الخلل في النواة |
| ~2025 | بدأ Theori/Xint Code تحليل النظام الفرعي للتشفير |
| 28 أبريل 2026 | التنسيق مع الموزعين |
| 29 أبريل 2026 | إفصاح عام + نشر PoC |
| 1 مايو 2026 | نوى مُصَحَّحة متاحة في مستودعات الإنتاج |
| 1 مايو 2026 | تمت إضافته إلى كتالوج CISA KEV |