
phpMyAdmin 5.2.3 - Alta - Remota - SQLi - consulta residual de columnas centrales de pmadb
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
Clase: SQLi Alcance: Remoto
phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). Las columnas centrales escriben col_extra concatenando los POST extra y attribute en un literal SQL entre comillas simples sobre el enlace del usuario de control. Los campos vecinos pasan por escapeString. Estos dos no.
Un usuario autenticado envía por POST index.php?route=/database/central-columns con multi_edit_central_column_save=1 y una comilla en field_attribute (o col_extra). getInsertQuery / updateOneColumn ejecutan entonces esa cadena como el usuario de control de pma contra pma__central_columns. Esa cuenta es el usuario de almacenamiento de configuración, no la caja SQL con sesión iniciada.
CVE-2016-5703 era el nombre de la base de datos en las columnas centrales. Estos campos extra y attribute no eran ese bug.
| ID | sin CVE todavía |
| Clase | SQLi (usuario de control sobre pma__central_columns) |
| Alcance | Remoto (login autenticado por cookie; columnas centrales de pmadb habilitadas) |
| CWE | CWE-89 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Producto | phpMyAdmin |
| Afectado | 5.2.3 tag RELEASE_5_2_3 (962857e) |
| Auth | Login autenticado por cookie. Columnas centrales de pmadb habilitadas. |
| Licencia | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1:19210 |
Un usuario de phpMyAdmin con sesión iniciada que pueda abrir Columnas centrales puede inyectar SQL como el usuario de control sobre pma__central_columns.
| Privilegio | Método / ruta | Probado en lab o inferido |
|---|---|---|
| Romper la cadena INSERT/UPDATE del usuario de control (integridad del SQL de pmadb) | POST index.php?route=/database/central-columns multi_edit_central_column_save=1 con una comilla en field_attribute / col_extra | Probado en lab. Error JSON #1064. Testigo PMA-PMADB-CENTRAL-SQLI-WITNESS en el error del usuario de control |
| Mantener los campos vecinos in-band | Mismo POST, comilla en field_name | Probado en lab. Fila almacenada como neg'col. escapeString aguantó |
| Leer o sobrescribir filas de columnas centrales de otros usuarios | Mismo sink, una vez cerrada la cadena | Inferido. El lab se detiene en el error de sintaxis; sin consulta apilada |
| Sentencias adicionales como el usuario de control | Mismo sink si el enlace mysqli de control permite multi-query | Inferido. Por defecto mysqli::query es de una sola sentencia. No habilitado aquí |
Alcanzar otras tablas de pmadb (bookmarks, history, pma__userconfig) | Solo si son posibles consultas apiladas o una escritura tipo INTO | Inferido. El usuario de control en este lab solo tiene DML sobre phpmyadmin.* |
Cerrado en este lab: acceso no autenticado, la caja SQL del appuser con sesión iniciada (solo appdb), shell del SO y consultas apiladas. La funcionalidad no hace nada si pmadb / columnas centrales está desactivado (eso es un FAIL, no este remanente).
Ocho búsquedas paralelas en el código fuente de RELEASE_5_2_3. Los campos vecinos en CentralColumns.php pasan por escapeString. Extra y attribute se implode en un literal entre comillas simples. CVE-2016-5703 era el nombre de la base de datos, no estas columnas.
Caminos equivocados: tratar una comilla en field_name como el remanente (se almacena como neg'col; ese es el negativo); esperar que el log general muestre el testigo sin escapar (el INSERT muere con #1064 antes de una escritura exitosa); tratar pmadb-off como este remanente (la funcionalidad no hace nada).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
o
cd lab
./run.sh
Solo loopback: http://127.0.0.1:19210. Imágenes phpmyadmin:5.2.3 y mysql:8.0. Proyecto de Compose phpmyadmin-pmadb-central-sqli. Testigo 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) sobre extra y attribute. Lista blanca de auto_increment, UNSIGNED, BINARY, UNSIGNED ZEROFILL y on update CURRENT_TIMESTAMP. El quoteString de phpMyAdmin 6.x sobre el blob JSON del diseñador es la forma parcheada para esta clase de concatenación en 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. Ver LICENSE. Solo lab en loopback. Sin garantía.