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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/xj2268-ta/kvm-januscape
تحليل الثغرات الأمنيةالاستغلالتحليل الملفات الثنائية
GitHubxj2268-ta/kvm-januscape

KVM-Januscape

تصحيح ثغرة CVE-2026-53359

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

الأكثر شعبية

عرض الكل →

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

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

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

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

KVM-XJ تصحيح ساخن

dump_tool.py يقوم تلقائيًا بالعثور على الإزاحات، كيفية استخدامه انظر إلى الكود بنفسك

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

CVE-2026-53359 (Januscape) هي ثغرة استخدام بعد التحرير (UAF) في KVM Shadow MMU لنواة لينكس.

  • زمن الكمون: 16 عامًا (أغسطس 2010 حتى يوليو 2026)
  • نطاق التأثير: جميع أنظمة Intel/AMD x86 مع تفعيل المحاكاة الافتراضية المتداخلة
  • مستوى الخطورة: عالٍ، يمكن لمستخدم root داخل VM الهروب إلى المضيف والحصول على صلاحيات root على المضيف
  • طريقة الاستغلال: انهيار نواة المضيف (DoS) أو هروب كامل من الجهاز الافتراضي (لا يوجد POC عام)

مبدأ الثغرة

عندما تبحث دالة kvm_mmu_get_page() في جدول التجزئة عن صفحة جدول ظل قابلة لإعادة الاستخدام، فإنها تقارن فقط gfn (رقم إطار الصفحة الفيزيائية للضيف)، دون مقارنة role (دور الجدول/دور MMU)، مما يؤدي إلى إعادة استخدام خاطئة لجدول غير متطابق في الدور، مما يسبب UAF.

root@kitploit:~
قبل الإصلاح (به ثغرة):
┌──────────────────────────────────────┐
│ kvm_mmu_get_page()                   │
│   تجاوز جدول التجزئة                   │
│   if (child->gfn == gfn)             │
│       return child  ← يقارن gfn فقط!  │
│       إعادة استخدام حتى لو لم يتطابق الدور → UAF! │
│   تخصيص صفحة جديدة (آمن)              │
└──────────────────────────────────────┘

في commit النواة الرئيسية 81ccda30b4e8 تمت إضافة سطر لمقارنة role:

root@kitploit:~
// قبل الإصلاح
if (... && spte_to_child_sp(*sptep)->gfn == gfn)

// بعد الإصلاح
if (... && spte_to_child_sp(*sptep)->gfn == gfn
       && spte_to_child_sp(*sptep)->role.word == role.word)

طريقي في الإصلاح

الطريقة: تصحيح ثنائي ساخن عبر text_poke (تصحيح NOP)

بدون تعديل كود مصدر النواة، وبدون استبدال الدوال، بل تعديل تعليمات الثغرة مباشرة في ذاكرة النواة العاملة.

المبدأ

root@kitploit:~
على المستوى الثنائي:
الإزاحة 0x104: 49 39 47 28          cmp %rax, 0x28(%r15)   ← مقارنة gfn
الإزاحة 0x108: 0f 84 9f 01 00 00    je   +0x19f            ← إذا تطابق اقفز لإعادة الاستخدام

بعد التصحيح:
الإزاحة 0x108: 66 0f 1f 44 00 00    NOP × 6               ← لا يفعل شيئًا
root@kitploit:~
بعد الإصلاح:
┌──────────────────────────────────────┐
│ kvm_mmu_get_page()                   │
│   تجاوز جدول التجزئة                   │
│   if (child->gfn == gfn)             │
│       NOP (القفزة مُزالت، تمر عبرها)   │
│   تخصيص صفحة جديدة (إجبار المسار الآمن) │
│   → لا إعادة استخدام = لا UAF = تم إصلاح الثغرة │
└──────────────────────────────────────┘

