
phpMyAdmin 5.2.3 - Élevé - À distance - SQLi - colonnes centrales pmadb requête résiduelle
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
Classe : SQLi Portée : Distante
phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). Les colonnes centrales écrivent col_extra en concaténant les POST extra et attribute dans un littéral SQL entre guillemets simples sur la liaison de l'utilisateur de contrôle. Les champs voisins passent par escapeString. Ces deux-là non.
Un utilisateur connecté envoie en POST index.php?route=/database/central-columns avec multi_edit_central_column_save=1 et un guillemet dans field_attribute (ou col_extra). getInsertQuery / updateOneColumn exécutent alors cette chaîne en tant qu'utilisateur de contrôle pma contre pma__central_columns. Ce compte est l'utilisateur de stockage de configuration, pas la boîte SQL connectée.
CVE-2016-5703 concernait le nom de la base de données dans les colonnes centrales. Ces champs extra et attribute n'étaient pas ce bug.
| ID | pas encore de CVE |
| Classe | SQLi (utilisateur de contrôle sur pma__central_columns) |
| Portée | Distante (connexion authentifiée par cookie ; colonnes centrales pmadb activées) |
| CWE | CWE-89 |
| CVSS | Élevé : 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Produit | phpMyAdmin |
| Affecté | 5.2.3 tag RELEASE_5_2_3 (962857e) |
| Auth | Connexion authentifiée par cookie. Colonnes centrales pmadb activées. |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1:19210 uniquement |
Un utilisateur phpMyAdmin connecté qui peut ouvrir les colonnes centrales peut injecter du SQL en tant qu'utilisateur de contrôle sur pma__central_columns.
| Privilège | Méthode / chemin | Prouvé en lab ou déduit |
|---|---|---|
| Casser la chaîne INSERT/UPDATE de l'utilisateur de contrôle (intégrité du SQL pmadb) | POST index.php?route=/database/central-columns multi_edit_central_column_save=1 avec un guillemet dans field_attribute / col_extra | Prouvé en lab. Erreur JSON #1064. Témoin PMA-PMADB-CENTRAL-SQLI-WITNESS dans l'erreur de l'utilisateur de contrôle |
| Garder les champs voisins in-band | Même POST, guillemet dans field_name | Prouvé en lab. Ligne stockée comme neg'col. escapeString a tenu |
| Lire ou écraser les lignes de colonnes centrales d'autres utilisateurs | Même sink, une fois la chaîne fermée | Déduit. Le lab s'arrête à l'erreur de syntaxe ; pas de requête empilée |
| Requêtes supplémentaires en tant qu'utilisateur de contrôle | Même sink si la liaison mysqli de contrôle autorise les multi-requêtes | Déduit. Par défaut mysqli::query est mono-requête. Non activé ici |
Atteindre d'autres tables pmadb (bookmarks, history, pma__userconfig) | Uniquement si des requêtes empilées ou une écriture de type INTO sont possibles | Déduit. L'utilisateur de contrôle dans ce lab n'a que du DML sur phpmyadmin.* |
Fermé sur ce lab : accès non authentifié, la boîte SQL appuser connectée (appdb uniquement), shell OS, et requêtes empilées. La fonctionnalité est sans effet si pmadb / colonnes centrales est désactivé (c'est un FAIL, pas ce reliquat).
Huit recherches parallèles dans le code source de RELEASE_5_2_3. Les champs voisins dans CentralColumns.php sont passés par escapeString. Extra et attribute sont implode dans un littéral entre guillemets simples. CVE-2016-5703 concernait le nom de la base de données, pas ces colonnes.
Fausses pistes : traiter un guillemet dans field_name comme le reliquat (il est stocké comme neg'col ; c'est le négatif) ; s'attendre à ce que le journal général montre le témoin non échappé (l'INSERT meurt avec #1064 avant une écriture réussie) ; traiter pmadb-off comme ce reliquat (la fonctionnalité est sans effet).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
ou
cd lab
./run.sh
Loopback uniquement : http://127.0.0.1:19210. Images phpmyadmin:5.2.3 et mysql:8.0. Projet Compose phpmyadmin-pmadb-central-sqli. Témoin 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) sur extra et attribute. Liste blanche auto_increment, UNSIGNED, BINARY, UNSIGNED ZEROFILL, et on update CURRENT_TIMESTAMP. Le quoteString de phpMyAdmin 6.x sur le blob JSON du designer est la forme corrigée pour cette classe de concaténation 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. Voir LICENSE. Lab en loopback uniquement. Aucune garantie.