
phpMyAdmin 5.2.3 - Alta - Remota - SQLi - colunas centrais pmadb consulta residual
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
Classe: SQLi Alcance: Remoto
phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). As colunas centrais gravam col_extra concatenando o POST extra e attribute em um literal SQL entre aspas simples no link do usuário de controle. Os campos vizinhos passam por escapeString. Esses dois não.
Um usuário autenticado envia via POST index.php?route=/database/central-columns com multi_edit_central_column_save=1 e uma aspa em field_attribute (ou col_extra). getInsertQuery / updateOneColumn então executam essa string como o usuário de controle do pma contra pma__central_columns. Essa conta é o usuário de armazenamento de configuração, não o SQL box autenticado.
CVE-2016-5703 era o nome do banco de dados nas colunas centrais. Esses campos extra e attribute não eram aquele bug.
| ID | sem CVE ainda |
| Classe | SQLi (usuário de controle em pma__central_columns) |
| Alcance | Remoto (login autenticado por cookie; pmadb central columns habilitado) |
| 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 |
| Produto | phpMyAdmin |
| Afetado | 5.2.3 tag RELEASE_5_2_3 (962857e) |
| Autenticação | Login autenticado por cookie. pmadb central columns habilitado. |
| Licença | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1:19210 apenas |
Um usuário autenticado do phpMyAdmin que consegue abrir Central columns pode injetar SQL como o usuário de controle em pma__central_columns.
| Privilégio | Método / caminho | Comprovado em lab ou inferido |
|---|---|---|
| Quebrar a string INSERT/UPDATE do usuário de controle (integridade do SQL do pmadb) | POST index.php?route=/database/central-columns multi_edit_central_column_save=1 com uma aspa em field_attribute / col_extra | Comprovado em lab. Erro JSON #1064. Witness PMA-PMADB-CENTRAL-SQLI-WITNESS no erro do usuário de controle |
| Manter campos vizinhos in-band | Mesmo POST, aspa em field_name | Comprovado em lab. Linha armazenada como neg'col. escapeString resistiu |
| Ler ou sobrescrever linhas de colunas centrais de outros usuários | Mesmo sink, uma vez que a string seja fechada | Inferido. O lab para no erro de sintaxe; sem query empilhada |
| Statements extras como o usuário de controle | Mesmo sink se o link mysqli de controle permitir multi-query | Inferido. O padrão de mysqli::query é single-statement. Não habilitado aqui |
Alcançar outras tabelas do pmadb (bookmarks, history, pma__userconfig) | Apenas se queries empilhadas ou uma escrita estilo INTO forem possíveis | Inferido. O usuário de controle neste lab tem apenas DML em phpmyadmin.* |
Fechado neste lab: acesso não autenticado, o SQL box do appuser autenticado (apenas appdb), shell do SO e queries empilhadas. O recurso não faz nada se pmadb / central columns estiver desligado (isso é um FAIL, não este leftover).
Oito buscas paralelas no código-fonte de RELEASE_5_2_3. Campos vizinhos em CentralColumns.php passam por escapeString. Extra e attribute são implode em um literal entre aspas simples. CVE-2016-5703 era o nome do banco de dados, não essas colunas.
Caminhos errados: tratar uma aspa em field_name como o leftover (ela armazena como neg'col; esse é o negativo); esperar que o general log mostrasse o witness não escapado (o INSERT morre com #1064 antes de uma escrita bem-sucedida); tratar pmadb-off como este leftover (o recurso não faz nada).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
ou
cd lab
./run.sh
Apenas loopback: http://127.0.0.1:19210. Imagens phpmyadmin:5.2.3 e mysql:8.0. Projeto Compose phpmyadmin-pmadb-central-sqli. Witness 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) em extra e attribute. Allowlist auto_increment, UNSIGNED, BINARY, UNSIGNED ZEROFILL e on update CURRENT_TIMESTAMP. O quoteString do phpMyAdmin 6.x no blob JSON do designer é a forma corrigida para essa classe de concatenação do 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. Veja LICENSE. Apenas lab em loopback. Sem garantia.