Uma Instalação MCP Podia Escrever HERMES_YOLO_MODE: Credenciais do Catálogo Agora Seguem um Schema Fechado

Imagine: encontra um servidor MCP útil no catálogo oficial do Hermes, clica em instalar, ele pede algumas variáveis de ambiente, cola a sua chave de API, e tudo funciona. Agora imagine que a entrada do catálogo era maliciosa — ou apenas escrita sem cuidado. Antes da correção fundida a 26 de agosto, qualquer variável de ambiente no pedido de instalação era persistida verbatim no ficheiro .env do seu perfil — incluindo HERMES_YOLO_MODE, um interruptor que muda a sua postura de segurança por completo. Por outras palavras, instalar uma ferramenta MCP era teoricamente a chave para «auto-yolo em todos os arranques futuros». Esse buraco está agora fechado (PR #91139).
Como Era a Vulnerabilidade
O problema estava em POST /api/mcp/catalog/install. Antes da correção, o endpoint aceitava um mapeamento env arbitrário e persistia todos os valores não vazios no ficheiro .env do perfil selecionado antes de executar a instalação. O endpoint devia receber as credenciais que escreve no assistente, mas como aceitava tudo, um pedido podia anexar HERMES_YOLO_MODE (ou qualquer outro controlo de runtime) a uma submissão de credenciais de outra forma legítima, escrevê-lo no .env e fazê-lo ter efeito no próximo arranque do processo.
O perigo mais subtil era a própria persistência genérica: quando um endpoint consegue escrever chaves arbitrárias no .env, torna-se uma primitiva de escrita genérica — capaz de substituir a trust root do catálogo MCP, obter autoridade executável do Copilot ACP, ou injetar qualquer controlo HERMES_*. O catálogo serve para ajudá-lo a preencher credenciais, não para ter esse tipo de poder.
A Correção: As Credenciais do Catálogo São um Schema Fechado
O comportamento corrigido:
- Validação de schema fechado: cada entrada do catálogo declara quais variáveis de ambiente precisa (a sua lista
auth.env). Qualquer nome na submissão que não esteja declarado → HTTP 400, rejeitado antes da primeira escrita ou ação de instalação; - Validar o mapa inteiro antes da primeira escrita: um pedido que misture chaves válidas e inválidas não pode persistir credenciais parcialmente;
- Denylist ao nível do nome: o escritor de ambiente partilhado recusa-se a persistir variáveis de runtime e de controlo de aprovação do Hermes —
HERMES_YOLO_MODE,HERMES_ACCEPT_HOOKS,HERMES_REDACT_SECRETS,HERMES_INTERACTIVE,HERMES_EXEC_ASK,HERMES_GATEWAY_SESSION,HERMES_CRON_SESSION,HERMES_SESSION_KEY,HERMES_CONFIG_PATH,HERMES_ENV_PATHe afins — para que uma entrada de catálogo malformada não consiga autorizar-se a si própria; - Os erros não divulgam segredos: apenas nomes rejeitados; os valores submetidos nunca são repetidos de volta.
Note que a denylist é específica por nome, não um bloqueio geral de HERMES_* — muitas credenciais de integração seguem elas próprias a convenção HERMES_* (por exemplo, HERMES_LANGFUSE_PUBLIC_KEY), e destruir o prefixo inteiro partiria todos os assistentes de configuração de providers. O gate bloqueia controlos de runtime e deixa passar credenciais de integração.
O Que Muda para os Utilizadores Normais
Praticamente nada. O desktop já apresenta e submete apenas os campos de credenciais declarados pela entrada do catálogo, por isso as instalações legítimas mantêm exatamente a mesma forma de pedido; os servidores MCP configurados manualmente ficam intactos. Isto é endurecimento puramente defensivo: usa como sempre, os atacantes perdem um ponto de entrada.
Conselhos para Si
- Continue a usar as instalações do catálogo: o fluxo agora é suportado por um schema fechado — as credenciais só caem em chaves declaradas;
- Configuração MCP manual — espreite o seu .env: se escreve configurações de servidores MCP à mão e coloca variáveis no
.envvocê mesmo, siga o princípio do menor privilégio — não ponha interruptores da classe deHERMES_YOLO_MODEaí; usehermes configou os controlos CLI dedicados quando precisar deles; - Contribuir com entradas para o catálogo: declare no
auth.envtodas as variáveis de ambiente de que a sua entrada precisa — é isso que molda o formulário do utilizador e evita que as instalações sejam rejeitadas com um 400.
Para Concluir
No fundo, esta correção estreita permissões: as instalações do catálogo passaram de «pode escrever variáveis de ambiente arbitrárias» para «só pode escrever credenciais declaradas», com uma denylist ao nível do nome sobre variáveis de controlo de segurança. Correções de segurança são as atualizações mais fáceis de ignorar, mas protegem o momento em que está mais descontraído — os assistentes de instalação de terceiros. Para aprofundar o lado MCP do Hermes, veja variáveis de contexto da config MCP e o catálogo MCP remoto oficial; e se usa monitorização orientada por webhooks, implementar esta correção é um upgrade fácil para ficar descansado.