Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
copy_fail — # PoC لاستغلال ثغرة في نواة لينكس مكتوب بلغة Rust لـ CVE-2026-31431 (كتابة ذاكرة التخزين المؤقت للصفحات في AF_ALG) بالإضافة إلى دفاع وقت التشغيل عبر eBPF يمنع إنشاء مآخذ AF_ALG عبر LSM أو kprobe دون إعادة تشغيل النظام. | Kitploit
أدوات/GitHubGitHub/spensercai/copy_fail
أدوات دفاعيةتصعيد الامتيازاتأطر الاستغلالتحليل الثغرات الأمنيةالاستغلالالمحاكاة الافتراضية للأماناستغلال الملفات الثنائية
GitHubspensercai/copy_fail

copy_fail

# PoC لاستغلال ثغرة في نواة لينكس مكتوب بلغة Rust لـ CVE-2026-31431 (كتابة ذاكرة التخزين المؤقت للصفحات في AF_ALG) بالإضافة إلى دفاع وقت التشغيل عبر eBPF يمنع إنشاء مآخذ AF_ALG عبر LSM أو kprobe دون إعادة تشغيل النظام.

عرض المستودع
3منذ 3 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

Copy Fail — CVE-2026-31431

CVE-2026-31431 (Copy Fail) هي ثغرة تصعيد صلاحيات محلية في وحدة algif_aead في نواة لينكس (نظام AF_ALG الفرعي). خلل منطقي أُدخل في أغسطس 2017 يسمح لأي مستخدم محلي غير مميز بكتابة 4 بايتات مُتحكم بها في ذاكرة التخزين المؤقت للصفحات لأي ملف قابل للقراءة عبر AF_ALG + splice()، ثم تنفيذ ثنائي setuid تالف للحصول على صلاحيات الجذر. الاستغلال حتمي — لا سباقات، لا إزاحات نواة، لا انهيار للنظام. يؤثر على جميع توزيعات لينكس الرئيسية التي تشحن أنوية من 4.14 حتى 7.0-rc.

CVSS: 7.8 | تم الإصلاح في: النواة 7.0، 6.19.12، 6.18.22 | إصلاح الخط الرئيسي: commit a664bf3d603d

المصادر: copy.fail، The Hacker News، تنبيه CloudLinux

هيكل المشروع

root@kitploit:~
crates/
├── exp/                            # استغلال PoC (إعادة تنفيذ بلغة Rust)
├── copy_fail_guard/                # مُحمّل eBPF في مساحة المستخدم — وضع LSM
├── copy_fail_guard-ebpf/           # برنامج eBPF LSM (ليس في مساحة العمل)
├── copy_fail_guard_kprobe/         # مُحمّل eBPF في مساحة المستخدم — وضع kprobe
└── copy_fail_guard_kprobe-ebpf/    # برنامج eBPF kprobe (ليس في مساحة العمل)
scripts/
└── build_guard.sh                  # بناء بنقرة واحدة → المخرجات إلى dist/

نظرة عامة على الثغرة

السبب الجذري هو سلسلة من ثلاث ميزات نواة مستقلة تتفاعل بشكل غير آمن:

  1. مقبس AF_ALG — يعرض واجهة برمجة التشفير للنواة لمساحة المستخدم غير المميزة
  2. splice() — ينقل بيانات الملف بنسخ صفرية كمراجع لصفحات ذاكرة التخزين المؤقت (وليس نسخاً) إلى قائمة التشتت للتشفير
  3. قالب AEAD authencesn — يستخدم مخزن الإخراج الخاص بالمستدعي كمساحة مؤقتة، ويكتب 4 بايتات عند dst[assoclen + cryptlen]

في 2017، جعل تحسين في المكان في algif_aead.c (72548b093ee3) req->src == req->dst، مما ربط صفحات ذاكرة التخزين المؤقت في قائمة التشتت الوجهة القابلة للكتابة. عندما يكتب authencesn بايتاته المؤقتة، يتجاوز مخزن الإخراج إلى صفحات ذاكرة التخزين المؤقت المرتبطة. يتحكم المهاجم في:

  • أي ملف: أي ملف قابل للقراءة من قبل المستخدم الحالي
  • أي إزاحة: تحددها إزاحة splice وطول splice وassoclen
  • أي 4 بايتات: تأتي من بايتات AAD 4–7 (seqno_lo)، المُعينة في sendmsg()

