
# تنفيذ بايثون لأداة copyfail (CVE-2026-31431)
نسخة Python من badsectorlabs/copyfail-go (CVE-2026-31431). لنظام Linux فقط؛ يتطلب Python 3.10+ (os.splice).
لا تستخدم هذه الأداة خدعة page-cache لملف /etc/passwd.
su ذي setuid مع شيلكود مضمّن (نفس الحمولات الموجودة في main.go بلغة Go)، ثم تنفّذ su.su كبرنامج setuid root، وليس من جعل getpwnam() يعتقد أن UID الخاص بك هو 0 عبر /etc/passwd.قد تقوم نماذج PoC أخرى بلغة Python لنفس الثغرة بتعديل /etc/passwd في page cache ثم توجيهك لتشغيل su <user>. هذا ملف مستهدف مختلف وخطوة تالية مختلفة عن هذا السكربت.
للاستخدام المصرّح به فقط — استخدمه فقط على الأجهزة التي تملكها أو التي لديك إذن صريح لاختبارها.
chmod +x copyfail_su.py
# تدفق بأسلوب تفاعلي (نفس فكرة copyfail-go بدون --exec)
./copyfail_su.py --backup /tmp/su.bak
# تشغيل برنامج آخر بصلاحيات مرتفعة (يمرر المسار كوسيط argv إلى su؛ يستخدم حمولة exec-argv1)
./copyfail_su.py --backup /tmp/su.bak --exec /full/path/to/binary
بعد تشغيل ناجح، استعد su الحقيقي.
--backupيعمل هذا الـ PoC على إتلاف page cache لملف /usr/bin/su. لا تفترض أن الملف الموجود على القرص لا يزال موثوقًا حتى تتحقق منه أو تعيد تثبيته.
أعد تثبيت الحزمة التي تملك /usr/bin/su (ابحث عنها أولاً، ثم أعد التثبيت):
rpm -qf /usr/bin/su ثم sudo dnf reinstall shadow-utils (استخدم اسم الحزمة المُبلَّغ عنه).dpkg -S /usr/bin/su ثم sudo apt install --reinstall <package>.تحقق: sudo rpm -V <package> للكشف عن تغييرات غير متوقعة في /usr/bin/su، أو debsums على أنظمة Debian.
اختياري: أعد التشغيل بعد إعادة التثبيت لتجنب افتراضات cache قديمة.
إذا لم تستطع إعادة التثبيت كجذر: استخدم وضع الاسترداد، أو USB حي، أو استبدل /usr/bin/su من صورة معروفة سليمة لنفس التوزيعة/الإصدار/البنية؛ وتأكد من الملكية root:root والوضع 4755 ().
-rwsr-xr-x