
Apache Superset 6.1.0 の認可の欠陥に関する概念実証ラボ。Gamma ダッシュボード編集者が、バージョン管理されていない v0 ダッシュボードインポートを通じてデータセット SQL を仕込み、チャート更新時に実行される。
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · superset-g3-v0-import-sql-plant
通常のダッシュボードエディタ権限を持つ同僚が、他の人がすでに信頼しているチャートの中に自分のデータベースクエリを隠すことができます。次に誰かがそのチャートを開くと、クエリは会社のデータ接続に対して実行されます。その人物は、自分にアクセス権が与えられたことのないテーブルを読み取ることができます。本来これを制限するはずの「自分のSQLを実行する」追加権限は必要ありません。新しいウェアハウスのログインを登録することはできず、このチャート経路を通じてINSERTやDELETEを実行することもできません。
クラス: 権限の残存 到達範囲: リモート
Apache Superset 6.1.0 (c83fb2bb) - Apache Software Foundation
デフォルトのGammaはDashboardのcan_writeを持つため、POST /api/v1/dashboard/import/はマトリクス内です。非ZIPのJSONにはmetadata.yamlがないため、ディスパッチャはv1を試し、その後バージョンなしのv0へフォールスルーします。decode_dashboardsがSqlaTableを再構成します。import_datasetはtable_name + schema + database_id(params.database_nameから)で検索し、datasource.override(i_datasource)がexport_fieldsをコピーします。これにはsqlが含まれ、raise_for_accessもDatasetの書き込みもありません。その後POST /api/v1/chart/dataがそのSQLを、データセットの分析接続上で仮想FROMとしてコンパイルします。
sql_labなしのGamma SQL。Dataset REST PUTは403のまま。v1 ZIPは空のまま。
| ID | CVE未割当 |
| クラス | 権限の残存(CVE-2026-23982 / CVE-2024-26016の残存) |
| 到達範囲 | リモート(認証済みHTTP、デフォルトGamma) |
| CWE | CWE-863, CWE-284 |
| CVSS | High: 7.6 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L |
| 製品 | Apache Superset |
| 影響を受けるバージョン | 6.1.0 (c83fb2bb1dcfac41ac51bcebd82471f4a7180d18)、ハント時点のGitHub Latest GA |
| 認証 | デフォルトGamma(can_write Dashboard)。未認証ではない。Adminではない(スコープ外)。 |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1のみ |
Gamma(またはDashboard書き込み権限を持つ任意の)アカウントと、後でチャート化できるデータセットが必要です。条件は、JSONのparams内のdatabase_nameに含まれるDatabase上の、同じtable_name + schemaです。補完的な付与は、植え付けたSQLが指定するすべてのテーブルではなく、データセットオブジェクトに対して行われます。chart/dataのraise_for_accessはデータソースオブジェクト(datasource_access / schema / owner)に対するものです。get_from_clauseはhas_mutation()のみを拒否します。
| 権限 | 手法 / シンク | 偵察 / 整合性 / 可用性 | ラボ実証または推測 |
|---|---|---|---|
| 名前が一致するデータセットの仮想SQLを上書き | Gamma POST /api/v1/dashboard/import/ 非ZIP JSON; v0 import_dataset datasource.override が sql を含む export_fields をコピー | 整合性 (dataset.sql) | ラボ実証。インポート 200; dataset.sql = SELECT 'SUPERSET-G3-V0-IMPORT-SQL-PLANT-WITNESS' AS witness |
| そのSQLをデータセットの分析URI上で実行 | 植え込み後に POST /api/v1/chart/data; get_from_clause が保存されたsqlを TextAsFrom としてラップ | 偵察 (そのURIユーザーが読み取れる任意のテーブルをSELECT) | ラボ実証。200; コンパイル結果 FROM (SELECT 'SUPERSET-G3-V0-IMPORT-SQL-PLANT-WITNESS' AS witness) AS virtual_table |
| 他の権限付与済みユーザーが既に開いているチャートにクエリを隠す | 同じ植え込み; オーナー / 他の datasource_access プリンシパルがリフレッシュ時に実行 | 整合性 + 偵察 (他の人が植え込みを実行) | 推測。ラボのGammaは既に権限付与済みだったため自己実行 |
| 古いSQLを使用していたダッシュボードを破壊 | 物理テーブルのsqlを攻撃者のSELECTで置換 | 可用性 | 推測 |
| ネガティブ: SQL Lab実行 | POST /api/v1/sqllab/execute/ | n/a | ラボ実証。403 |
| ネガティブ: Dataset REST上書き | sql を付けた PUT /api/v1/dataset/{id} | n/a | ラボ実証。403; sqlは空のまま (CVE-2026-23982の類似) |
ネガティブ: metadata.yaml を含むv1 ZIP | 同じインポートエンドポイント、ZIPバンドル | n/a | ラボ実証。200; sqlは空のまま (CVE-2024-26016クラス) |
この残存箇所について確定した事項: 未認証インポート; 新しいDatabase URIの登録 (v0データセットインポートは接続を作成しない; params.database_name の欠落は DatabaseNotFoundError); chart/data経由のDML (has_mutation()); Gammaが読み取れないデータセットをチャート化 (403); 新規挿入された一意の table_name (PVMは作成されるがGammaにはアタッチされない)。RCEではない。Adminではない。本番ウェアハウスの分離によりSELECTはそのURIユーザーに制限される。ラボの分析URIはメタデータと同じPostgresだったため、ab_user を含むクロステーブルは推測であり、二度目のオラクル実証ではない。
Apache Superset 6.1.0 に固定した。AdminはOS相当でありスコープ外。Apache自身のロールマトリックスに対して残存箇所を探索した: Gamma、Alpha、sql_lab、埋め込みゲスト、Public。
6.0.0の波では既にchart/dataの sqlExpression (CVE-2026-23980)、Dataset REST SQL (CVE-2026-23982)、SQL Labの DO $$ / EXPLAIN ANALYZE (CVE-2026-23984) が塞がれていた。バージョン付きZIPのインポート認可はCVE-2024-26016。バージョンなしのv0は「ファイルがバージョン管理されていない」ため、依然として command_versions の最後に位置する。
Dashboard上の import_ はwriteにマップされる。非ZIP JSONは {filename: bytes} で metadata.yaml を含まない。ディスパッチャはv1を試み、IncorrectVersionError を捕捉してv0を実行する。decode_dashboards は __SqlaTable__ をライブモデルに変換する。import_dataset は検索して上書きする。export_fields は sql を含む。クエリ時には保存されたSQLが信頼済みとして扱われる: has_mutation() の後の get_from_clause。
既に記録済みの誤った道: v1 ZIPを残存箇所とみなす (sqlは空のまま); Dataset REST PUT (403); GammaとしてのSQL Lab (403); 任意のDatabaseオブジェクトへの昇格 (v0はURIを登録しない); リバースシェル。すべて見せかけ。証人は仮想FROMである。
python3 superset-g3-v0-import-sql-plant-Abraxas-Labs.py
または:
cd lab
./run.sh
対象は http://127.0.0.1:19710 のみ。イメージ apache/superset:6.1.0。Compose プロジェクト superset-g3-v0-import。シード: Admin、Gamma のみのユーザー、Lab Analytics 上の物理データセット lab_items、Gamma の datasource_access。オラクルは、埋め込まれた SQL 内およびチャート/データ内のウィットネス文字列である。
SUCCESS superset-g3-v0-import-sql-plant gamma-import-ok plant-sql-ok chart-data-witness-ok sqllab-403 dataset-put-403 v1-zip-no-overwrite SUPERSET-G3-V0-IMPORT-SQL-PLANT-WITNESS
v0 の import_dataset は、override が sql をコピーする前に、Dataset の書き込み権限と raise_for_access を必須としなければならない。command_versions からバージョンなしの v0 を削除するか、metadata.yaml を欠くインポートを拒否すること。クエリ時に、保存された仮想 SQL を Dataset 書き込み権限として扱うことを維持すること。
dashboards/api.py · dispatcher.py · dashboard importers/v0.py · dataset importers/v0.py · helpers.py · sqla/models.pyGNU Affero GPL v3.0。LICENSE を参照。ループバックラボ専用。無保証。