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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
mysql-set-role-leftover — MySQL Community Server 26.7.0 - عالي - SET ROLE ALL EXCEPT leftover FILE - كتابة mysqld UID | Kitploit
أدوات/GitHubGitHub/abraxas/mysql-set-role-leftover
المصادقة والترخيصتصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالاختبار الاختراقأمن قواعد البياناتمختبرات وتدريب عملي
GitHubabraxas/mysql-set-role-leftover

mysql-set-role-leftover

MySQL Community Server 26.7.0 - عالي - SET ROLE ALL EXCEPT leftover FILE - كتابة mysqld UID

عرض المستودع
28منذ 9 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

Abraxas Labs - mysql-set-role-leftover

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  mysql-set-role-leftover

mysql-set-role-leftover

الفئة: صلاحية متبقية (FILE بهوية mysqld UID؛ ليس تصعيد صلاحيات على مستوى نظام التشغيل) الوصول: عن بُعد

MySQL Community Server mysqld 26.7.0 (06a5c1c) - Oracle

SET ROLE ALL EXCEPT rfile (أو SET ROLE DEFAULT بدون أدوار افتراضية) يمسح قائمة الأدوار النشطة، ثم يعود checkout_access_maps() دون تنفيذ set_master_access(user->access). تكون CURRENT_ROLE() هي NONE. تبقى البتات العامة الثابتة التي جمعها الدور (FILE، PROCESS، SUPER، ...) في m_master_access. يقرأ check_access تلك القيمة المتبقية. المختبر: FILE المتبقي يكتب INTO OUTFILE بهوية mysqld UID.

SET ROLE NONE هو المسار الذي يعيد ACL_USER::access. تُسقَط الصلاحيات الديناميكية (SYSTEM_USER). المتبقي على مستوى قاعدة البيانات مُغلق بالفعل (Bug#35386565). الحسابات الافتراضية ليس لها أدوار.

المعرّفلا يوجد CVE بعد
الفئةصلاحية متبقية (FILE بهوية mysqld UID؛ ليس تصعيد صلاحيات على مستوى نظام التشغيل)
الوصولعن بُعد (SQL موثّق)
CWECWE-269
CVSSمرتفع: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
المنتجMySQL Community Server mysqld
المتأثر26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
المصادقةموثّق؛ يُمنح الضحية دورًا يحمل صلاحيات ACL عامة ثابتة (FILE في المختبر)
الترخيصGNU Affero GPL v3.0
المختبر127.0.0.1 فقط. ملف إثبات. كتابة FILE متبقية.

ما يمكن للمهاجم فعله

امتلاك حساب مُنح دورًا يحمل FILE (أو بتًا عامًا ثابتًا آخر). نفّذ SET ROLE لذلك الدور، ثم SET ROLE ALL EXCEPT له. تُبلّغ CURRENT_ROLE() بالقيمة NONE. ومع ذلك، لا يزال SELECT 'witness' INTO OUTFILE يكتب بهوية mysqld UID ضمن secure_file_priv.

التطبيق الذي يعزل باستخدام SET ROLE ALL EXCEPT dangerous_role أو SET ROLE DEFAULT ثم يثق بـ CURRENT_ROLE() لا يزال يمتلك تلك البتات الثابتة. أما SET ROLE NONE فيُسقطها فعليًا.

لا يمنح المتبقي صلاحية FILE لحساب لم يحصل عليها أبدًا عبر دور. إنه يفشل في إسقاط FILE بعد إلغاء التنشيط.

كيف وجدته

نفس عملية البحث في 26.7.0 كالمتبقيات الثلاث في العميل. كان المنشور غير المنشور للخادم الافتراضي من فئة Crit/High فارغًا. لا تزال ACL / الأدوار تحتوي على هذا الإرجاع المبكر للدور الفارغ.

void Security_context::checkout_access_maps(void) {
  if (m_acl_map != nullptr) {
    get_global_acl_cache()->return_acl_map(m_acl_map);
    m_acl_map = nullptr;
  }
  if (m_active_roles.size() == 0) return;
  // ...
}

يستدعي activate_role_all (ALL EXCEPT) وactivate_role_default الفارغ ذلك الـ checkout. ثم يقوم activate_role_none بتنفيذ set_master_access(user->access).

منعطف خاطئ مُسجَّل مسبقًا: أول SELECT note FROM lab.t INTO OUTFILE متبقٍ أعاد 1142 (ذاكرة db_acl() = 0). الثابت SELECT 'witness' INTO OUTFILE هو أداة كشف FILE.

المختبر

cd lab
./run.sh

الصورة mysql:26.7.0. منشورة على 127.0.0.1:18630. الدور rfile يمتلك FILE. الضحية لديها GRANT SELECT ON lab.* وGRANT rfile، file_priv=N، بدون دور افتراضي. تسجيل الدخول outfile 1227. SET ROLE rfile outfile ناجح. SET ROLE ALL EXCEPT rfile يجعل CURRENT_ROLE() NONE؛ المتبقي outfile يكتب /var/lib/mysql-files/MYSQL-SET-ROLE-LEFTOVER-WITNESS. SET ROLE NONE يعيد 1227 مرة أخرى.

SUCCESS mysql-set-role-leftover before-file=denied with-role=yes leftover-role=NONE leftover-file=yes after-none=denied dump=26.7.0 image=mysql:26.7.0 MYSQL-SET-ROLE-LEFTOVER-WITNESS

الإصلاح

عندما تكون m_active_roles فارغة، ينبغي لـ checkout_access_maps() تنفيذ set_master_access(user->access) بالطريقة التي يفعلها SET ROLE NONE بالفعل. لا ينبغي لـ ALL EXCEPT / DEFAULT الفارغ الاحتفاظ بالخريطة المجمّعة السابقة.

المراجع

  • github.com/mysql/mysql-server وسم mysql-26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • sql/auth/sql_security_ctx.cc checkout_access_maps
  • sql/auth/roles.cc activate_role_all / activate_role_none
  • حزم شقيقة: abraxas/mysql-mysqldump-show-tables-overflow · abraxas/mysql-mysqldump-tab-path · abraxas/mysql-mysqlbinlog-raw-path
تنزيل الأداة