
phpMyAdmin 5.2.3 - High - Remote - leftover - isSuperUser チェックがスキップされる
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-issuperuser
クラス: 権限の残存 到達範囲: リモート
phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin
DatabaseInterface::isSuperUser() は SUPER / SYSTEM_USER のチェックではない。これは SELECT 1 FROM mysql.user LIMIT 1 である。mysql.user を読み取れるアカウントは、そのセッションの残りの間スーパーユーザーとしてキャッシュされる。$cfg['AllowUserDropDatabase'] のデフォルトは false である。DestroyController、SqlController、ImportController、およびデータベースページはすべて、このフラグを迂回して isSuperUser のショートカットを利用する。
これは phpMyAdmin のポリシーバイパスであり、新しい MySQL 権限ではない。mysql.user への SELECT と DROP、そして SUPER なしで、PMA 経由で Drop するのに十分である。
| ID | CVE 未割り当て |
| クラス | 権限の残存 |
| 到達範囲 | リモート (MySQL アカウントとしての認証済み Cookie ログイン) |
| CWE | CWE-863 |
| CVSS | Medium: 6.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L |
| 製品 | phpMyAdmin |
| 影響を受けるバージョン | 5.2.3 タグ RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76) |
| 認証 | MySQL アカウントとしての認証済み Cookie ログイン |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ |
mysql.user を読み取れる (典型的なバックアップ/監視用の SELECT) サインイン済み MySQL アカウントが、SUPER なしで DROP を持つ場合、phpMyAdmin のスーパーユーザーとして扱われる。
| 権限 | メソッド / シンク | 偵察 / 完全性 / 可用性 | ラボで実証済みか推測か |
|---|---|---|---|
$cfg['AllowUserDropDatabase']=false をバイパスし、データベースページに Drop を表示する | GET index.php?route=/server/databases | Drop UI の偵察 | ラボで実証済み。bulkActionDropButton / selected_dbs[] が selectuser に存在し、plaindrop には存在しない |
| PMA の destroy ハンドラー経由でデータベースを Drop する | POST index.php?route=/server/databases/destroy selected_dbs[]=dropme ajax_request=true | そのデータベースの完全性 / 可用性 | ラボで実証済み。JSON success:true、「1 database has been dropped successfully.」dropme が消える |
SQL ボックスから DROP DATABASE を実行する | POST index.php?route=/sql sql_query=DROP DATABASE \dropme_sql`` | そのデータベースの完全性 / 可用性 | ラボで実証済み。データベースが消える。ネガティブアカウントは「DROP DATABASE statements are disabled.」を受け取る |
isSuperUser() でゲートされた他の PMA 画面をアンロックする | 権限、レプリケーション、ステータス、ユーザーグループ、エンジン、binlog、変数 | それらの画面の偵察 / 完全性 | 呼び出し箇所からの推測。検証はしていない |
mysql.user を読み取る | PMA が SUPER のオラクルとして使用する MySQL SELECT | PMA が SUPER と誤認するカタログの偵察 | ラボで実証済み。そのグラントこそが、残存が SUPER と誤認するものである |
このラボで除外されたもの: 実際の MySQL SUPER (SHOW GRANTS は USAGE + テーブル DROP + mysql.user への SELECT のまま)。FILE、GRANT OPTION、shutdown、および ALL PRIVILEGES は付与されていない。DROP を持つが mysql.user への SELECT を持たないアカウントは、依然として PMA 経由で drop できない。これは新しい MySQL 権限ではなく、RCE でもない。
同じピン: WebAuthn CustomServer leftover。
phpMyAdmin RELEASE_5_2_3 をピン留めした。SUPER のように語る権限ゲートは SUPER のように見えるべきである。これはカタログ SELECT のように見える:
$result = $this->tryQuery('SELECT 1 FROM mysql.user LIMIT 1');
$isSuperUser = false;
if ($result) {
$isSuperUser = (bool) $result->numRows();
}
SessionCache::set('is_superuser', $isSuperUser);
AllowUserDropDatabase (デフォルト false) 周辺でこのフラグを利用するゲート:
Controllers/Server/DatabasesController.php is_drop_allowedControllers/Server/Databases/DestroyController.php (AJAX destroy)Controllers/Sql/SqlController.php / Sql::hasNoRightsToDropDatabaseControllers/Import/ImportController.phpControllers/Database/OperationsController.phpすでに記録済みの誤った方向性: 実際の MySQL SUPER を主張すること。DROP のみのアカウントをバグとして扱うこと (そのアカウントはネガティブコントロールである)。これを RCE に誇張すること。リバースシェル。茶番である。
python3 phpmyadmin-issuperuser-Abraxas-Labs.py
# or: cd lab && ./run.sh
ターゲットは http://127.0.0.1:19270 のみ。イメージは phpmyadmin:5.2.3 と mysql:8.0。Compose プロジェクトは phpmyadmin-issuperuser。$cfg['AllowUserDropDatabase']=false。スタックは実行後に破棄される。
selectuser は mysql.user への SELECT と dropme / dropme_sql への DROP を持ち、SUPER はない。plaindrop は nodropme のみへの DROP を持つ。データベースページは selectuser に対して Drop を描画する。POST /server/databases/destroy は dropme を drop する。DROP DATABASE dropme_sql を伴う POST /sql も実行される。plaindrop は依然として destroy から Error JSON を、/sql から「DROP DATABASE statements are disabled」を受け取った。
SUCCESS phpmyadmin-issuperuser drop-ui=yes destroy=ok sql-drop=ok grants-no-super=yes mysql.user-select=yes neg-drop-ui=no neg-destroy=denied PMA-ISSUPERUSER-WITNESS
INFORMATION_SCHEMA または SHOW GRANTS を介して実際の SUPER / SYSTEM_USER をテストする。そのカタログを実際に必要とする UI のために、別個の「mysql.user を読み取れる」フラグを保持する。カタログ SELECT をスーパーユーザーとしてキャッシュしない。
962857e4f63d42e38f11ff4d63f5e722018add76)libraries/classes/DatabaseInterface.php isSuperUser()GNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。