
phpMyAdmin 5.2.3 - 高 - リモート - SQLi - central columns pmadb クエリ残留
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · 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 を参照。ループバックラボのみ。無保証。