
نص برمجي شل لاكتشاف التعرض لثغرة CVE-2026-31431 (فشل النسخ) والإجراءات التخفيفية على أنظمة لينكس: فحص النواة، حالة الوحدة، معاملات الإقلاع، إمكانية الوصول إلى AF_ALG، وحالة تصحيح التوزيعة.
سكربتات شل لاكتشاف ثغرات نواة لينكس، والتحقق من حالة التخفيف، وتوجيه المعالجة — مصممة للعمل محليًا أو عبر مجموعات من الخوادم عبر SSH أو Ansible أو pssh.
Copy Fail هي ثغرة تصعيد صلاحيات محلية (LPE) عالية الخطورة في وحدة التشفير algif_aead بنواة لينكس. خلل منطقي أُدخل في عام 2017 يسمح لأي مستخدم محلي غير مميز بكتابة 4 بايتات مُتحكم بها في ذاكرة التخزين المؤقت للصفحات (page cache) لأي ملف قابل للقراءة — وهو ما يكفي لاستبدال ثنائي setuid والحصول على صلاحيات الجذر (root). يوجد إثبات مفهوم (PoC) مكتوب بلغة بايثون بحجم 732 بايت وهو متاح للعموم.
| CVE | CVE-2026-31431 |
| CVSS | 7.8 (عالية) |
| تاريخ الإفصاح | 29 أبريل 2026 |
| الأنظمة المتأثرة | نواة لينكس 4.13 – 6.x (2017–2026) |
| التوزيعات | Ubuntu وRHEL وSUSE وDebian وAmazon Linux ومعظم التوزيعات الأخرى |
| قابلية الاستغلال عن بُعد | لا — يتطلب وصولًا محليًا |
| التصحيح المتاح | جزئي — تحقق من نشرات توزيعتك الأمنية |
| الفحص | هل يتطلب صلاحيات الجذر؟ |
|---|---|
| إصدار النواة — هل أنت ضمن النطاق المتأثر (≥ 4.13) | لا |
وحدة algif_aead — محمّلة، موجودة على القرص، أو محظورة | لا |
معاملات الإقلاع — وجود initcall_blacklist=algif_aead_init | لا |
| إمكانية الوصول إلى مقابس AF_ALG — هل مسار الاستغلال مفتوح | لا |
| حالة SELinux | لا |
| حالة AppArmor | نعم — مخرجات جزئية فقط بدون صلاحيات الجذر |
| حالة تصحيح التوزيعة — إدراج CVE في سجل تغييرات النواة | لا |
صلاحيات الجذر غير مطلوبة لتشغيل السكربت — جميع الفحوصات باستثناء حالة AppArmor تعمل كمستخدم عادي. يُنصح بالتشغيل باستخدام
sudoللحصول على نتائج كاملة، وهو الخيار الأكثر أمانًا عند الأنابيب منcurl.
السكربت مصمم للعمل عبر جميع توزيعات لينكس الرئيسية:
| عائلة التوزيعة | فحص مدير الحزم | مسار الوحدة |
|---|---|---|
| Debian, Ubuntu | dpkg + سجل تغييرات النواة | /lib/modules/ |
| RHEL, CentOS, Amazon Linux | rpm (kernel, kernel-rt) | /lib/modules/ |
| SUSE, openSUSE | rpm (kernel-default) | /lib/modules/ |
| Arch Linux | pacman + رابط النشرة الأمنية | /usr/lib/modules/ |
| Fedora | rpm + مسار احتياطي /usr/lib/modules/ | /usr/lib/modules/ |
يتطلب
bash— يستخدم السكربت صياغة خاصة بـ bash ولن يعمل تحتshأوashأوdash. على Alpine Linux (الذي يستخدم busybox ash افتراضيًا)، ثبّت bash أولًا:apk add bash
بدون صلاحيات الجذر — معظم الفحوصات تعمل:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | bash
مع صلاحيات الجذر — نتائج كاملة بما في ذلك حالة AppArmor:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash
نصيحة: ثبّت السكربت على SHA محدد للالتزام (commit) في بيئة الإنتاج حتى لا يتغير السكربت دون علمك:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/COMMIT_SHA/check_copyfail.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh -o check_copyfail.sh
less check_copyfail.sh
bash check_copyfail.sh # بدون صلاحيات الجذر
sudo bash check_copyfail.sh # نتائج كاملة
حلقة SSH
for HOST in server1 server2 server3; do
echo "=== $HOST ==="
ssh "$HOST" "curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
done
Ansible
- name: Check Copy Fail vulnerability
hosts: all
tasks:
- name: Run check script
script: check_copyfail.sh
become: yes
SSH متوازي
pssh -h hosts.txt -i \
"curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
============================================================
Copy Fail CVE-2026-31431 – Vulnerability Check
============================================================
>>> Kernel Version
[INFO] Running kernel: 5.15.0-107-generic
[WARN] Kernel 5.15.0-107-generic is in the affected range (4.13 – 6.x).
>>> algif_aead Module Status
[WARN] algif_aead module is currently LOADED — system is exploitable.
[WARN] Module file found at: /lib/modules/5.15.0-107-generic/kernel/crypto/algif_aead.ko
[WARN] algif_aead is NOT blacklisted — it can be loaded on demand.
>>> Kernel Boot Parameter Mitigation
[WARN] initcall_blacklist=algif_aead_init is NOT set in boot parameters.
>>> AF_ALG Socket Reachability
[WARN] AF_ALG sockets are reachable by this user — exploit path is open.
>>> Mandatory Access Control (SELinux / AppArmor)
[WARN] Neither SELinux nor AppArmor tools detected — no MAC layer present.
>>> Distribution Patch Status
[WARN] Could not confirm CVE-2026-31431 is listed as fixed in running kernel's changelog.
============================================================
SUMMARY
============================================================
!! LIKELY VULNERABLE — No confirmed mitigation detected.
Recommended actions (in order of preference):
1. Apply your distro's kernel update as soon as available.
2. Add to /etc/modprobe.d/copyfail.conf:
blacklist algif_aead
install algif_aead /bin/true
Then run: sudo depmod -a && sudo update-initramfs -u
3. Add to kernel boot parameters (grub):
initcall_blacklist=algif_aead_init
4. Immediately unload the module if loaded:
sudo rmmod algif_aead
============================================================
طبّق هذه الإجراءات حسب ترتيب الأفضلية:
1. تحديث النواة (أفضل حل)
# Debian / Ubuntu
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
# RHEL / CentOS / Amazon Linux
sudo yum update kernel
# SUSE
sudo zypper update kernel-default
2. حظر الوحدة (فوري ودائم)
sudo tee /etc/modprobe.d/copyfail.conf << 'EOF'
blacklist algif_aead
install algif_aead /bin/true
EOF
sudo depmod -a
# Debian/Ubuntu
sudo update-initramfs -u
# RHEL/Fedora
sudo dracut -f
3. إلغاء تحميل الوحدة الآن (فوري، غير دائم عبر عمليات إعادة التشغيل)
sudo rmmod algif_aead
4. معامل إقلاع النواة (بديل عن الحظر)
أضف initcall_blacklist=algif_aead_init إلى إعدادات GRUB وأعد التشغيل.
MIT — استخدم بحرية، دون أي ضمان. راجع دائمًا السكربتات قبل تشغيلها بصلاحيات الجذر.