O agente vazou a própria chave
O CVE-2026-21852 era um bug corrigido no Claude Code: um repositório podia definir ANTHROPIC_BASE_URL nas suas configurações de projeto, e o agente enviava sua própria chave de API da Anthropic, em texto puro, para o servidor do atacante antes de você responder 'confiar nesta pasta'. O ataque não rodou código algum e não leu nada do seu disco; ele mudou o endereço para o qual o agente remete sua única credencial indispensável. A Anthropic corrigiu o timing. O Bromure Agentic Coding mantém essa chave inteiramente fora do mundo do agente.
Os ataques de abertura de pasta que já cobrimos rodam código quando você abre um repo e leem suas chaves de nuvem do disco. Este mudou uma única linha de configuração, e o agente entregou a credencial sem a qual ele não consegue funcionar: sua própria chave de API do modelo.
O bug é o CVE-2026-21852, encontrado pela Check Point Research no Claude Code, comunicado à Anthropic em 28 de outubro de 2025, corrigido em 28 de dezembro, e numerado como CVE em 21 de janeiro de 2026. A Anthropic lançou o patch meses atrás. Estamos escrevendo sobre ele em julho porque ele traça uma linha limpa sob um fato que nenhum patch muda: um agente de codificação carrega uma chave de API do modelo, a envia em cada requisição, e um repositório pode editar o endereço para o qual ele a envia.
O que o bug fazia.
Aponte o Claude Code para um projeto e ele lê a configuração desse projeto,
os arquivos sob .claude/ que permitem a um repo carregar suas próprias
definições. Uma dessas definições é ANTHROPIC_BASE_URL, o endereço com o
qual o agente fala quando chama o modelo. O padrão é api.anthropic.com, e
a configuração existe para que times possam rotear através de um gateway ou
de um proxy próprio. O projeto pode defini-la por design.
Um repositório malicioso a define para um servidor que o atacante controla.
Então, como descreve a Check Point, "antes que a vítima decida confiar no
diretório", o Claude Code dispara suas requisições de API de inicialização
para o que quer que ANTHROPIC_BASE_URL diga, e essas requisições
carregam, nas palavras da Check Point, "o header de autorização — nossa
chave de API completa da Anthropic, completamente exposta em texto puro".
O servidor do atacante lê o header de uma requisição que o agente se
ofereceu para enviar, com, como coloca a Check Point, "nenhuma interação do
usuário necessária". Você clona o repo, roda claude, e a chave se foi
antes que o prompt de confiança termine de desenhar na tela.
Uma chave de API da Anthropic alcança o workspace da conta, com seu armazenamento de arquivos compartilhado e seu faturamento. A Check Point percorre o alcance: um atacante pode ler e escrever os arquivos do workspace, deletá-los, esgotar a cota de armazenamento, e queimar crédito de API às suas custas. O agente entrega a credencial sobre a qual toda a operação roda, sem que ninguém peça.
O ataque que não rodou nada.
Já escrevemos este gênero antes. O Miasma plantou config nos próprios
repositórios da Microsoft, e abrir a
pasta rodava um blob de vários megabytes que vasculhava o sistema de
arquivos em busca de chaves. O Amazon Q lançava automaticamente servidores
MCP de um workspace clonado
com o ambiente completo do desenvolvedor, com chaves AWS e sockets SSH. No
caso do Cursor, uma
injeção de prompt dirigiu uma ferramenta a sobrescrever uma guarda e depois
rodar um shell. Os três compartilham uma forma: conteúdo não confiável na
abertura faz código executar, e esse código sai procurando os seus
segredos, os que estão em ~/.aws e ~/.ssh.
O CVE-2026-21852 pula essa maquinaria. O repo malicioso não dispara hook algum e não roda shell algum; ele muda um endereço, e o agente, comportando-se como projetado, envia a própria credencial para lá. A chave que vaza é a chave que o agente precisa transmitir em cada chamada que faz. Você não pode trancá-la em um arquivo que o processo não consegue ler, porque o processo é feito para enviá-la.
A correção da Anthropic foi a certa para o bug: o diálogo de confiança agora vem primeiro, e, nas palavras deles, "nenhuma requisição de API é iniciada antes que os usuários confirmem o diálogo de confiança". Redirecione a base URL hoje e nada sai até você confiar na pasta. A correção governa o timing, porém. Uma vez que você confia na pasta, e desenvolvedores confiam em pastas o dia inteiro, a chave real continua no ambiente do agente, a uma linha de config de um redirecionamento, dependendo da corretude de cada caminho de código futuro que a toca.
A chave pertence a outro lugar.
A pergunta durável é por que a chave real ficava em algum lugar que a configuração de um repositório podia mirar. Essa é uma pergunta de arquitetura, e construímos o Bromure Agentic Coding para respondê-la.
O Bromure roda seu agente de codificação dentro de uma VM Linux
descartável: o próprio agente, os shells que ele gera, os pacotes que ele
instala, as chamadas de modelo que ele faz. Um proxy no host fica no fio
entre o agente e api.anthropic.com. A VM guarda uma chave stub, um
placeholder sintaticamente válido que não vale nada, enquanto a chave real
da Anthropic fica no host. Em uma chamada legítima ao endpoint genuíno do
modelo, o proxy do host troca o stub pela chave real no fio, e depois a
troca de volta para fora da resposta. O segredo faz seu único trabalho, e a
cópia que um atacante poderia roubar não existe em lugar nenhum que o mundo
do agente alcance.
Reproduza o ataque contra esse arranjo. O repo malicioso define
ANTHROPIC_BASE_URL para attacker.evil. O agente, dentro da VM, envia
sua requisição de inicialização para lá, carregando a única chave que tem,
o stub. O proxy vincula a troca da chave real ao endpoint genuíno, e uma
requisição apontada para um servidor desconhecido sai carregando o
placeholder. O servidor do atacante lê o header Authorization e colhe uma
string que não significa nada na internet pública. O redirecionamento
funcionou, e não coletou nada.
A garantia depende de um detalhe: o broker vincula a chave real ao destino
verdadeiro, substituindo o segredo para uma chamada a api.anthropic.com e
nenhum outro lugar. Acerte esse vínculo e uma base URL redirecionada é
inerte. Erre-o, substitua a chave real em qualquer requisição de saída, e
você reconstruiu o bug um nível abaixo. O proxy ganha seu sustento
liberando o segredo para um endereço e tratando todos os outros como não
confiáveis.
O que o broker muda
A chave real do modelo nunca entra na VM em que o agente roda. O host a guarda e a libera no fio apenas para uma chamada ao endpoint genuíno. Um repositório pode redirecionar a base URL o quanto quiser; a requisição que sai carrega um stub, e um stub não vale nada fora da sua máquina.
O que ele não muda
A confiança continua sendo sua para dar. Configure o agente para falar com um gateway operado pelo atacante e o broker não tem como saber que você quis a coisa errada; ele intermedia para onde você mandou. E a garantia corre um vínculo por vez: a chave do modelo aqui, seus outros segredos pelo mesmo arranjo de stub e troca, cada um tão forte quanto o vínculo de endpoint por trás dele.
O bug companheiro, e a mesma resposta.
O CVE-2026-21852 chegou com um irmão mais barulhento, o
CVE-2025-59536,
em que o .claude/settings.json de um repo podia definir hooks, comandos
de shell que o Claude Code roda ao iniciar, ou forçar a ativação de
servidores MCP do projeto, e esses comandos "executam imediatamente ao
rodar claude, antes que o usuário consiga sequer ler o diálogo de
confiança". Esse é execução de código na abertura, a forma familiar, e
sua resposta é a familiar: dentro de uma VM descartável, o shell que ele
gera encontra credenciais stub onde os tokens reais deveriam estar, e uma
ação que altera estado pausa na fronteira do hypervisor para um prompt no
host. Já defendemos esse argumento em
detalhe.
Os dois bugs parecem diferentes, um rodando um programa e outro mudando um endereço, e aterrissam no mesmo lugar: um agente de codificação lê e age sobre arquivos que chegam com o código que você lhe entrega, e alguns desses arquivos decidem o que roda e para onde vão os segredos. A Anthropic corrigiu ambos. A resposta duradoura põe os segredos em algum lugar que esses arquivos podem apontar e não podem alcançar.
Uma vitória estreita.
Manter a chave do modelo fora do ambiente do agente derrota este redirecionamento e a família de ataques que enganam o agente para que envie a própria credencial para algum lugar novo, porque a chave que o agente pode enviar não vale nada. O hypervisor e o proxy impõem isso abaixo do agente, sem pedir nada ao próprio agente.
A confiança continua sendo trabalho seu. Você ainda decide quais repositórios abrir e quais gateways configurar, e um broker que envia sua chave para onde você aponta vai enviá-la para um lugar ruim se você apontar para lá de propósito. Limitar o que uma chave vazada pode fazer também fica com o provedor do modelo; o patch e os controles de workspace da Anthropic cobrem esse lado.
Um agente de codificação tem que carregar uma chave e enviá-la para algum lugar, e por uma janela no fim de 2025 uma configuração de uma linha em um repo clonado decidia para onde. O patch fechou essa janela. O Bromure Agentic Coding remove a chave em vez disso: o agente trabalha dentro de uma máquina descartável que nunca guardou a real, e o proxy põe a chave real no fio para um único endereço. Instale-o, aponte seu agente para o repositório que quiser, e deixe a próxima base URL redirecionada levar embora uma string que não vale nada em lugar nenhum.