
مدقق Bash للقراءة فقط لثغرة Linux kernel Copy Fail (CVE-2026-31431)
نص برمجي Bash صغير وخفيف الاعتماديات يخبرك ما إذا كان نظام لينكس لديك معرضًا لثغرة تصعيد الامتيازات المحلية Copy Fail (CVE-2026-31431).
النص البرمجي للقراءة فقط: لا يستغل الثغرة أبدًا، ولا يُحمل وحدات النواة، ولا يُعدل النظام.
Copy Fail هو خطأ منطقي في قالب التشفير AEAD authencesn الخاص بنواة لينكس، يمكن الوصول إليه من مساحة المستخدم عبر واجهة المقبس AF_ALG (algif_aead).
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-31431 |
| تاريخ الكشف | 2026-04-29 |
| CVSS v3.1 | 7.8 (عالي) |
| الفئة | تصعيد الامتيازات المحلية |
| المكون المتأثر | crypto/authencesn + crypto/algif_aead |
| تم تقديمه في | 2017 (تحسين AEAD في المكان في algif_aead.c) |
| الإصلاح الرئيسي | الالتزام a664bf3d603d، دُمج 2026-04-01 |
يمكن لمستخدم محلي غير مميز تشغيل كتابة محكومة ومحددة بحجم 4 بايت في ذاكرة التخزين المؤقت للصفحات لأي ملف يمكنه قراءته. يستخدم برنامج إثبات المفهوم العام (732 بايت من بايثون) هذه الأولية لاستبدال ثنائي setuid والحصول على صلاحيات الجذر في كل توزيعة رئيسية تقريبًا تم إصدارها منذ 2017.
كل توزيعة لينكس تُصدر نواة مبنية منذ 2017 مع تمكين algif_aead. العائلات المؤكدة المتأثرة تشمل:
# Download the script
curl -fsSLO https://raw.githubusercontent.com/samanzamani/copy-fail-checker/main/check-copy-fail.sh
# Make it executable
chmod +x check-copy-fail.sh
# Run it
./check-copy-fail.sh
أو استنساخ المستودع:
git clone https://github.com/samanzamani/copy-fail-checker.git
cd copy-fail-checker
./check-copy-fail.sh
النص البرمجي لا يتطلب صلاحيات root. تشغيله كمستخدم عادي يعطي نظرة واقعية لسطح الهجوم، لأن هذا هو بالضبط السياق الذي سيكون لدى المهاجم.
يشغل النص البرمجي ثلاثة فحوصات مستقلة ويجمعها في حكم واحد.
يقرأ /etc/os-release و uname -r، ثم يقارن النواة الجاري تشغيلها بالإصدار الرسمي المُصلح الذي نشره فريق الأمان لتوزيعتك. جدول الإصدارات يغطي حاليًا:
إذا لم تكن توزيعتك في الجدول، يعود النص البرمجي إلى الفحوصات التشغيلية أدناه.
algif_aeadيفحص النص البرمجي أربعة أشياء دون تعديل أي شيء:
lsmod)modinfo)/etc/modprobe.d أو /usr/lib/modprobe.d أو /run/modprobe.d/boot/config-<uname> أو /proc/config.gzوحدة مدرجة في القائمة السوداء وغير محملة وغير مدمجة تغلق سطح الهجوم حتى على نواة غير مُصلحة.
AF_ALGالإشارة الأكثر موثوقية هي ما سيراه المهاجم فعليًا. يستخدم النص البرمجي مسبار بايثون صغير (socket.socket(AF_ALG, SOCK_SEQPACKET, 0) يتبعه bind() إلى قالب AEAD authencesn(hmac(sha256),cbc(aes))) لمعرفة ما إذا كان يمكن إنشاء وربط مقابس AF_ALG من سياق غير مميز. يقوم المسبار بإنشاء المقبس وربطه وإغلاقه فورًا دون ترك أي شيء قابل للاستغلال.
إذا لم يكن python3 مثبتًا، يتم تخطي المسبار ويعتمد الحكم على الفحصين 1 و 2.
لخطوط الأنابيب أو إدارة التهيئة أو مسح الأسطول، استخدم --json:
./check-copy-fail.sh --json
مثال على المخرجات:
{
"verdict": "vulnerable",
"distro_id": "ubuntu",
"distro_version_id": "24.04",
"kernel": "6.8.0-31-generic",
"patched_version": "",
"kernel_status": "unknown",
"module_loaded": 0,
"module_builtin": 0,
"module_available": 1,
"module_blacklisted": 0,
"af_alg_status": "reachable"
}
هذا هو الإصلاح الكامل الوحيد. بعد التحديث، أعد التشغيل لتشغيل النواة الجديدة فعليًا.
# Debian / Ubuntu
sudo apt update && sudo apt full-upgrade && sudo reboot
# RHEL / AlmaLinux / Rocky / CentOS Stream
sudo dnf clean metadata && sudo dnf upgrade && sudo reboot
# openSUSE / SLES
sudo zypper refresh && sudo zypper update && sudo reboot
# Amazon Linux 2023
sudo dnf upgrade --releasever=latest && sudo reboot
algif_aeadإذا لم تتمكن من إعادة التشغيل إلى نواة مُصلحة الآن، أضف الوحدة الضعيفة إلى القائمة السوداء. هذا يعطل أي تطبيق يستخدم بشكل مشروع تشفيرات AF_ALG AEAD (نادر على معظم الخوادم — تحقق في بيئة اختبار أولاً).
# Persist the blacklist across reboots
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf
# Unload it from the running kernel right now
sudo rmmod algif_aead 2>/dev/null || true
إذا كانت الوحدة مدمجة، فلن تعمل القائمة السوداء ولكن يمكن تعطيل استدعاء التهيئة. إعادة التشغيل ضرورية.
sudo grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
sudo reboot
للأعباء العملية المحوسبة، احظر أيضًا عائلة مقابس AF_ALG من ملف تعريف seccomp الخاص بك حتى لا تتمكن حاوية مخترقة من الوصول إلى سطح النواة.
== System information ==
[INFO] Distribution : Ubuntu 24.04.2 LTS (ubuntu 24.04)
[INFO] Kernel : 6.8.0-31-generic
== Check 1 / 3 — Kernel version ==
[WARN] No vendor-fixed kernel version is recorded for ubuntu 24.04.
[WARN] Falling back to runtime mitigation checks below.
== Check 2 / 3 — algif_aead kernel module ==
[WARN] algif_aead is not loaded but can be autoloaded on demand (no blacklist found).
== Check 3 / 3 — AF_ALG socket reachability ==
[VULN] AF_ALG sockets are reachable from this unprivileged context.
== Verdict ==
[VULN] This system appears to be VULNERABLE to CVE-2026-31431.
[VULN] Apply the vendor kernel update or blacklist algif_aead as a temporary mitigation.
uname -r. إذا كنت تشغل نواة خارج الشجرة أو معاد بناؤها، قد لا تعكس مقارنة الإصدار ما إذا كان الإصلاح قد تم نقله فعليًا.blocked_permission لـ AF_ALG ببساطة لأن seccomp نشط — نواة المضيف نفسها قد تظل ضعيفة.MIT — استخدم وعدّل ووزع بحرية. لا ضمان.
| التوزيعة | النواة المُصلحة (≥) |
|---|
| AlmaLinux / RHEL / Rocky / CentOS 8 | 4.18.0-553.121.1.el8_10 |
| AlmaLinux / RHEL / Rocky / CentOS 9 | 5.14.0-611.49.2.el9_7 |
| AlmaLinux / RHEL / Rocky / CentOS 10 | 6.12.0-124.52.2.el10_1 |
| أوبونتو 26.04+ ("Resolute") | غير متأثر |
| أوبونتو 18.04 – 25.10 | دورية، راجع apt |
| ديبيان (جميع الإصدارات) | دورية، راجع DSA |
| الحكم | رمز الخروج | المعنى |
|---|
patched | 0 | النواة الجاري تشغيلها في الإصدار المُصلح من المُوّرد أو أحدث. |
mitigated | 0 | مقبس AF_ALG محظور والوحدة غير محملة. |
likely_mitigated | 0 | الوحدة في القائمة السوداء وغير محملة؛ لم يكن المسبار المباشر ممكنًا. |
vulnerable | 1 | النواة غير مُصلحة و algif_aead / AF_ALG في متناول اليد. |
unknown | 2 | إشارة غير كافية لتحديد. عالجها كاحتمالية الثغرة. |
not_applicable | 3 | لا يعمل على لينكس. |