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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-32710 — # ثغرة كتابة خارج الحدود في الذاكرة (Heap OOB write) في دالة JSON_SCHEMA_VALID() في MariaDB ← تصعيد امتيازات دائم (بمساعدة مختبر) | Kitploit
أدوات/GitHubGitHub/dinosn/cve-2026-32710
تصعيد الامتيازاتأطر الاستغلالتحليل الثغرات الأمنيةالاستغلالتطوير الحمولاتأمن قواعد البياناتاستغلال الملفات الثنائية
GitHubdinosn/cve-2026-32710

CVE-2026-32710

# ثغرة كتابة خارج الحدود في الذاكرة (Heap OOB write) في دالة JSON_SCHEMA_VALID() في MariaDB ← تصعيد امتيازات دائم (بمساعدة مختبر)

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

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-32710

تجاوز سعة المخزن المؤقت في الكومة في JSON_SCHEMA_VALID() في MariaDB ← تصعيد دائم للامتيازات ← تنفيذ أوامر عبر UDF

المتأثرMariaDB 11.4.x (مؤكَّد على 11.4.9)
الخللكتابة خارج النطاق في json_get_normalized_string() — strncpy في DYNAMIC_STRING بحجم 128 بايت دون فحص حدود
التأثيرمستخدم بصلاحية SELECT فقط ← ALL PRIVILEGES WITH GRANT OPTION ← تنفيذ أوامر عشوائية عبر UDF
المصدرsql/json_schema_helper.cc:91

بمساعدة مختبرية. يستخدم السكربت Docker / فحص الجذر لقراءة /proc/1/mem واكتشاف تخطيط الكومة لكل اتصال. سلسلة الاستغلال الفعلية هي SQL خالص عبر TCP. الاستغلال المُسلَّح سيتطلب بدائية تسريب معلومات لتحل محل خطوة فحص الذاكرة.

قبل

lowpriv يمكنه فقط تنفيذ SELECT على قاعدة بيانات test. جداول النظام مرفوضة.

before

الاستغلال

سكربت Python واحد يقوم بتهيئة الكومة، وكتابة عشوائية بقفزتين عبر بيانات المتغيرات المعرّفة من قبل المستخدم، ويثبّت التصعيد عبر GRANT ALL، ويحقق تنفيذ الكود عبر UDF:

root@kitploit:~
python3 exploit.py

exploit

بعد

lowpriv الآن لديه ALL PRIVILEGES WITH GRANT OPTION، ويمكنه قراءة جداول النظام، وقراءة/كتابة ملفات عشوائية، وتنفيذ أوامر نظام التشغيل كمستخدم mysql. الصلاحية تبقى بعد إعادة تشغيل الخادم.

after

مخرجات الاستغلال الكاملة

full run

المراحل

المرحلة 1: تصعيد الامتيازات

root@kitploit:~
┌──────────────────────────────────────────────────────────────────┐
│  SELECT  json_schema_valid(overflow),                           │
│          @ccc...c := hop1,                                      │
│          @aaa...a := hop2                                       │
└──────────────────────────────────────────────────────────────────┘
         │                    │                   │
         ▼                    ▼                   ▼
   ┌───────────┐     ┌──────────────┐    ┌──────────────┐
   │ 192-byte  │     │ Write to @c  │    │ Write to @a  │
   │ overflow   │     │ through the  │    │ through the  │
   │ corrupts   │     │ corrupted    │    │ redirected   │
   │ entry_c's  │     │ pointer:     │    │ pointer:     │
   │ value ptr  │     │              │    │              │
   │ (2-byte    │     │ entry_a →    │    │ master_access│
   │  partial   │     │   .value =   │    │   = 0xFFFF.. │
   │  overwrite)│     │   &master_   │    │ (ALL PRIVS)  │
   │            │     │   access     │    │              │
   └───────────┘     │   .length= 9 │    └──────────────┘
                      └──────────────┘
  1. تهيئة الكومة — أكثر من 100 متغير مستخدم يستنزف tcache، مما يُجبر Entry_a → Value_a → Entry_b → Value_b → Entry_c → Value_c على التخصيص بشكل متتالٍ.

  2. التجاوز — JSON_SCHEMA_VALID يُطلق strncpy بحجم 192 بايت يتجاوز المخزن المؤقت بحجم 128 بايت، مما يُفسد entry_c→value (كتابة جزئية للمؤشر بحجم 2 بايت داخل نفس صفحة 64 كيلوبايت) ليشير إلى entry_a + 32.

  3. القفزة 1 — الإسناد إلى @c يكتب 126 بايت عبر المؤشر المُفسد إلى بيانات entry_a الوصفية، مع ضبط:

    • entry_a→value = &Security_context::master_access
    • entry_a→length = 9
  4. القفزة 2 — الإسناد إلى @a يكتب 8 بايت من 0xFF عبر مؤشر entry_a→value المُعاد توجيهه ← .

المرحلة 2: تنفيذ أوامر عبر UDF

