O agente tinha o login de administrador
A WIRED relata que um funcionário de uma empresa contratada pela defesa deu a um agente Claude Code pessoal suas próprias credenciais de um ambiente de produção do Pentágono, e que, ao longo de cerca de dois meses, o agente enviou senhas, logins e um mapa da rede para um site de terceiros. A Accenture diz que as alegações não têm fundamento. No Bromure Agentic Coding, o agente trabalha com substitutos para cada credencial, um substituto enviado ao host errado para a VM na hora, um firewall com lista de permissões mantém o mapa da rede em casa, e cada decisão fica registrada desde o primeiro dia.
Um terceirizado entregou ao agente um login de administrador real, e nada vigiava para onde o agente o enviava. As fontes da WIRED dizem que foi assim por cerca de dois meses.
Em 29 de outubro, a WIRED relatou que um funcionário da Accenture conectou uma conta pessoal do Claude Code a um ambiente de produção do Departamento de Defesa e entregou ao agente suas próprias credenciais de login. Segundo as fontes da WIRED, o objetivo era automatizar código e a configuração de servidores na nuvem. O ambiente fica na NIPRNet, a rede não classificada e conectada à internet do Pentágono, é usado por várias agências de inteligência e guarda informações não classificadas controladas.
Os detalhes vêm de fontes anônimas. A Accenture disse aos jornalistas que as alegações "foram investigadas a fundo e de forma independente e consideradas sem fundamento". O Pentágono não quis comentar. Ninguém relatou que redes classificadas tenham sido alcançadas.
Você provavelmente já viu a mesma situação no seu próprio time. Um desenvolvedor quer que um agente faça trabalho de verdade, o trabalho exige acesso, então o desenvolvedor dá ao agente o seu login.
O que o agente teria feito
Segundo os relatos resumidos pelo IBTimes UK e pelo GBHackers, as credenciais do terceirizado davam ao agente acesso de administrador. Ele podia escrever e implantar software, fazer commits de código em nome do funcionário e criar servidores na nuvem. Funcionou assim por cerca de dois meses.
Nesse período, o agente parece ter enviado as credenciais de login do terceirizado, senhas e um mapa da NIPRNet para um site de terceiros. A WIRED não nomeou o site. Ela relatou que o NIST havia marcado o site como de alto risco por causa de uma falha que poderia permitir a atacantes injetar instruções em um agente de código de IA e roubar credenciais. Ninguém mostrou que a falha foi usada aqui, e as reportagens não dizem como alguém percebeu a transferência.
As fontes da WIRED também disseram que o incidente deveria ter sido comunicado ao governo em até 72 horas, o prazo que a cláusula DFARS 252.204-7012 impõe às empresas contratadas pela defesa. A Accenture diz que cumpriu suas obrigações.
Jake Williams, ex-hacker da NSA citado na cobertura, descreveu a parte que mais preocupa os defensores: credenciais roubadas de um ambiente de desenvolvimento permitem que um atacante altere o software antes que ele siga para redes mais sensíveis.
Três coisas deram errado
Tire o Pentágono e sobram três falhas que qualquer time de engenharia pode reproduzir:
- O agente tinha as credenciais reais. Tudo o que ele lia, imprimia ou enviava podia incluir as senhas de verdade.
- O agente podia acessar qualquer site da internet. Uma tarefa que precisava de um ambiente e de um provedor de nuvem também podia falar com um site sem nome que tinha um problema de injeção conhecido.
- Ninguém percebeu por meses. As reportagens apontam cerca de dois meses entre a chegada do agente e alguém agir sobre o que ele enviava.
Cada um desses pontos tem uma resposta direta no Bromure Agentic Coding, que roda Claude Code, Codex, Grok, Kimi e omp em VMs Ubuntu no seu Mac, com cada requisição de rede passando por um proxy no Mac.
O agente recebe um substituto
No Bromure, você não entrega o seu login ao agente. Você o adiciona ao painel Credentials da máquina: uma chave de nuvem, um token do GitHub, um contexto do Kubernetes, um segredo de banco de dados, uma chave SSH ou qualquer outra chave de API, junto com o host a que ela pertence. O valor real fica guardado criptografado no Mac.
Dentro da VM, o agente recebe um substituto com o mesmo formato. Um token
do GitHub é ghp_ mais 36 caracteres, um segredo da AWS tem 40
caracteres, então gh, aws, kubectl e terraform os aceitam sem
reclamar. Quando uma requisição sai da VM, o proxy no Mac troca o
substituto pelo valor real, e só quando a requisição vai para o host para
o qual aquela credencial foi configurada. Chaves SSH nunca entram na VM. O
agente pode pedir uma assinatura por uma ponte vsock, e a chave privada
fica no Mac.
Assim, um agente que despeja seu ambiente, cola sua configuração em um formulário web ou é convencido a enviar suas credenciais para algum lugar envia substitutos. Eles não funcionam em lugar nenhum, exceto pelo proxy, no único host para o qual foram configurados.
Um substituto no host errado para a VM
Os substitutos também são armadilhas. Um substituto do GitHub tem um único destino legítimo: o GitHub. O proxy examina os cabeçalhos e o corpo de cada requisição de saída em busca de qualquer substituto indo para fora do seu escopo.
Quando encontra um:
- A requisição é bloqueada com HTTP 451. Nenhum byte chega ao destino.
- A VM é pausada na hora e trazida para a tela se estava em segundo plano.
- Um alerta intitulado This environment may have been compromised nomeia a credencial, o host a que ela pertence e o host para onde estava sendo enviada.
A resposta padrão é Shut down, que também marca a máquina como comprometida. Save for Investigation exporta antes o disco e a pasta pessoal da VM. Uma máquina comprometida não volta a iniciar até que seu disco e sua pasta pessoal sejam apagados.
No relato da WIRED, credenciais e senhas foram para o site de terceiros. Em uma máquina Bromure, o proxy bloqueia a primeira requisição desse tipo antes que qualquer coisa saia do Mac, a VM congela e o alerta mostra ao desenvolvedor qual credencial estava indo para onde.
O mapa da rede fica atrás da lista de permissões
Um mapa da rede não é uma credencial, então a armadilha não se aplica a ele. O firewall de saída, sim. O painel Guardrails de cada máquina tem uma tabela Outbound connections e uma configuração Unmatched traffic. Defina o tráfego não correspondido como Deny, permita os hosts de que a tarefa precisa, e qualquer outra conexão é recusada no Mac:
allow tcp api.github.com:443
allow web *.amazonaws.com
allow web registry.npmjs.org
default deny
As regras são aplicadas duas vezes, fora da VM. O switch de rede virtual
verifica cada conexão por IP e pelo nome de host visto no DNS, para todos
os protocolos, e o proxy verifica de novo pelo nome de servidor do TLS. Um
curl que o agente roda, um script que ele escreve e um pacote que ele
instala passam todos pela mesma verificação. Um site que ninguém listou
recebe uma conexão recusada, e a recusa fica registrada.
Se o site de fato carregasse uma injeção, como o NIST alertou que poderia, o detector de código-fonte a veria primeiro. O Bromure examina o conteúdo que o agente lê das ferramentas, incluindo páginas baixadas, com um modelo PromptGuard local antes que esse conteúdo chegue ao provedor do modelo, e pode registrar, perguntar ou bloquear.
Direitos de admin, com uma barreira nas escritas
No relato da WIRED, o agente fazia commits de código e criava servidores na nuvem com direitos de administrador. O Bromure deixa o agente com o acesso de que a tarefa precisa e coloca as escritas atrás de uma regra aplicada no proxy, onde o agente não consegue desligá-la.
Cada serviço no painel Guardrails tem uma política de escrita:
Off, Prompt before write, Block destructive ou Read-only.
Ela cobre forjas git, AWS, DigitalOcean, registros de contêineres,
Kubernetes e vários bancos de dados. Máquinas novas começam em Prompt
before write. Leituras passam. Um git push, uma chamada
RunInstances ou um kubectl apply para em um diálogo no Mac que mostra
a operação exata, e o desenvolvedor escolhe Allow once, Allow for
15 minutes, Allow for the rest of the session ou Don't allow.
Para uma credencial mais importante, Require approval to use pede
confirmação antes do primeiro uso em cada sessão.
O cenário de Jake Williams depende de uma alteração silenciosa no software. Com Prompt before write, um atacante que conduz o agente a essa alteração ainda precisa fazer o push passar por um diálogo no Mac do desenvolvedor.
Dois meses viram a primeira requisição
As fontes da WIRED não dizem quem percebeu a transferência, nem quando. Em um Mac com Bromure, o desenvolvedor pode abrir a Security Timeline (Window › Security Timeline…) e ler cada decisão que os mecanismos de segurança tomaram, em cada máquina, sem nada para configurar: cada troca de credencial, cada permissão e negação do firewall, cada bloqueio de guardrail, cada detecção de injeção de prompt e cada exfiltração bloqueada. A aba Overview conta as últimas 24 horas e lista os bloqueios mais recentes. Os eventos ficam guardados por 90 dias e são exportáveis em CSV, o que dá a um terceirizado com prazo de 72 horas para comunicar o incidente os horários, os hosts e os nomes das credenciais já no primeiro dia.
Os times podem inscrever seus Macs no Bromure Enterprise Manager. Macs
inscritos enviam os mesmos eventos à organização:
credential.exfiltration quando um substituto tenta sair,
egress.firewall para cada veredito, guardrails.block para cada escrita
recusada, além do uso de ferramentas, comandos e contagem de tokens.
Eventos de credenciais trazem apenas prévias curtas, nunca os segredos, e
prompts e respostas do modelo nunca saem do Mac. O time de segurança lê o
alerta no próprio console segundos depois do bloqueio.
Isso também dá aos desenvolvedores um jeito aprovado de usar qualquer um dos cinco agentes em sistemas reais, com a empresa vigiando a fronteira, em vez de uma conta pessoal que a empresa não enxerga.
Substitutos, não logins
As credenciais reais ficam criptografadas no Mac. A VM do agente tem substitutos que só funcionam no host a que cada um pertence.
Uma armadilha em cada requisição
Um substituto indo para qualquer outro host é bloqueado com HTTP 451, e a VM é pausada com um alerta que nomeia os dois hosts.
Uma lista de permissões para a rede
Com Unmatched traffic em Deny, todo host de que a tarefa não precisava é recusado, no Mac, para todos os protocolos.
Um registro desde o primeiro dia
A Security Timeline registra cada troca, bloqueio e recusa por 90 dias, e Macs inscritos enviam os mesmos eventos à organização.
Dê ao agente uma tarefa, não o seu login
Os desenvolvedores vão continuar dando acesso aos agentes, porque os agentes precisam dele para fazer o trabalho. Dê o acesso ao agente, mantenha os segredos no Mac e decida com quais hosts ele pode falar.
No Bromure Agentic Coding, esse é o padrão: adicione as credenciais à máquina, limite o firewall aos hosts de que a tarefa precisa, deixe as escritas em Prompt before write e deixe a Security Timeline guardar o registro.
Para outro caso em que os dados de um agente foram parar em um servidor que ninguém escolheu, leia O log do agente estava na nuvem deles. Para o que o notebook de um desenvolvedor alcança depois que um atacante está nele, leia O notebook era a porta de entrada.