
استغلال لثغرة CVE-2026-31431، وهي ثغرة أمنية في نواة لينكس (authencesn) تتيح تصعيد الامتيازات محليًا إلى صلاحيات الجذر عبر التلاعب بذاكرة التخزين المؤقت للصفحات.
"Copy Fail" هي ثغرة منطقية حرجة في قالب التشفير authencesn في نواة لينكس. تسمح لمستخدم محلي غير مميز بتفعيل كتابة حتمية ومضبوطة بحجم 4 بايت في ذاكرة التخزين المؤقت للصفحات لأي ملف قابل للقراءة على النظام. من خلال استهداف ثنائيات setuid (مثل /usr/bin/su)، يمكن للمهاجم تعديل ذاكرة التخزين المؤقت للتنفيذ في الذاكرة لتصعيد الامتيازات إلى الجذر (UID 0).
على عكس الثغرات الأقدم مثل "Dirty Cow" أو "Dirty Pipe"، فإن Copy Fail هي خلل منطقي مستقيم يحدث دون حالات سباق أو إعادة محاولة أو نوافذ توقيت عرضة للانهيار. إنها عالية القابلية للنقل والخفاء، حيث تعدل فقط ذاكرة التخزين المؤقت للصفحات في الذاكرة مع ترك الملف على القرص دون أي تغيير، متجاوزةً أدوات مراقبة سلامة الملفات القياسية.
توجد الثغرة عند تقاطع ثلاثة مكونات نواة متميزة:
splice(): ينقل استدعاء النظام splice() البيانات بين واصفات الملفات والأنابيب دون نسخ، مررًا صفحات ذاكرة التخزين المؤقت بالمرجع. عندما يقوم المستخدم بتقسيم ملف (مثل /usr/bin/su) إلى مقبس AF_ALG، تحتفظ قائمة التشتت المدخلة للمقبس بمراجع مباشرة لصفحات النواة المخزنة مؤقتًا لهذا الملف.authencesn: تتطلب خوارزمية authencesn (المستخدمة لأرقام التسلسل الموسعة لـ IPsec) إعادة ترتيب البايتات. للقيام بذلك، تكتب مؤقتًا 4 بايتات من أرقام التسلسل في المخزن المؤقت للإخراج كـ"مساحة خدش". ومع ذلك، فإنها تكتب بعد حدود الإخراج المشروعة.بسبب تحسين 2017 في المكان، تحتوي قائمة التشتت للإخراج على صفحات ذاكرة التخزين المؤقت للقراءة فقط التي مررها splice(). عندما يكتب authencesn بعد حدود الإخراج، فإنه يستبدل مباشرة 4 بايتات داخل ذاكرة النواة المخزنة مؤقتًا للملف المستهدف.
يمكن للمهاجم استغلال ذلك باتباع الخطوات التالية:
AF_ALG غير مميز والربط بـ authencesn(hmac(sha256),cbc(aes)).sendmsg() مصمم بحمولة بيانات مصادقة مرتبطة (AAD) تحتوي على الـ 4 بايتات التي يرغب المهاجم في كتابتها.splice() لنقل الملف المستهدف (/usr/bin/su) إلى المقبس. يحدد الإزاحة والطول بالضبط أين ستُكتب الـ 4 بايتات في ذاكرة التخزين المؤقت للصفحات.recv() يفعّل عملية فك التشفير، منفذًا الكتابة الخدشية خارج الحدود مباشرة في ذاكرة التخزين المؤقت للصفحات للملف المستهدف.execve("/usr/bin/su")). تنفذ النواة نسخة ذاكرة التخزين المؤقت المعدلة التي تحتوي على كود القشرة الخبيث المحقون، مما يمنح وصول الجذر.إذا لم يكن تصحيح النواة أو إعادة تشغيلها ممكنًا فورًا، يمكنك تخفيف هذه الثغرة عن طريق حظر جميع وحدات af_alg ذات الصلة وإلغاء تحميلها من الذاكرة.
لحظر هذه الوحدات، نفذ الأوامر التالية:
# 1. إلغاء تحميل الوحدات من الذاكرة إذا كانت محملة حاليًا
sudo modprobe -r algif_hash algif_skcipher algif_aead algif_rng af_alg
# 2. إضافة الوحدات إلى قائمة الحظر
echo -e "blacklist af_alg\nblacklist algif_hash\nblacklist algif_skcipher\nblacklist algif_aead\nblacklist algif_rng" | sudo tee /etc/modprobe.d/stop-exploit.conf
# 3. منع تحميل وحدة af_alg تمامًا
echo "install af_alg /bin/true" | sudo tee -a /etc/modprobe.d/stop-exploit.conf
# 4. إعادة تشغيل النظام لضمان سريان التغييرات بالكامل
sudo reboot
قام فريق أمان نواة لينكس بتصحيح هذه الثغرة (الالتزام: a664bf3d603d). يعيد التصحيح عمليات AEAD الخاصة بـ AF_ALG إلى نموذج خارج المكان، مفصلًا قوائم التشتت للمصدر والوجهة. يمنع هذا تعرض صفحات ذاكرة التخزين المؤقت لقائمة التشتت القابلة للكتابة للوجهة.
الإجراء المطلوب: قم بتحديث نواة توزيعتك إلى أحدث إصدار يوفره البائع (Ubuntu، Amazon Linux، RHEL، SUSE، إلخ) وأعد تشغيل نظامك.