الصفحة التالفة لا تُعلَّم أبداً كمتسخة — الملف على القرص يبقى دون مساس، لكن execve() يقرأ من ذاكرة التخزين المؤقت للصفحات. إتلاف ثنائي setuid → صلاحيات الجذر.

crates/exp — استغلال PoC

إعادة تنفيذ بلغة Rust لـ PoC العامة المكونة من 732 بايت بلغة Python. يستهدف /usr/bin/su، ويربط صفحات ذاكرة التخزين المؤقت الخاصة به في مقبس AF_ALG AEAD، ويكتب فوقها حمولة قشرة مضغوطة.

البناء

يتطلب Rust 1.85+ (إصدار 2024).

root@kitploit:~
cargo build --release -p copy_fail

الثنائي مخصص للينكس فقط. على المنصات الأخرى يخرج برسالة خطأ Unsupported.

التشغيل

تحذير: هذا يستغل ثغرة نواة حقيقية. شغّله فقط على أنظمة تملكها وتتحكم بها، ويفضل أن تكون جهازاً افتراضياً يمكن التخلص منه.

  1. شغّل جهازاً افتراضياً بنواة قابلة للاستغلال (أي توزيعة رئيسية بنواة < 7.0 / < 6.19.12 / < 6.18.22).

  2. انسخ الثنائي المبني إلى الجهاز الافتراضي وشغّله كمستخدم غير جذر:

    root@kitploit:~
    ./target/release/copy_fail
    
  3. قابل للاستغلال: تظهر قشرة جذر (#). شغّل whoami للتأكد من أنك root.

  4. غير قابل للاستغلال (نواة مُصلحة): تفشل عملية AF_ALG أو يتصرف ثنائي su بشكل طبيعي. سترى خطأً أو طلب كلمة مرور su عادياً.

أداة الدفاع — copy_fail_guard

دفاع نواة وقت التشغيل يمنع CVE-2026-31431 دون ترقية النواة أو إعادة التشغيل. يستخدم eBPF لاعتراض إنشاء مقبس AF_ALG، مما يقطع الخطوة الأولى للاستغلال.

يتم توفير وضعين. المُحمّل بنقرة واحدة يختار تلقائياً أفضل وضع متاح:

كيف يعمل

root@kitploit:~
┌──────────────────────────────────────────────────┐
│  run_guard.sh                                    │
│  • يكتشف دعم BPF LSM                             │
│  • LSM متاح  → copy_fail_guard (EPERM)           │
│  • LSM غير متاح → copy_fail_guard_kprobe (KILL)  │
└──────────────┬───────────────────────────────────┘
               │
┌──────────────▼───────────────────────────────────┐
│  برنامج eBPF                                     │
│  إذا كانت عائلة المقبس == 38 (AF_ALG)            │
│     → منع (EPERM أو SIGKILL)                     │
│  وإلا                                           │
│     → السماح                                     │
└──────────────────────────────────────────────────┘

التأثير على النظام

منع AF_ALG له تأثير شبه معدوم على الأنظمة النموذجية:

  • غير متأثر: dm-crypt/LUKS، kTLS، IPsec/XFRM، OpenSSL/GnuTLS/NSS (البنيات الافتراضية)، SSH، تشفير keyring النواة — هذه تستخدم واجهة التشفير داخل النواة مباشرة، وليس عبر AF_ALG
  • متأثر محتملاً: التطبيقات المكوّنة صراحةً لاستخدام AF_ALG (مثل OpenSSL مع محرك afalg المفعل، بعض مسارات تفريغ التشفير المدمجة)
  • الأداء: صفر حمل إضافي لأي شيء لا يستدعي socket(AF_ALG, ...)

البناء

بناء بنقرة واحدة (موصى به):

root@kitploit:~
./scripts/build_guard.sh

هذا يثبّت تلقائياً سلاسل الأدوات المفقودة (nightly، bpf-linker)، ويجمع جميع برامج eBPF ومُحمّلات مساحة المستخدم، ويخرج كل شيء إلى dist/:

root@kitploit:~
dist/
├── copy_fail_guard.bpf.o          # برنامج eBPF LSM
├── copy_fail_guard_kprobe.bpf.o   # برنامج eBPF kprobe
├── copy_fail_guard                 # مُحمّل مساحة المستخدم (LSM)
├── copy_fail_guard_kprobe          # مُحمّل مساحة المستخدم (kprobe)
└── run_guard.sh                    # اختيار تلقائي: sudo ./run_guard.sh

انسخ دليل dist/ إلى أي جهاز مستهدف وشغّل sudo ./run_guard.sh لتفعيل الحماية.

بناء يدوي (خطوة بخطوة):

الخطوة 1: تجميع برامج eBPF (يجب أن يتم على لينكس):

root@kitploit:~
# نسخة LSM
cd crates/copy_fail_guard-ebpf
cargo +nightly build --target bpfel-unknown-none -Z build-std=core --release

# نسخة kprobe
cd crates/copy_fail_guard_kprobe-ebpf
cargo +nightly build --target bpfel-unknown-none -Z build-std=core --release

الخطوة 2: بناء مُحمّلات مساحة المستخدم:

root@kitploit:~
cargo build --release -p copy_fail_guard -p copy_fail_guard_kprobe

التشغيل

موصى به — يختار تلقائياً أفضل وضع:

root@kitploit:~
sudo ./dist/run_guard.sh

يدوي — تشغيل وضع محدد:

root@kitploit:~
# وضع LSM (يتطلب lsm=bpf)
sudo GUARD_BPF_OBJ=path/to/copy_fail_guard.bpf.o RUST_LOG=info ./copy_fail_guard

# وضع kprobe (يعمل في كل مكان)
sudo GUARD_BPF_OBJ=path/to/copy_fail_guard_kprobe.bpf.o RUST_LOG=info ./copy_fail_guard_kprobe

اضغط Ctrl-C لفصل برنامج eBPF واستعادة السلوك الطبيعي.

التحقق من الدفاع

مع تشغيل الحارس في طرفية واحدة:

root@kitploit:~
# في طرفية أخرى، جرّب الاستغلال:
./target/release/copy_fail
# وضع LSM:   "error: Operation not permitted"
# وضع kprobe: "已杀死" / "Killed"

# أو اختبر مباشرة مع Python:
python3 -c "import socket; socket.socket(38, 5, 0)"
# وضع LSM:   PermissionError: [Errno 1] Operation not permitted
# وضع kprobe: Killed

القيود الحالية

  • لا يوجد دعم قائمة بيضاء بعد — النسخة الحالية تمنع ALL إنشاء مقبس AF_ALG في مساحة المستخدم دون قيد أو شرط. لا توجد آلية لإعفاء عمليات محددة بواسطة PID أو cgroup أو اسم الأمر. هذا مخطط له في نسخة مستقبلية (عبر خرائط eBPF HashMap). بالنسبة للغالبية العظمى من الأنظمة هذا جيد لأن لا شيء تقريباً يستخدم AF_ALG.
  • يجب تجميع حزم eBPF بشكل منفصل على لينكس مع bpf-linker (تستهدف bpfel-unknown-none ولا يمكن أن تكون أعضاء عاديين في مساحة العمل).
  • الحماية نشطة فقط أثناء تشغيل عملية المُحمّل. للحماية المستمرة، شغّلها كخدمة systemd.

تفعيل BPF LSM (اختياري، لوضع LSM)

معظم التوزيعات لا تفعّل BPF LSM افتراضياً. إذا أردت وضع LSM الأنظف (EPERM بدلاً من SIGKILL):

root@kitploit:~
# تحقق من LSMs الحالية:
cat /sys/kernel/security/lsm

# إذا كان "bpf" مفقوداً، أضفه:
sudo sed -i 's/^GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 lsm=lockdown,capability,yama,apparmor,bpf"/' /etc/default/grub
sudo update-grub && sudo reboot

وضع kprobe يعمل بدون هذه الخطوة.

التحقق من إصلاح النواة

بعد ترقية النواة إلى ≥ 7.0 / ≥ 6.19.12 / ≥ 6.18.22:

root@kitploit:~
# تأكد من إصدار النواة
uname -r

# أعد تشغيل الاستغلال — يجب ألا ينتج قشرة جذر بعد الآن
./target/release/copy_fail

بدلاً من ذلك، تأكد من تحييد الوحدة القابلة للاستغلال:

root@kitploit:~
modinfo algif_aead | grep filename

# إذا كانت مدمجة، احظر initcall (يتطلب إعادة تشغيل)
sudo grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
sudo reboot
تنزيل الأداة
وضع LSMوضع kprobe
كيف يمنعيعيد -EPERM (رفض إنشاء المقبس)SIGKILL (قتل العملية)
متطلب النواة≥ 5.7 مع معامل الإقلاع lsm=bpf≥ 5.3، بدون معاملات خاصة
يحتاج إعادة تشغيل للتفعيلربما (إذا لم يكن lsm=bpf مضبوطاً)لا
نقطة الخطافخطاف LSM socket_createkprobe __sys_socket