
phpMyAdmin 5.2.3 — высокий — удалённый — SQLi — остаточный запрос central columns pmadb
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
Класс: SQLi Доступ: Удалённый
phpMyAdmin 5.2.3 (тег RELEASE_5_2_3, коммит 962857e). Central columns записывает col_extra, конкатенируя POST-параметры extra и attribute в SQL-литерал в одинарных кавычках через соединение control-user. Соседние поля проходят через escapeString. Эти два — нет.
Аутентифицированный пользователь отправляет POST на index.php?route=/database/central-columns с multi_edit_central_column_save=1 и кавычкой в field_attribute (или col_extra). Затем getInsertQuery / updateOneColumn выполняют эту строку от имени control-пользователя pma к pma__central_columns. Эта учётная запись — пользователь хранилища конфигурации, а не залогиненный SQL-пользователь.
CVE-2016-5703 — это имя базы данных в central columns. Эти поля extra и attribute не были той уязвимостью.
| ID | CVE пока нет |
| Класс | SQLi (control-user на pma__central_columns) |
| Доступ | Удалённый (аутентифицированный вход по cookie; pmadb central columns включён) |
| CWE | CWE-89 |
| CVSS | High: 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 (962857e) |
| Аутентификация | Аутентифицированный вход по cookie. pmadb central columns включён. |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1:19210 |
Аутентифицированный пользователь phpMyAdmin, имеющий доступ к Central columns, может внедрить SQL от имени control-пользователя в pma__central_columns.
| Привилегия | Метод / путь | Доказано в лаборатории или предположено |
|---|---|---|
| Сломать строку INSERT/UPDATE control-пользователя (целостность SQL pmadb) | POST index.php?route=/database/central-columns multi_edit_central_column_save=1 с кавычкой в field_attribute / col_extra | Доказано в лаборатории. JSON-ошибка #1064. Свидетель PMA-PMADB-CENTRAL-SQLI-WITNESS в ошибке control-пользователя |
| Оставить соседние поля в in-band | Тот же POST, кавычка в field_name | Доказано в лаборатории. Строка сохраняется как neg'col. escapeString сработал |
| Читать или перезаписывать строки central-column других пользователей | Тот же sink, как только строка закрыта | Предположено. Лаборатория останавливается на синтаксической ошибке; нет stacked query |
| Дополнительные выражения от имени control-пользователя | Тот же sink, если соединение control mysqli допускает multi-query | Предположено. По умолчанию mysqli::query — одиночное выражение. Здесь не включено |
Добраться до других таблиц pmadb (bookmarks, history, pma__userconfig) | Только если возможны stacked queries или запись в стиле INTO | Предположено. Control-пользователь в этой лаборатории имеет только DML на phpmyadmin.* |
Закрыто в этой лаборатории: неаутентифицированный доступ, SQL-пользователь залогиненного appuser (только appdb), OS shell и stacked queries. Функция не работает, если pmadb / central columns выключены (это FAIL, а не эта уязвимость).
Восемь параллельных поисков по исходникам RELEASE_5_2_3. Соседние поля в CentralColumns.php проходят через escapeString. Extra и attribute объединяются через implode в литерал в одинарных кавычках. CVE-2016-5703 — это имя базы данных, а не эти столбцы.
Ошибочные пути: считать кавычку в field_name этой уязвимостью (она сохраняется как neg'col; это негативный результат); ожидать, что general log покажет неэкранированный свидетель (INSERT падает с #1064 до успешной записи); считать выключенный pmadb этой уязвимостью (функция не работает).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
или
cd lab
./run.sh
Только loopback: http://127.0.0.1:19210. Образы phpmyadmin:5.2.3 и mysql:8.0. Compose-проект phpmyadmin-pmadb-central-sqli. Свидетель PMA-PMADB-CENTRAL-SQLI-WITNESS.
SUCCESS phpmyadmin-pmadb-central-sqli how=live insert-syntax=yes field-name-escaped=yes general-log-unescaped=false error-has-witness=true PMA-PMADB-CENTRAL-SQLI-WITNESS
escapeString / quoteString(..., CONNECT_CONTROL) для extra и attribute. Allowlist auto_increment, UNSIGNED, BINARY, UNSIGNED ZEROFILL и on update CURRENT_TIMESTAMP. quoteString в phpMyAdmin 6.x для JSON-блоба designer — это исправленная форма для этого класса конкатенации в pmadb.
962857e)libraries/classes/Database/CentralColumns.php getInsertQuery / updateOneColumnControllers/Database/CentralColumnsController.php POST multi_edit_central_column_saveGET|POST /database/central-columnsGNU Affero GPL v3.0. См. LICENSE. Только loopback-лаборатория. Без гарантий.