
phpMyAdmin 5.2.3 – Hoch – Remote – SQLi – central columns pmadb query leftover
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
Klasse: SQLi Reichweite: Remote
phpMyAdmin 5.2.3 (Tag RELEASE_5_2_3, Commit 962857e). Central columns schreibt col_extra, indem POST extra und attribute zu einem einfach-quotierten SQL-Literal auf dem Control-User-Link verkettet werden. Benachbarte Felder durchlaufen escapeString. Diese beiden nicht.
Ein angemeldeter Benutzer sendet per POST index.php?route=/database/central-columns mit multi_edit_central_column_save=1 und einem Anführungszeichen in field_attribute (oder col_extra). getInsertQuery / updateOneColumn führen diesen String dann als pma-Control-User gegen pma__central_columns aus. Dieses Konto ist der Konfigurationsspeicher-Benutzer, nicht die angemeldete SQL-Box.
CVE-2016-5703 war der Datenbankname in central columns. Diese extra- und attribute-Felder waren nicht dieser Bug.
| ID | noch keine CVE |
| Klasse | SQLi (Control-User auf pma__central_columns) |
| Reichweite | Remote (authentifizierter Cookie-Login; pmadb central columns aktiviert) |
| 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 |
| Produkt | phpMyAdmin |
| Betroffen | 5.2.3 Tag RELEASE_5_2_3 (962857e) |
| Auth | Authentifizierter Cookie-Login. pmadb central columns aktiviert. |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1:19210 |
Ein angemeldeter phpMyAdmin-Benutzer, der Central columns öffnen kann, kann SQL als Control-User auf pma__central_columns injizieren.
| Privileg | Methode / Pfad | Im Lab bewiesen oder abgeleitet |
|---|---|---|
| Den Control-User-INSERT/UPDATE-String brechen (Integrität des pmadb-SQL) | POST index.php?route=/database/central-columns multi_edit_central_column_save=1 mit einem Anführungszeichen in field_attribute / col_extra | Im Lab bewiesen. #1064 JSON-Fehler. Witness PMA-PMADB-CENTRAL-SQLI-WITNESS im Control-User-Fehler |
| Benachbarte Felder in-band halten | Derselbe POST, Anführungszeichen in field_name | Im Lab bewiesen. Zeile gespeichert als neg'col. escapeString hielt |
| Central-Column-Zeilen anderer Benutzer lesen oder überschreiben | Derselbe Sink, sobald der String geschlossen ist | Abgeleitet. Lab stoppt bei Syntaxfehler; keine gestapelte Query |
| Zusätzliche Statements als Control-User | Derselbe Sink, falls der Control-mysqli-Link Multi-Query erlaubt | Abgeleitet. Standard-mysqli::query ist Single-Statement. Hier nicht aktiviert |
Andere pmadb-Tabellen erreichen (bookmarks, history, pma__userconfig) | Nur falls gestapelte Queries oder ein INTO-artiger Write möglich ist | Abgeleitet. Control-User in diesem Lab hat nur phpmyadmin.* DML |
In diesem Lab ausgeschlossen: unauthentifizierter Zugriff, die angemeldete appuser-SQL-Box (nur appdb), OS-Shell und gestapelte Queries. Feature no-ops, wenn pmadb / central columns aus ist (das ist ein FAIL, nicht dieser Leftover).
Acht parallele Source-Hunts von RELEASE_5_2_3. Benachbarte Felder in CentralColumns.php werden escapeString'd. Extra und attribute werden per implode in ein einfach-quotiertes Literal überführt. CVE-2016-5703 war der Datenbankname, nicht diese Spalten.
Irrwege: ein Anführungszeichen in field_name als Leftover zu behandeln (es wird als neg'col gespeichert; das ist die Negativkontrolle); zu erwarten, dass das General Log den unescapten Witness zeigt (der INSERT stirbt mit #1064 vor einem erfolgreichen Write); pmadb-off als diesen Leftover zu behandeln (Feature no-ops).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
oder
cd lab
./run.sh
Nur Loopback: http://127.0.0.1:19210. Images phpmyadmin:5.2.3 und mysql:8.0. Compose-Projekt 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) auf extra und attribute. Allowlist auto_increment, UNSIGNED, BINARY, UNSIGNED ZEROFILL und on update CURRENT_TIMESTAMP. phpMyAdmin 6.x quoteString auf dem Designer-JSON-Blob ist die gepatchte Form für diese Klasse von pmadb-Concat.
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. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.