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

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Abraxas Labs - mysql-set-role-leftover

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

المقال: https://abraxaslabs.tech/research/mysql-set-role-leftover

mysql-set-role-leftover

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

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 بصلاحية UID الخاص بـ mysqld.

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

المعرّفلا يوجد CVE بعد
الفئةصلاحية متبقية (FILE بصلاحية UID الخاص بـ mysqld؛ وليس تصعيد صلاحيات على مستوى نظام التشغيل)
الوصولعن بُعد (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 يكتب بصلاحية UID الخاص بـ mysqld ضمن secure_file_priv.

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

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

كيف وجدتها

نفس عملية البحث في 26.7.0 الخاصة بالثغرات الثلاث المتبقية في العميل. كانت قائمة الثغرات الحرجة/العالية غير المنشورة للخادم الافتراضي فارغة. ولا يزال 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 بالفعل. لا ينبغي أن يحتفظ Empty 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
تنزيل الأداة