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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-68398 — CVE-2026-68398 ثغرة استخدام بعد التحرير (use-after-free) في Ubuntu PPPoL2TP لتصعيد الامتيازات محليًا | Kitploit
أدوات/GitHubGitHub/aramosf/cve-2026-68398
تصعيد الامتيازاتالاستغلالاستغلال الملفات الثنائية
GitHubaramosf/cve-2026-68398

CVE-2026-68398

CVE-2026-68398 ثغرة استخدام بعد التحرير (use-after-free) في Ubuntu PPPoL2TP لتصعيد الامتيازات محليًا

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-68398: ثغرة استخدام بعد التحرير (use-after-free) في PPPoL2TP بنظام Ubuntu لرفع الصلاحيات إلى الجذر محليًا

CVE-2026-68398 live exploit

يحتوي هذا المستودع على استغلال محلي لرفع الصلاحيات خاص بنسخة بناء محددة لثغرة CVE-2026-68398، وهي سباق من نوع استخدام بعد التحرير (use-after-free) بين معالجة الاستقبال في PPPoL2TP وتدمير قناة PPP غير مرتبطة. تم التحقق من صحته في QEMU مقابل الحزمة الرسمية لنظام Ubuntu 22.04 linux-image-5.15.0-187-generic (5.15.0-187.197).

يبدأ الاختبار النهائي كمستخدم مخصص بمعرّف UID 1001 دون مجموعات إضافية، ودون صلاحيات (capabilities)، ودون وصول sudo، ثم يحصل على UID 0 في النطاق الأولي (initial namespace). تبقى KASLR وSMEP وSMAP وAppArmor مفعّلة. لا يتم إقلاع الضيف مع nokaslr أو nopti أو nosmep أو nosmap.

تحذير

يعمل هذا الكود عمدًا على إتلاف حالة كومة (heap) النواة ويرتبط بنسخة بناء نواة Ubuntu محددة بدقة. يمكن أن يؤدي فشل السباق إلى انهيار (panic) النظام أو إتلافه. شغّله فقط في جهاز افتراضي معزول وقابل للتخلص منه وتملكه.

الثغرة

تنفَّذ الدالة pppol2tp_recv() في مسار استقبال L2TP عبر UDP داخل قسم حرج (critical section) لقراءة RCU وتستدعي في النهاية ppp_input(&po->chan). مقبس PPPoX وقناته المضمّنة ppp_channel آمنان مع RCU، لكن البنية الداخلية struct channel التي تستخدمها ppp_input() هي تخصيص (allocation) منفصل.

بالنسبة لقناة مرتبطة عبر PPPIOCGCHAN ولكنها غير مرتبطة بوحدة PPP وغير مجسّرة (bridged)، يقوم مسار الإغلاق بتحرير ذلك الكائن الداخلي فورًا:

RX:    l2tp_udp_encap_recv -> pppol2tp_recv -> ppp_input(channel)
CLOSE: pppol2tp_release -> pppox_unbind_sock
       -> ppp_unregister_channel -> ppp_release_channel -> kfree(channel)

وبالتالي يمكن لمسار الاستقبال العمل على قائمة skb وقائمة الانتظار الخاصة بالقناة المحرّرة. يضيف الإصلاح استدعاءً رجعيًا (callback) لـ RCU إلى struct channel ويؤجّل تطهير القائمتين والتحرير حتى انقضاء فترة سماح (grace period) لـ RCU.

تم اكتشاف الثغرة وإصلاحها في النواة الرسمية (upstream) بواسطة Norbert Szetei من Doyensec. الإصلاح الرئيسي (mainline) هو ec4215683e47424c9c4762fd3c60f552a3119142.

الإصدارات المتأثرة والمُصلَحة

