
# Ansible playbooks لتدقيق وتخفيف CVE-2026-31431 ("Copy Fail")، ثغرة تصعيد الامتيازات المحلية في وحدة `algif_aead` بنواة Linux والتي تؤثر على جميع التوزيعات الرئيسية منذ عام 2017.
تصعيد صلاحيات / تلف ذاكرة في نواة لينكس
algif_aead
أدوار Ansible للتدقيق والتخفيف — جاهزة للتشغيل في بيئة الإنتاج
Copy Fail (CVE-2026-31431) هي ثغرة أمنية في وحدة algif_aead بنواة لينكس —
وهي الواجهة الموجهة للمستخدمين لعائلة مآخذ AF_ALG الخاصة بالتشفير.
يسمح خلل في مسار copy_*user داخل معالج طلبات AEAD في النواة
لمستخدم محلي غير مميز بإتلاف ذاكرة النواة أو تصعيد صلاحياته
عبر إنشاء طلب مأخذ مشوّه.
| الحقل | التفاصيل |
|---|
| معرف CVE | CVE-2026-31431 |
| الاسم المستعار | Copy Fail |
| المكوّن | نواة لينكس — algif_aead (net/socket.c, crypto/algif_aead.c) |
| ناقل الهجوم | محلي |
| الصلاحيات المطلوبة | منخفضة (مستخدم غير مميز) |
| الأثر | تلف ذاكرة النواة / تصعيد صلاحيات محلي |
| تم التصحيح | تصحيح النواة قيد التطوير — راجع مورّد توزيعتك |
| التوزيعة | الإصدارات المتأثرة | الحالة |
|---|---|---|
| Ubuntu 22.04 / 24.04 | النوى الأقدم من الإصدار المُصحَّح | التصحيح قيد الانتظار — راجع Ubuntu USN |
| Debian 12 (Bookworm) | النوى الأقدم من الإصدار المُصحَّح | التصحيح قيد الانتظار |
| RHEL / AlmaLinux / Rocky 8 & 9 | النوى الأقدم من الإصدار المُصحَّح | التصحيح قيد الانتظار |
| Amazon Linux 2 / 2023 | النوى الأقدم من الإصدار المُصحَّح | التصحيح قيد الانتظار |
| النواة العامة | algif_aead مُضمّنة أو تُحمَّل تلقائيًا | معرّضة للخطر إذا كانت الوحدة موجودة |
النظام ليس في خطر فوري إذا لم تكن
algif_aeadمحمّلة ولم تكن هناك أدوات على مستوى المستخدم تحمّلها عند الطلب (راجع خطوة التدقيق 1).
| المكوّن الفرعي | متأثر بهذا CVE؟ | متأثر بالتخفيف؟ |
|---|---|---|
| dm-crypt / LUKS | لا | لا |
| kTLS | لا | لا |
| IPsec / StrongSwan | لا | لا |
| OpenSSL (البناء الافتراضي) | لا | لا |
| GnuTLS / NSS | لا | لا |
| OpenSSH | لا | لا |
| محرك OpenSSL afalg | من المحتمل نعم | نعم — راجع قبل التطبيق |
أدوات kcapi-enc / kcapi-dgst | نعم | نعم |
.
├── audit_algif_aead.yml # الخطوة 1 — التدقيق: كشف التعرض لكل مضيف
├── mitigate_copyfail.yml # الخطوة 2 — التخفيف: إلغاء التحميل + القائمة السوداء للوحدة
└── README.md # هذا المستند
community.general (ansible-galaxy collection install community.general)become: true (sudo) على المضيفات المستهدفةlsof على المضيفات المستهدفة (موجود عادةً افتراضيًا)inventory.ini مستثنى من git — يبقى محليًا ولا يصل إلى المستودع أبدًا.
inventory.ini.example هو القالب المُلتزَم به الذي يبدأ منه الجميع.
# الاستنساخ والتحضير
git clone https://github.com/your-org/copy-fail-CVE-2026-31431.git
cd copy-fail-CVE-2026-31431
cp inventory.ini.example inventory.ini
# عدّل inventory.ini بمضيفاتك الفعلية، ثم شغّل:
ansible-playbook -i inventory.ini audit_algif_aead.yml
المسارات التالية مستثناة من git لمنع تسريب بيانات البنية التحتية:
| المسار المستثنى من git | السبب |
|---|---|
inventory.ini | أسماء المضيفات / عناوين IP الفعلية |
inventories/ | أي دليل جرد محلي |
copyfail_reports/ | مخرجات التدقيق تحتوي إصدارات النواة وقوائم العمليات |
.vault_pass | ملف كلمة مرور Ansible Vault |
*.retry | ملفات إعادة المحاولة الخاصة بـ Ansible |
شغّل دليل التدقيق قبل لمس أي شيء. يجمع أدلة لكل مضيف ويكتب تقريرًا محليًا وعلى كل مضيف مستهدف.
ansible-playbook -i inventory.ini audit_algif_aead.yml
تُجلب التقارير إلى ./copyfail_reports/<hostname>_audit.txt.
| الفحص | الأمر | الحكم |
|---|---|---|
| إصدار النواة | uname -r | معلوماتي |
| هل الوحدة محمّلة؟ | lsmod | grep algif_aead | محمّلة = خطر تعرض |
| مآخذ AF_ALG النشطة | lsof | grep AF_ALG | وجود مستخدمين = يجب المراجعة |
| محرك OpenSSL afalg | openssl engine | grep afalg | نشط = راجع الأثر |
| وجود أدوات kcapi | which kcapi-* | موجودة = مستخدمون محتملون |
| هل التخفيف مطبّق بالفعل | stat /etc/modprobe.d/disable-algif.conf | موجود = تم التخفيف بالفعل |
| الحالة | الإجراء الموصى به |
|---|---|
| الوحدة غير محمّلة | خطر فوري منخفض — راقب تصحيح النواة |
| الوحدة محمّلة، لا مستخدمين لمآخذ AF_ALG | آمن لتطبيق التخفيف |
| الوحدة محمّلة ومعها مستخدمون نشطون لـ AF_ALG | راجع العمليات قبل تطبيق التخفيف |
| ملف التخفيف موجود بالفعل | تم تطبيق التخفيف سابقًا — تحقق |
شغّل التدقيق أولاً. دليل التخفيف آمن للتشغيل بشكل متكرر لكن التدقيق يمنحك سلسلة الأدلة.
ansible-playbook -i inventory.ini mitigate_copyfail.yml
ansible-playbook -i inventory.ini mitigate_copyfail.yml \
-e '{"skip_hosts": ["db-prod-01", "hsm-node-02"]}'
/etc/modprobe.d/disable-algif.conf مع install algif_aead /bin/falsealgif_aead من النواة قيد التشغيل (لا حاجة لإعادة تشغيل للحماية الأولية)update-initramfs على Debian/Ubuntu، dracut --force على RHEL)/var/backup/copyfail_mitigation/mitigation.logلا حاجة لإعادة تشغيل لإزالة الوحدة من الذاكرة.
لا تزال إعادة التشغيل موصى بها لتأكيد سريان القائمة السوداء ولإنشاء حالة نظيفة بعد التخفيف.
بعد اكتمال الدليل، تحقق على أي مضيف مستهدف:
# يجب ألا تظهر الوحدة
lsmod | grep algif_aead
# يجب أن يوجد ملف القائمة السوداء ويحتوي سطر التثبيت
cat /etc/modprobe.d/disable-algif.conf
# يجب رفض التحميل اليدوي
sudo modprobe algif_aead # المتوقع: FATAL: Module algif_aead not found or refused
بمجرد أن يصدر مورّدك نواة مُصحَّحة وتطبّقها:
# على كل مضيف — أزل القائمة السوداء
sudo rm /etc/modprobe.d/disable-algif.conf
# أعد بناء initramfs
sudo update-initramfs -u # Debian / Ubuntu
sudo dracut --force # RHEL / CentOS / Amazon Linux
# أعد التشغيل على النواة المُصحَّحة
sudo reboot
صدر بموجب رخصة MIT.
استخدمه على مسؤوليتك الخاصة. تحقق دائمًا في بيئة تجريبية قبل
التطبيق على أنظمة الإنتاج.
يُصان بواسطة المجتمع. نرحب بالطلبات والمساهمات وتقارير المشكلات.