بعد الإبقاء، يُعاد تشغيل الخادم (استرداد من الانهيار)، وتُستخدم الامتيازات المُصعَّدة لتثبيت مكتبة UDF مشتركة:

  1. LOAD_FILE('/tmp/raptor_udf.so') INTO DUMPFILE '/usr/lib/mysql/plugin/raptor.so'
  2. CREATE FUNCTION sys_exec RETURNS INTEGER SONAME 'raptor.so'
  3. SELECT sys_exec('id > /tmp/pwned')

القيود الرئيسية المُعالَجة

إعداد المختبر

root@kitploit:~
# 1. بناء وتشغيل الحاوية
./setup.sh

# 2. تعطيل ASLR على مضيف Docker
sudo sh -c 'echo 0 > /proc/sys/kernel/randomize_va_space'

# 3. تشغيل الاستغلال (معايرة تلقائية لكل محاولة)
python3 exploit.py

# 4. أمر مخصص
python3 exploit.py --cmd 'cat /etc/passwd > /tmp/out'

المتطلبات

  • Docker (x86_64)
  • Python 3
  • تعطيل ASLR على مضيف Docker (/proc/sys/kernel/randomize_va_space = 0)
  • تشغيل الحاوية مع --cap-add SYS_PTRACE (للوصول إلى /proc/1/mem)

الخيارات

root@kitploit:~
--calibrate      قياس ثوابت تخطيط الكومة والخروج
--cmd CMD        الأمر للمرحلة 2 تنفيذ UDF (الافتراضي: id > /tmp/pwned)
--stage1-only    تشغيل تصعيد الامتيازات فقط، وتخطي UDF RCE
--attempts N     الحد الأقصى لمحاولات المرحلة 1 (الافتراضي: 5)
--host HOST      مضيف MariaDB (الافتراضي: 127.0.0.1)
--port PORT      منفذ MariaDB (الافتراضي: 3306)

ما توفره المساعدة المختبرية

يدخل سكربت الاستغلال إلى الحاوية كجذر لقراءة /proc/1/mem. يُستخدم هذا لشيئين:

  1. اكتشاف تخطيط الكومة — تحديد موقع البنيات الثلاث user_var_entry والتحقق من أنها متجاورة (entry_a+32 داخل نفس صفحة 64 كيلوبايت مثل entry_c→value للكتابة الجزئية بحجم 2 بايت).
  2. عنوان Security_context — العثور على حقل master_access لاستهدافه بالكتابة ذات القفزتين.

يعمل الفحص بشكل مضمّن لكل محاولة لأن تخطيط الكومة يختلف بين الاتصالات (حتى مع ASLR=0) بسبب تخصيص مجمع الخيوط في MariaDB لأرينا مختلفة. سلسلة الاستغلال الفعلية — التجاوز + القفزة 1 + القفزة 2 — هي SQL خالص يتم تنفيذه عبر اتصال TCP.

في سيناريو واقعي، سيحتاج المهاجم إلى ثغرة تسريب معلومات منفصلة (أو قناة جانبية) للحصول على هذه العناوين.

الملفات

تنزيل الأداة
master_access = ALL PRIVILEGES
  • الإبقاء — الجلسة الآن تمتلك جميع الامتيازات. GRANT ALL يثبّت التصعيد في جدول mysql.global_priv المدعوم بـ Aria. الجلسة تنهار في النهاية أثناء التنظيف (فساد كومة متبقٍ)، لكن GRANT قد تم حفظه بالفعل ويبقى بعد إعادة التشغيل.

  • القيدالحل
    STRING_RESULT يقوم بـ length++ قبل فحص إعادة التخصيصالحمولة بحجم N−1 بايت بحيث N−1+1 = N يطابق الطول المخزَّن ← لا إعادة تخصيص على المؤشر المُفسد
    قفزة 2 بحجم 126 بايت تُفسد حقول THD بعد Security_contextضبط entry_a→length = 9 في القفزة 1 بحيث تكتب القفزة 2 فقط 8 بايت (master_access) + 1 NUL
    إزاحة master_access في Security_context1712 بايت من قاعدة البنية (priv_user[384] + proxy_user[645] + priv_host[256] + priv_role[384] + حشو + مؤشرات)
    استرداد الانهيار في Aria يتراجع عن الكتابات غير الملتزمةGRANT ALL + SLEEP لمدة 10 ثوانٍ يسمح بنقطة تفتيش Aria قبل انهيار تنظيف الجلسة
    تخطيط الكومة يختلف بين الاتصالات (حتى مع ASLR=0)فحص مضمّن لكل محاولة عبر /proc/1/mem يكتشف entry_a و master_access لكل اتصال
    plugin_dir مملوك للجذرDockerfile يضبط مسبقًا chmod 777 (تسهيل مختبرى)
    الملفالوصف
    exploit.pyاستغلال من مرحلتين: تصعيد امتيازات (SQL عبر TCP) + UDF RCE
    raptor_udf.cكود مصدر UDF — sys_exec() يستدعي system()
    Dockerfileصورة حاوية المختبر (تجميع UDF، فتح plugin_dir)
    init.sqlإنشاء مستخدم lowpriv
    setup.shبناء وتشغيل المختبر
    screenshots/لقطات شاشة الطرفية