phpMyAdmin 5.2.3 - عالي - عن بُعد - SQLi - معرّف إضافة المصادقة بدون علامات اقتباس
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-auth-plugin-unquoted
التقرير: https://abraxaslabs.tech/research/phpmyadmin-auth-plugin-unquoted
الفئة: SQLi الوصول: عن بُعد
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
خيار تغيير كلمة المرور مُفعَّل افتراضيًا. ينسخ UserPassword.php قيمة authentication_plugin المرسلة عبر POST إلى ALTER USER ... IDENTIFIED WITH دون قائمة سماح ودون اقتباس. أما اسم المستخدم والمضيف وكلمة المرور في العبارة نفسها فتمر عبر escapeString. في MySQL 8 تُصدَر جملة WITH عندما تختلف الإضافة المرسلة عن الإضافة الحالية.
مستخدم phpMyAdmin مسجَّل الدخول يحقن SQL في عبارة ALTER USER الخاصة به عبر نموذج تغيير كلمة المرور. أي SQL إضافي في حقل الإضافة يُعامل كـ SQL، لا كاسم إضافة.
| المعرّف | لا يوجد CVE بعد |
| الفئة | SQLi |
| الوصول | عن بُعد (تسجيل دخول مُصادَق عبر الكوكيز؛ تغيير كلمة المرور مُفعَّل) |
| CWE | CWE-89 |
| CVSS | مرتفع: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| المنتج | phpMyAdmin |
| المتأثر | 5.2.3 الوسم RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| المصادقة | تسجيل دخول مُصادَق عبر الكوكيز. $cfg['ShowChgPassword'] افتراضيًا true. نوع المصادقة ليس config |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
يمكن لمستخدم phpMyAdmin مسجَّل الدخول أن يحقن SQL في عبارة ALTER USER الخاصة به عبر نموذج تغيير كلمة المرور.
| الصلاحية | الطريقة / نقطة الوصول | الاستطلاع / السلامة / التوافر | مُثبَت مختبريًا أو مُستنتَج |
|---|---|---|---|
إرسال SQL إضافي في IDENTIFIED WITH | POST index.php?route=/user-password مع authentication_plugin | سلامة العبارة التي يبنيها phpMyAdmin | مُثبَت مختبريًا. طلب POST خام sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ يظهر دون اقتباس في صندوق SQL |
| جعل MySQL يحلّل ذلك الـ SQL الإضافي كـ SQL | العبارة نفسها تصل إلى mysqld | سلامة اتصال المستخدم | مُثبَت مختبريًا. احتفظ السجل العام بالإضافة sha256_password وأسقط التعليق. الخطأ 1227 لأن هذا المستخدم لا يملك CREATE USER |
| جمل إضافية أو حسابات إضافية إذا نجح الخروج من السياق | نقطة الوصول نفسها؛ تعتمد الاستعلامات المتراكمة على المشغّل | سلامة الحسابات الأخرى | مُستنتَج. لا يشغّل هذا المختبر عبارة ثانية ولا ينشئ حسابًا آخر |
| نفس الدمج في إضافة/تعديل المستخدم | Privileges.php IDENTIFIED WITH / MariaDB VIA | سلامة العبارات التي يبنيها المانح | نظير مُستنتَج. طلب POST المختبري يخص تغيير كلمة المرور فقط |
مُغلق على هذا المسار: الاستخدام دون مصادقة (يلزم تسجيل دخول بالكوكيز)، مصادقة config (تغيير كلمة المرور مخفي)، RCE، نجاح تغيير الإضافة دون GRANT على MySQL 8 (الخطأ 1227 دون CREATE USER). يبقى اسم المستخدم والمضيف وكلمة المرور مُهرَّبة. كلمة المرور الخاصة لا تحتاج GRANT؛ المتبقي هو حقل الإضافة غير المُقتبَس، وليس تبديلًا حرًا للإضافة.
نفس التثبيت: بقايا WebAuthn CustomServer.
ثبّتُّ phpmyadmin/phpmyadmin على RELEASE_5_2_3. إن PMASA-2025-1/2/3 موجودة بالفعل في 5.2.2. لا يزال تغيير كلمة المرور يُبنى كالتالي:
return 'ALTER USER \'' . $dbi->escapeString($username)
. '\'@\'' . $dbi->escapeString($hostname)
. '\' IDENTIFIED WITH ' . $authPlugin . ' BY '
$authPlugin هو $_POST['authentication_plugin']. يحذف MySQL 5.7.37+ و8.0 عبارة WITH ما لم يتغيّر الملحق (plugin). أرسِل اسمًا مختلفًا عبر POST فتعود العبارة.
الأخطاء المسجّلة سلفًا: اعتبار خطأ MySQL 1227 فشلًا للمخلّفات (وهو الدليل على أن SQL الإضافية قد حُلّلت)؛ والادعاء بتغيير ملحق بدون GRANT على MySQL 8؛ واعتبار config-auth ضمن النطاق؛ وصدفة عكسية (reverse shell). مسرح.
python3 phpmyadmin-auth-plugin-unquoted-Abraxas-Labs.py
# or: cd lab && ./run.sh
استهدف فقط http://127.0.0.1:19260. الصورتان phpmyadmin:5.2.3 وmysql:8.0. مشروع Compose باسم phpmyadmin-auth-plugin-unquoted. تُفكَّك الحزمة بعد التشغيل.
تسجيل الدخول عبر ملف تعريف الارتباط باسم appuser. أرسل POST إلى /user-password مع authentication_plugin=sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/. مربع استعلام SQL في PMA: ALTER USER 'appuser'@'%' IDENTIFIED WITH sha256_password /*PMA-AUTH-PLUGIN-UNQUOTED-WITNESS*/ BY '***'. يحلّل سجل MySQL العام التعليق ويخزّن IDENTIFIED WITH 'sha256_password'. اسم المستخدم محاط بعلامات اقتباس.
SUCCESS phpmyadmin-auth-plugin-unquoted how=live unquoted=yes escaped-user=yes plugin=sha256_password PMA-AUTH-PLUGIN-UNQUOTED-WITNESS
اسمح بأسماء الإضافات من SHOW PLUGINS فقط. لا تُدرج أبدًا بيانات POST في IDENTIFIED WITH أو VIA أو plugin=.
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/UserPassword.phplibraries/classes/Server/Privileges.phpGNU Affero GPL v3.0. راجع LICENSE. للاستخدام في مختبر loopback فقط. دون أي ضمان.