يحدد سجل Linux CNA أن السلالة المعرضة للثغرة تبدأ مع Linux 4.15. قد تحمل نوى البائعين (vendor kernels) الإصلاح تحت رقم إصدار مختلف، لذا فإن مصدر الرمز الدقيق أو سجل تغييرات الحزمة له الأولوية على هذا الجدول.

خط النواةأول إصدار مُصلَحالتزام الإصلاح
6.6.y6.6.1484bb84e964ff0
6.12.y6.12.1013ab32218d718
6.18.y6.18.42c9574b8a8ede
7.1.y7.1.606213c85d8c0
Mainline7.2-rc4ec4215683e47

تتطلب خطوط النوى المدعومة الأقدم من جهة البائعين نقلًا عكسيًا (backport). اعتبارًا من 2026-08-12، يضع متتبع CVE لنظام Ubuntu حزمة linux الخاصة بـ Jammy في حالة needs-triage؛ ولم يتم تحديد أي حزمة Ubuntu Jammy مصححة. لا يزال مصدر الإصدار المُختبر 5.15.0-187.197 يستدعي kfree(pch) مباشرة وهو معرض للثغرة.

الهدف المُتحقق منه

الخاصيةالقيمة
التوزيعةUbuntu 22.04.5 LTS (Jammy)
حزمة النواةlinux-image-5.15.0-187-generic / 5.15.0-187.197
إصدار النواة5.15.0-187-generic #197-Ubuntu
البنيةx86-64
الجهاز الافتراضيQEMU/KVM، -cpu host، أربع وحدات vCPU، 5 GiB من الذاكرة
الهوية الأوليةuid=1001(poc) gid=1001(poc) groups=1001(poc)
الصلاحيات الأوليةالميراثية (inheritable) والمسموحة (permitted) والفعّالة (effective) والمحيطية (ambient) جميعها صفر
الهوية النهائيةuid=0(root) gid=0(root) في النطاقات الأولية
تغييرات الإقلاعلا شيء؛ سطر أوامر قياسي مع تفعيل KASLR

لم تتم إعادة تجميع النواة. كانت صورة السحابة المصغّرة تفتقر إلى linux-modules-extra-5.15.0-187-generic، لذا تم تثبيت تلك الحزمة الرسمية من Ubuntu لتوفير l2tp_ppp. يعتمد تثبيت Jammy العادي الذي يستخدم الحزمة الوصفية linux-generic أصلًا على حزمة modules-extra المطابقة. يتم تحميل وحدة البروتوكول تلقائيًا عندما ينشئ الاستغلال مقبس PPPoL2TP الخاص به.

المتطلبات والحالة الافتراضية لنظام Ubuntu

المتطلبحالة Ubuntu 5.15.0-187استخدام الاستغلال
PPPCONFIG_PPP=yمدمجة في النواة
L2TP / PPPoL2TPCONFIG_L2TP=m، CONFIG_PPPOL2TP=mوحدة linux-modules-extra الرسمية
مفاتيح المستخدمCONFIG_KEYS=yيستعيد القناة المحرّرة kmalloc-256
AppArmorCONFIG_SECURITY_APPARMOR=yتبقى مفعّلة؛ تشتمل بيانات الاعتماد المزوّرة على تسمية unconfined صالحة
KASLRCONFIG_RANDOMIZE_BASE=yيبقى مفعّلًا؛ يتم استرداد الإزاحة (slide) وقت التشغيل
SMAPCONFIG_X86_SMAP=yتبقى مفعّلة
نطاقات المستخدم/الشبكةمفعّلة بواسطة Ubuntu لكنها غير مستخدمةلا يلزم إعداد نطاقات أو اكتساب صلاحيات
/dev/pppغير مطلوبالقناة مرتبطة لكنها لا تتصل أبدًا بوحدة PPP

