
phpMyAdmin 5.2.3 - 高 - リモート - SQLi - central columns pmadb クエリ残留
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
解説記事: https://abraxaslabs.tech/research/phpmyadmin-pmadb-central-sqli
クラス: SQLi 到達範囲: リモート
phpMyAdmin 5.2.3(タグ RELEASE_5_2_3、コミット 962857e)。Central columns は、制御ユーザー接続上で POST の extra と attribute を連結して単一引用符で囲んだ SQL リテラルとして col_extra を書き込みます。隣接するフィールドは escapeString を経由しますが、この2つは経由しません。
サインイン済みのユーザーが index.php?route=/database/central-columns に multi_edit_central_column_save=1 と、field_attribute(または col_extra)内の引用符を付けて POST します。すると getInsertQuery / updateOneColumn がその文字列を pma 制御ユーザーとして pma__central_columns に対して実行します。このアカウントは設定ストレージ用のユーザーであり、ログイン中の SQL ボックスではありません。
CVE-2016-5703 は central columns におけるデータベース名でした。これらの extra および attribute フィールドはそのバグではありません。
| ID | CVE 未割当 |
| クラス | SQLi(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 のみ |
Central columns を開けるサインイン済みの phpMyAdmin ユーザーは、pma__central_columns に対して制御ユーザーとして SQL を注入できます。
| 権限 | メソッド / パス | ラボで実証済みか推測か |
|---|---|---|
| 制御ユーザーの INSERT/UPDATE 文字列を破壊する(pmadb SQL の整合性) | POST index.php?route=/database/central-columns に multi_edit_central_column_save=1、field_attribute / col_extra に引用符 | ラボで実証済み。#1064 の JSON エラー。制御ユーザーのエラー内に証拠 PMA-PMADB-CENTRAL-SQLI-WITNESS |
| 隣接フィールドをイン・バンドに保つ | 同じ POST で field_name に引用符 | ラボで実証済み。行は neg'col として保存。escapeString が機能 |
| 他ユーザーの central-column 行を読み取る、または上書きする | 同じシンク、文字列を閉じた後 | 推測。ラボは構文エラーで停止。スタッククエリなし |
| 制御ユーザーとして追加のステートメントを実行する | 制御側の mysqli リンクがマルチクエリを許可する場合、同じシンク | 推測。デフォルトの mysqli::query は単一ステートメント。ここでは有効化されていない |
他の pmadb テーブル(bookmarks、history、pma__userconfig)に到達する | スタッククエリまたは INTO 形式の書き込みが可能な場合のみ | 推測。このラボの制御ユーザーは phpmyadmin.* の DML のみを持つ |
このラボで塞がれているもの: 未認証アクセス、サインイン済み appuser の SQL ボックス(appdb のみ)、OS シェル、スタッククエリ。pmadb / central columns が無効な場合、機能はノーオペレーションになります(これは FAIL であり、この残存脆弱性ではありません)。
RELEASE_5_2_3 を対象に8つの並行ソース調査を実施。CentralColumns.php 内の隣接フィールドは escapeString されています。extra と attribute は単一引用符リテラルへ implode されています。CVE-2016-5703 はデータベース名であり、これらのカラムではありません。
誤った方向性: field_name 内の引用符を残存脆弱性とみなすこと(neg'col として保存される。これがネガティブ結果);一般ログにエスケープされていない証拠が表示されると期待すること(INSERT は成功書き込みの前に #1064 で失敗する);pmadb 無効をこの残存脆弱性とみなすこと(機能はノーオペレーション)。
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
または
cd lab
./run.sh
ループバックのみ: 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
extra と attribute に対して escapeString / quoteString(..., CONNECT_CONTROL) を適用。auto_increment、UNSIGNED、BINARY、UNSIGNED ZEROFILL、on update CURRENT_TIMESTAMP を許可リストに追加。phpMyAdmin 6.x の designer JSON blob に対する quoteString が、この種の 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 を参照してください。ループバックラボ専用。保証はありません。