
phpMyAdmin 5.2.3 - عالي - عن بُعد - متبقٍّ - تم تخطي فحص isSuperUser
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-issuperuser
الفئة: صلاحية متبقية الوصول: عن بُعد
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
DatabaseInterface::isSuperUser() ليس فحصًا لـ SUPER / SYSTEM_USER. إنه SELECT 1 FROM mysql.user LIMIT 1. أي حساب يمكنه قراءة mysql.user يُخزَّن مؤقتًا كمستخدم خارق لبقية الجلسة. $cfg['AllowUserDropDatabase'] قيمته الافتراضية false. يأخذ DestroyController وSqlController وImportController وصفحة قواعد البيانات اختصار isSuperUser متجاوزًا بذلك هذا الإعداد.
تجاوز لسياسة phpMyAdmin، وليس صلاحية MySQL جديدة. SELECT على mysql.user مع DROP، وبدون SUPER، كافٍ للحذف عبر PMA.
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية |
| الوصول | عن بُعد (تسجيل دخول موثّق عبر الكوكيز بحساب MySQL) |
| CWE | CWE-863 |
| CVSS | متوسط: 6.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L |
| المنتج | phpMyAdmin |
| المتأثر | 5.2.3 وسم RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| المصادقة | تسجيل دخول موثّق عبر الكوكيز بحساب MySQL |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
حساب MySQL مسجَّل الدخول يمكنه قراءة mysql.user (وهو SELECT نموذجي لحسابات النسخ الاحتياطي/المراقبة) بالإضافة إلى DROP، وبدون SUPER، يُعامَل كمستخدم خارق في phpMyAdmin.
| الصلاحية | الطريقة / نقطة الوصول | الاستطلاع / السلامة / التوافر | مُثبت مختبريًا أم مُستنتج |
|---|---|---|---|
تجاوز $cfg['AllowUserDropDatabase']=false ورؤية Drop في صفحة قواعد البيانات | GET index.php?route=/server/databases | استطلاع لواجهة Drop | مُثبت مختبريًا. bulkActionDropButton / selected_dbs[] موجودة لـ selectuser؛ غائبة لـ plaindrop |
| حذف قاعدة بيانات عبر معالج destroy في PMA | POST index.php?route=/server/databases/destroy selected_dbs[]=dropme ajax_request=true | السلامة / التوافر لتلك القاعدة | مُثبت مختبريًا. JSON success:true، "1 database has been dropped successfully." اختفاء dropme |
تنفيذ DROP DATABASE من صندوق SQL | POST index.php?route=/sql sql_query=DROP DATABASE \dropme_sql`` | السلامة / التوافر لتلك القاعدة | مُثبت مختبريًا. اختفت القاعدة. الحساب السلبي يحصل على "DROP DATABASE statements are disabled." |
فتح شاشات PMA أخرى مقيّدة بـ isSuperUser() | Privileges، replication، status، user groups، engines، binlog، variables | استطلاع / سلامة لتلك الشاشات | مُستنتج من مواضع الاستدعاء. لم يُختبر |
قراءة mysql.user | SELECT في MySQL الذي يستخدمه PMA كأداة كشف SUPER | استطلاع للكتالوج الذي يخطئ PMA في اعتباره SUPER | مُثبت مختبريًا. هذا المنح هو ما تخطئ الصلاحية المتبقية في اعتباره SUPER |
مغلق في هذا المختبر: SUPER الحقيقي في MySQL (SHOW GRANTS يبقى USAGE + DROP على الجدول + SELECT على mysql.user). FILE وGRANT OPTION والإيقاف وALL PRIVILEGES غير ممنوحة. حساب يملك DROP لكن بدون SELECT على mysql.user لا يزال غير قادر على الحذف عبر PMA. هذه ليست صلاحية MySQL جديدة وليست RCE.
نفس التثبيت: WebAuthn CustomServer leftover.
ثبّتُّ phpMyAdmin RELEASE_5_2_3. بوابات الصلاحيات التي تتحدث كأنها SUPER يجب أن تبدو كـ SUPER. هذه تبدو كـ SELECT على الكتالوج:
$result = $this->tryQuery('SELECT 1 FROM mysql.user LIMIT 1');
$isSuperUser = false;
if ($result) {
$isSuperUser = (bool) $result->numRows();
}
SessionCache::set('is_superuser', $isSuperUser);
البوابات التي تأخذ هذا العلم حول AllowUserDropDatabase (الافتراضي false):
Controllers/Server/DatabasesController.php is_drop_allowedControllers/Server/Databases/DestroyController.php (AJAX destroy)Controllers/Sql/SqlController.php / Sql::hasNoRightsToDropDatabaseControllers/Import/ImportController.phpControllers/Database/OperationsController.phpالمنعطفات الخاطئة المسجلة مسبقًا: ادعاء SUPER الحقيقي في MySQL؛ اعتبار حساب DROP فقط هو الثغرة (ذلك الحساب هو الضابط السلبي)؛ تضخيم هذا إلى RCE؛ reverse shell. مسرحية.
python3 phpmyadmin-issuperuser-Abraxas-Labs.py
# or: cd lab && ./run.sh
الهدف فقط http://127.0.0.1:19270. الصورتان phpmyadmin:5.2.3 وmysql:8.0. مشروع Compose باسم phpmyadmin-issuperuser. $cfg['AllowUserDropDatabase']=false. تُفكَّك الحزمة بعد التشغيل.
selectuser يملك SELECT على mysql.user بالإضافة إلى DROP على dropme / dropme_sql، بدون SUPER. plaindrop يملك DROP على nodropme فقط. صفحة قواعد البيانات تُظهر Drop لـ selectuser. POST إلى /server/databases/destroy يحذف dropme. POST إلى /sql مع DROP DATABASE dropme_sql يعمل أيضًا. plaindrop لا يزال يحصل على JSON الخطأ من destroy وعلى "DROP DATABASE statements are disabled" من /sql.
SUCCESS phpmyadmin-issuperuser drop-ui=yes destroy=ok sql-drop=ok grants-no-super=yes mysql.user-select=yes neg-drop-ui=no neg-destroy=denied PMA-ISSUPERUSER-WITNESS
اختبر SUPER / SYSTEM_USER الحقيقي عبر INFORMATION_SCHEMA أو SHOW GRANTS. احتفظ بعلم منفصل "يمكنه قراءة mysql.user" للواجهة التي تحتاج فعلاً ذلك الكتالوج. لا تخزّن SELECT على الكتالوج كمستخدم خارق.
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/DatabaseInterface.php isSuperUser()GNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. بدون ضمان.