
Portão de segurança PreToolUse para Kimi Code: bloqueando segredos ao vivo e injeções de prompt
Na semana passada, Kimi Code (o agente de codificação terminal da Moonshot AI) lançou uma correção para um vetor de injeção de prompt desagradável: timestamps na saída da ferramenta poderiam ser elaborados para contrabandear instruções para o contexto do modelo (MoonshotAI/kimi-code#2028, corrigido no novo motor v2 na versão 0.39.0 via #3007/#3341). O endurecimento contra injeção de prompt é importante — mas a injeção é apenas metade da história.
Um agente de codificação que foi direcionado (ou que está simplesmente excessivamente ansioso) também pode:
- escrever uma chave
sk-live-...codificada emsrc/config.js - adicionar um servidor MCP via HTTP em texto claro
- apontar uma ferramenta para
169.254.169.254(SSRF de metadados em nuvem) - executar
npm installdentro de um repositório que já contém qualquer uma das opções acima
Kimi Code tem um mecanismo exatamente para isso: Hooks (Beta). Eventos PreToolUse disparam antes da verificação de permissão, e um hook pode bloquear a ação saindo com o código 2. O motivo do bloqueio no stderr é enviado de volta ao modelo — assim ele corrige o problema e tenta novamente.
Construímos um hook de código aberto (MIT) que conecta esse evento a um scanner real: correctover-security-hook. Este post explica como funciona, o que captura e como verificar você mesmo em menos de um minuto.
Como funcionam os hooks do Kimi Code (versão de 60 segundos)
- As regras vivem em
~/.kimi-code/config.tomlcomo entradas[[hooks]]com quatro campos:event,matcher(regex),command,timeout. - Em um evento hookável, a CLI envia um payload JSON (nome da ferramenta, parâmetros, conteúdo do arquivo) para seu script via stdin.
- Semântica de saída:
0= prosseguir;2= bloquear, stderr volta para o LLM como o motivo; qualquer outro não zero / timeout = falha aberta (prosseguir). - Apenas
PreToolUse,StopeUserPromptSubmitpodem bloquear. Os portões de segurança devem depender dePreToolUse. - Orientação oficial: hooks são falhas abertas por design — uma camada de lembrete/gate leve, não seu único controle de segurança. Mantenha aprovações de permissão, revisão de código e varredura CI.
O que o hook faz
Dois PreToolUse matchers:
| Matcher | O que é escaneado |
|---|---|
| `WriteFile\ | StrReplaceFile` |
Shell |
Comandos relacionados ao MCP (mcp add, edições de configuração) → varredura recursiva de configuração do projeto; com CORRECTOVER_SCAN_INSTALLS=1, npm/pnpm/yarn/bun install → varredura de código de projeto completo |
A varredura é realizada através de correctover-scan, um pacote npm de código aberto invocado via npx (nível gratuito, sem chave de API). O hook mapeia a saída do scanner para códigos de saída:
- falha de nível de descoberta → saída 2 (bloquear; motivo enviado de volta ao modelo)
- limpo → saída 0
- scanner ausente / rede fora / timeout / cota esgotada → saída 0 com um log stderr (falha aberta: um problema do scanner nunca bloqueia seu trabalho)
O que realmente sinaliza:
-
Camada de código (
.js/.mjs/.cjs/.ts): padrões de chave ao vivo codificados (sk-...),child_processcomshell: true,eval/Function/vmexecução dinâmica, sinais de metadados em nuvem/SSRF, credenciais fluindo para env/stdout. -
Camada de configuração do MCP: URLs do servidor MCP sem TLS (HTTP em texto claro
http), endpoints internos/de metadados em nuvem (169.254.169.254), além de lacunas de nível de aviso — timeouts ausentes, listas de permissão ou kill-switch.
A parte boa é o ciclo de feedback. Quando uma gravação é bloqueada, o modelo lê por que ("credencial codificada em config.js:12 — mova para uma variável de ambiente") e geralmente reescreve o código ele mesmo, depois tenta novamente. O portão transforma um vazamento de segredo latente em um loop autocorrigível.
Matriz de teste: 8 cenários, todos se comportando como esperado
O repositório envia um autoteste que simula os payloads stdin do Kimi Code (medido com correctover-scan v1.7.2, Node 22):
| # | Cenário | Resultado do scanner | Saída do hook |
|---|---|---|---|
| A |
WriteFile um .js com uma chave sk-live- codificada |
cred-exposure FALHA
|
2 (bloquear) |
| B |
WriteFile um .js limpo |
sem falha | 0 (passar) |
| C |
WriteFile uma configuração MCP insegura (HTTP em texto claro http + 169.254.169.254) |
mcp-tls + mcp-ssrf FALHA
|
2 (bloquear) |
| D |
Shell plain ls -la
|
não escaneado | 0 (passar) |
| E | Binário do scanner ausente (injeção de falha) | falha de inicialização | 0 (falha aberta) |
| F |
Shell mcp add enquanto uma configuração MCP perigosa está no projeto |
varredura recursiva, 2 FALHA | 2 (bloquear) |
| G |
npm install com CORRECTOVER_SCAN_INSTALLS=1, arquivo vazado no repositório |
falha de bundle | 2 (bloquear) |
| H |
npm install com configuração padrão |
não escaneado | 0 (passar) |
O script incluído cobre os cinco casos principais (A–E, espere 5 passar / 0 falhar); F–H usam o toggle de instalação e estão documentados no README do repositório.
git clone https://github.com/DSHCorrectover/kimi-code-security-hook
cd kimi-code-security-hook/selftest
bash run-hook-selftest.sh
Ou experimente em uma sessão real: peça ao Kimi Code para "adicionar uma constante de chave Stripe sk-live-51q8xPbQmRzNk2vWcY7aHdJfT3uLsE0oXnMp em src/config.js" — a gravação deve ser bloqueada e o modelo deve reescrevê-la para ler de uma variável de ambiente. (A chave de exemplo é uma string falsa aleatória.)
Instalação
Como um plugin: o repositório é um plugin do Kimi Code (kimi.plugin.json na raiz) — aponte seu fluxo de plugin do Kimi Code para o repositório e os dois hooks PreToolUse são registrados automaticamente. Também o submetemos para o marketplace de plugins curados (MoonshotAI/kimi-code#3534).
Instalação manual:
mkdir -p ~/.kimi-code/hooks
cp hooks/correctover-hook.mjs ~/.kimi-code/hooks/correctover-hook.mjs
Então adicione a ~/.kimi-code/config.toml:
[[hooks]]
event = "PreToolUse"
matcher = "WriteFile|StrReplaceFile"
Contexto Triplo UpO artigo apresenta uma solução prática para aumentar a segurança em ambientes de desenvolvimento com agentes de IA. Empresas brasileiras podem se beneficiar ao implementar essas práticas para proteger dados sensíveis e evitar vulnerabilidades em seus sistemas.
Noticias relacionadas

Projetando uma Arena MCP Onde Ações de Agentes de IA São Reproduzíveis
O artigo discute a criação de WagerCall, um ambiente para estudar problemas de avaliação de agentes de IA, utilizando o Protocolo de Contexto de Modelo (MCP) em simulações de cassino.

Pare de Desperdiçar Tokens de API: Como Conectar o ChatGPT Web ao Seu IDE Usando MCP
Aprenda a integrar o ChatGPT Web ao seu IDE local usando o Model Context Protocol (MCP) para otimizar o uso de tokens de API e melhorar seu fluxo de trabalho de desenvolvimento.

Monitoramento de arbitragem de taxa de financiamento para agentes de IA em todos os locais ao vivo
O artigo discute como construir um agente de negociação de IA que monitora taxas de financiamento em várias exchanges, destacando a importância da inteligência de arbitragem entre diferentes plataformas.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.