phpMyAdmin 5.2.3 — высокий — удалённый — SQLi — идентификатор плагина аутентификации без кавычек
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-auth-plugin-unquoted
Класс: SQLi Доступ: Удалённый
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
Смена пароля включена по умолчанию. UserPassword.php копирует POST-параметр authentication_plugin в ALTER USER ... IDENTIFIED WITH без белого списка и без экранирования. Имя пользователя, хост и пароль в том же выражении проходят через escapeString. В MySQL 8 предложение WITH добавляется, когда отправленный плагин отличается от текущего.
Аутентифицированный пользователь phpMyAdmin внедряет SQL в свой собственный ALTER USER через форму смены пароля. Дополнительный SQL в поле плагина — это SQL, а не имя плагина.
| ID | CVE пока нет |
| Класс | SQLi |
| Доступ | Удалённый (аутентификация по cookie; смена пароля включена) |
| 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) |
| Аутентификация | аутентификация по cookie. $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 | Целостность пользовательского соединения | Доказано в лаборатории. General log сохранил плагин sha256_password и отбросил комментарий. 1227, потому что у этого пользователя нет CREATE USER |
| Дополнительные предложения или дополнительные учётные записи, если сработает выход за пределы | Та же точка сброса; составные запросы зависят от драйвера | Целостность других учётных записей | Предполагается. В этой лаборатории не выполняется второй запрос и не создаётся другая учётная запись |
| Та же конкатенация при добавлении/редактировании пользователя | Privileges.php IDENTIFIED WITH / MariaDB VIA | Целостность выражений, строящихся grantor | Предполагаемый родственный случай. POST в лаборатории только для смены пароля |
Закрыто на этом пути: неаутентифицированное использование (требуется вход по cookie), config-auth (смена пароля скрыта), RCE, успешная смена плагина без GRANT на MySQL 8 (1227 без CREATE USER). Имя пользователя, хост и пароль остаются экранированными. Для собственного пароля GRANT не нужен; остаток — это неэкранированное поле плагина, а не свободная подмена плагина.
Тот же пин: WebAuthn CustomServer leftover.
Я зафиксировал 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, если плагин не изменился. Отправьте другое имя, и предложение вернётся.
Уже зафиксированные неверные повороты: трактовка MySQL 1227 как провала остатка (это доказательство того, что дополнительный SQL разобран); заявление о смене плагина без GRANT на MySQL 8; трактовка config-auth как входящей в область; обратная оболочка. Театр.
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. Стек разбирается после запуска.
Вход по cookie как 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 '***'. General log 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. Без гарантий.