التنفيذ التقني

  1. العثور على عنوان دالة kvm_mmu_get_page عبر kallsyms_lookup_name
  2. العثور على دالة text_poke عبر kallsyms_lookup_name (واجهة برمجية للتعديل الساخن على كود النواة)
  3. استخدام stop_machine لإيقاف جميع وحدات المعالجة المركزية مؤقتًا لضمان سلامة التعديل
  4. استخدام text_poke لاستبدال تعليمة je ذات 6 بايت بتعليمة NOP ذات 6 بايت
  5. عند الإلغاء، استخدام text_poke لاستعادة التعليمات الأصلية

لماذا لا تُستخدم الحلول الأخرى

تقييم التأثير

متطلبات النشر

الشرطالوصف
إصدار النواةLinux 4.18+ (CentOS 8 / RHEL 8 / Rocky 8 وغيرها)
بيئة الترجمةkernel-devel + gcc + make

الترجمة والتحميل

root@kitploit:~
# الترجمة
make

# تحميل التصحيح الساخن
insmod KVM-XJ.ko

# عرض الحالة
dmesg | grep KVM-XJ
cat /sys/module/kvm_intel/parameters/nested   # يجب أن يظل 1
lsmod | grep KVM_XJ

# الإلغاء (استعادة الكود الأصلي)
rmmod KVM_XJ

التوافق مع النوى الأخرى

تختلف تحسينات الترجمة بين إصدارات النواة المختلفة، وكذلك إزاحة تعليمة je. استخدم dump_tool.py للتحليل التلقائي:

root@kitploit:~
# 1. تنزيل kvm.ko من المضيف
scp root@المضيف:/lib/modules/.../kvm.ko.xz .
xz -d kvm.ko.xz

# 2. تشغيل أداة التحليل
python dump_tool.py kvm.ko

# 3. ستقوم الأداة بإخراج إزاحة التصحيح، عدّل قيمة 0x108 في KVM-XJ.c

النوى التي تم التحقق منها

إصدار النواةإزاحة jeالحالة
4.18.0-496.el8.x86_640x108تم اختباره
4.18.0-358.el8.x86_640xe8تم اختباره

ملاحظات

  1. من لا يعرف كيفية الاستخدام أو قراءة الكود، يُنصح بعدم استخدامه
تنزيل الأداة
الحلالمشكلة
ترقية النواة وإعادة التشغيليتطلب إعادة تشغيل المضيف، جميع الأجهزة الافتراضية تتوقف
nested=0 (تعطيل المحاكاة الافتراضية المتداخلة)فقدان ميزة المحاكاة الافتراضية المتداخلة، لا يمكن تشغيل VM داخل VM
طريقة kpatchيتطلب kernel-debuginfo، وقت الترجمة 10-20 دقيقة، تبعيات معقدة
استبدال الدالة عبر ftracekvm_mmu_get_child_sp مُضمّنة (inline) بواسطة GCC، لا توجد نقطة دخول مستقلة
حلي عبر text_pokeترجمة خلال 10 ثوانٍ، ملف .c واحد، تعديل تعليمة الثغرة مباشرة
الوظيفةالتأثير
إعادة تشغيل المضيفغير مطلوبة
إعادة تشغيل/ترحيل VMغير مطلوب
المحاكاة الافتراضية المتداخلة (تشغيل VM داخل VM)محفوظة، تعمل بشكل طبيعي
إنشاء/تشغيل الأجهزة الافتراضيةطبيعي
دمج ذاكرة KSMلا يتأثر، وظيفة مستقلة
أداء المعالجلا تأثير تقريبًا (NOP لا يستهلك المعالج)
الذاكرةجداول الظل لم تعد تُعاد استخدامها، يتم تخصيص صفحة جديدة في كل مرة، استهلاك ذاكرة إضافي بسيط
إلغاء تحميل وحدة KVMطبيعي (rmmod يستعيد الكود الأصلي تلقائيًا)
إعادة تشغيل المضيف
غير مطلوبة
إيقاف VMغير مطلوب
المحاكاة الافتراضية المتداخلةمحفوظة