يستخدم كاشف KASLR التلقائي قناة جانبية (side channel) لتوقيت تعليمات prefetch في معمارية x86 ويتطلب تعليمة RDTSCP مع تعطيل KPTI. تُظهر وحدة المعالجة المركزية المضيفة المختبرة rdtscp وsmep وsmap وهي غير متأثرة بثغرة Meltdown، لذا تترك Ubuntu خاصية KPTI معطّلة دون أي تجاوز في الإقلاع. على معالج يبلغ فيه /proc/cpuinfo عن علم pti، يرفض الكاشف العمل. هذه حالة عتادية خاصة بالاستغلال: تبقى الثغرة الأساسية CVE قابلة للوصول، لكن هذا الإصدار لا يدّعي تجاوز KASLR على نظام مفعّل فيه KPTI. توجد إزاحة مقدّمة يدويًا لأغراض التشخيص المضبوط فقط.

عملية الاستغلال

  1. تنشئ أربع مهام سباق (race workers) مرارًا قناة PPPoL2TP مرتبطة وغير مرتبطة بوحدة PPP، وترسل إطارات L2TPv2/PPP صالحة من وحدات معالجة أخرى، ثم تغلق مقبس البيانات.
  2. تستعيد حمولة من مفاتيح المستخدم البنية المحرّرة struct channel. يتعامل مسار RX الذي لا يزال يعمل مع بايتات المفاتيح المتحكم بها على أنها قائمة skb وقائمة انتظار خاصة به.
  3. تكشف عمليات قوائم الانتظار عن مؤشر skb حي عبر حمولة المفاتيح القابلة للقراءة. تستخدم عملية إلغاء ربط (unlink) ثانية متحكم بها core_pattern كمساحة مساعدة للإفصاح وتكشف مؤشر تخصيص مفاتيح.
  4. تتحول حمولة مفتاح بحجم 224 بايتًا إلى ناقل بيانات اعتماد (credential) دائم. يكشف تكرار عملية إفصاح القائمة عن عنوان الناقل.
  5. تضع مرحلتان إضافيتان لمصدر المؤشر وإلغاء الربط مؤشرًا صالحًا لكتلة بيانات AppArmor cred وتسمية مزيفة غير مقيدة (unconfined) داخل بيانات الاعتماد المزوّرة.
  6. يستدعي إدخال قائمة الانتظار المستعاد الدالة override_creds() مع بيانات الاعتماد المزوّرة. تتطابق حقول UID/GID والصلاحيات (capabilities) ومؤشرات المستخدم والنطاق وucount والمجموعة المطلوبة مع نسخة بناء Ubuntu المحددة بدقة.
  7. ينسخ سياق التنفيذ المتمتع بصلاحيات مؤقتة /proc/self/exe إلى ملف فريد في /tmp، ويغيّره إلى ملكية root بالوضع 4755 ويتحقق من تلك السمات.
  8. تنفّذ المهمة الأصلية غير المتميزة (unprivileged) تلك النسخة SUID، وتحصل على UID/GID حقيقيين بقيمة 0، وتزيل الملف المساعد المؤقت، ثم تنفّذ /usr/bin/id.

الجسر الأخير ضروري لأن override_creds() تغيّر بيانات الاعتماد الذاتية للمهمة النشطة في النواة؛ يحوّل تثبيت وتنفيذ النسخة SUID الموثّقة ذلك البدائي قصير الأمد إلى بيانات اعتماد عملية عادية.

البناء

يربط ملف Makefile الاستغلال ربطًا ثابتًا (statically). يتم تجميع كائن prefetch الحساس للتوقيت عمدًا عند مستوى -O0؛ بينما يستخدم الاستغلال نفسه مستوى -O2.

make

أوامر مكافئة:

gcc -O0 -Wall -Wextra -Werror -c -o build/kaslr_prefetch.o kaslr_prefetch.c
gcc -O2 -static -pthread -Wall -Wextra -Werror \
  -o build/CVE-2026-68398 exploit.c build/kaslr_prefetch.o

التشغيل

من حساب المستخدم العادي على النواة المُتحقق منها بدقة:

تنزيل الأداة