
ماسح شل لثغرة CVE-2026-31431 «Copy Fail» — تصعيد امتيازات محلي عبر إتلاف ذاكرة التخزين المؤقت للصفحات في نواة لينكس (algif_aead/AF_ALG). يتحقق من إصدار النواة، وحالة التصحيح، وحالة وحدة النواة، وتعرض setuid، والتدابير التخفيفية. يدعم ديبيان 11–13 وأوبونتو 20.04–25.10. جاهز للتكامل المستمر/النشر المستمر (أكواد الخروج + مخرجات JSON).
ماسح ضوئي قائم على الصدفة (Shell) لثغرة CVE-2026-31431 "Copy Fail"، وهي ثغرة تصعيد صلاحيات محلية في النظام الفرعي للتشفير في نواة لينكس (algif_aead / واجهة AF_ALG). يمكن لمستخدم محلي غير مميّز كتابة 4 بايتات في ذاكرة التخزين المؤقت للصفحات لعملية ثنائية setuid (مثل /usr/bin/su) والحصول على شل بصلاحيات root — دون لمس الملف الموجود على القرص.
a664bf3d603d| التوزيعة | الإصدار | النسخة المصحّحة |
|---|---|---|
| Debian | 11 Bullseye | 5.10.251-3 |
| Debian | 12 Bookworm | 6.1.170-1 |
| Debian | 13 Trixie | 6.12.85-1 |
| Debian | Sid / Forky | 6.19.14-1 |
| Ubuntu | 20.04 LTS Focal (GA) | 5.4.0-220.240 |
| Ubuntu | 20.04 LTS Focal (HWE) | 5.15.0-135.145~20.04.1 |
| Ubuntu | 22.04 LTS Jammy (GA) | 5.15.0-135.145 |
| Ubuntu | 22.04 LTS Jammy (HWE) | 6.8.0-61.63~22.04.1 |
| Ubuntu | 24.04 LTS Noble | 6.8.0-61.63 |
| Ubuntu | 24.10 Oracular | 6.11.0-27.27 |
| Ubuntu | 25.04 Plucky | 6.14.0-15.15 |
| Ubuntu | 25.10 Questing | إصلاح من المنبع (≥ 6.15) |
| Generic | أي | فحص النطاق من المنبع (4.14 – 6.14 معرّضة للثغرة) |
يتم أيضًا اكتشاف التوزيعات المشتقة من أوبونتو المبنية على الإصدارات المذكورة أعلاه (Pop!_OS، Linux Mint، Elementary OS، إلخ) عبر ID_LIKE في /etc/os-release.
# فحص أساسي
bash cve-2026-31431-detect.sh
# بدون ألوان في المخرجات (ملفات السجلات، CI)
bash cve-2026-31431-detect.sh --no-colour
# مخرجات JSON (قابلة للقراءة آليًا، للأنابيب)
bash cve-2026-31431-detect.sh --json
# الوضع الصامت — طباعة الملخص فقط
bash cve-2026-31431-detect.sh --quiet
# دمج العلامات
bash cve-2026-31431-detect.sh --json --quiet
لا يتطلب صلاحيات root. لا توجد حزم يجب تثبيتها إلى جانب شل قياسي (bash ≥ 4.3) واختياريًا python3 لاختبار مقبس AF_ALG المباشر.
| Code | المعنى |
|---|---|
0 | لا توجد شروط ثغرة |
1 | تم العثور على شرط أو أكثر من شروط الثغرة |
2 | خطأ في السكريبت / تعذّر إكمال الفحوصات |
مصمم للاستخدام في خطوط DevSecOps — مرّر مخرجات JSON إلى نظام SIEM أو نظام التذاكر أو لوحة الامتثال لديك.
يطبع السكريبت النتائج بلغتين:
تُطبع كلتا الفقرتين على stdout بعد نتائج كل فحص.
=== Kernel Version ===
[INFO] Distro flavour : ubuntu (id=ubuntu, codename=jammy, version=22.04)
[INFO] Kernel release : 5.15.0-135-generic
[OK] Kernel version
Reason : Ubuntu jammy: kernel 5.15.0-135.145 >= patched version 5.15.0-135.145
...
✅ PROTECTED — SYSTEM IS NOT VULNERABLE
❌ VULNERABLE — IMMEDIATE ACTION REQUIRED
✗ Kernel version
✗ Patch presence
✗ algif_aead module
✗ AF_ALG socket
✗ Setuid binaries
sudo apt update && sudo apt full-upgrade && sudo reboot
# بعد إعادة التشغيل: uname -v → يجب أن يُظهر >= 6.1.170-1 (Bookworm)
sudo apt update && sudo apt full-upgrade && sudo reboot
# بعد إعادة التشغيل: cat /proc/version_signature
فعال فقط عندما يكون CONFIG_CRYPTO_USER_API_AEAD=m (مُجمَّعًا كوحدة). لا تأثير له إذا كان الخيار مُضمّنًا في النواة (=y).
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null || true
هذا لا يؤثر على SSH أو dm-crypt/LUKS أو OpenSSL أو GnuTLS أو NSS أو خوادم الويب أو تشفير القرص.
MIT
| # | الفحص | الطريقة |
|---|
| 1 | إصدار النواة | uname -r / uname -v / dpkg / /proc/version_signature |
| 2 | وجود التصحيح | رقم بناء دبيان، رقم حزمة أوبونتو، بادئة الالتزام في /proc/version |
| 3 | وحدة algif_aead | /proc/modules، قائمة الحظر modprobe.d، ملف .ko على القرص |
| 4 | مقبس AF_ALG | محاولة مباشرة socket(AF_ALG, …) عبر Python 3 |
| 5 | ملفات setuid الثنائية | ملفات setuid-root الشائعة كأهداف للكتابة |
| 6 | وسائل التخفيف | حالة AppArmor وSELinux وseccomp |
| 7 | إعداد النواة | CONFIG_CRYPTO_AUTHENC، CONFIG_CRYPTO_USER_API_AEAD |
| 8 | مساحات أسماء المستخدمين | unprivileged_userns_clone، max_user_namespaces |
| 9 | الصفحات العملاقة الشفافة | إعداد THP وتأثيره على الاستغلال |
| 10 | البيئة | اكتشاف Docker / Kubernetes / WSL، تحذير الجذر |