Um caso documentado pela Mandiant no relatório AI Risk and Resilience Report 2026 abre uma nova fronteira de risco para equipes de desenvolvimento: um atacante sequestrou uma sessão ativa de assistente de código com IA na estação de trabalho de um desenvolvedor de um provedor de SaaS e transformou a recomendação da própria ferramenta em vetor de execução. Com a sessão sob controle, o invasor instalou um infostealer por meio de um pacote PyPI envenenado, colheu tokens OAuth do GitHub e propagou o worm Shai-Hulud por aproximadamente 100 repositórios internos, com roubo automatizado de segredos e exfiltração de código-fonte proprietário. Organizações que usam assistentes de programação precisam tratá-los como sessões privilegiadas e restringir hoje o que essas ferramentas podem instalar, acessar e enviar para fora.
Como a intrusão aconteceu
O caso integra o relatório especial de setembro de 2026 da Mandiant, construído com observações de campo do Google Threat Intelligence Group. A cadeia começa fora do radar clássico de malware: não há exploit de dia zero nem anexo suspeito. O ponto de entrada é a confiança que o desenvolvedor deposita no assistente. Operando como um interpretador confiável dentro do ambiente, o assistente recomendou a instalação de um pacote externo que havia sido envenenado pelo atacante. Quando a recomendação foi aceita, a ferramenta funcionou inadvertidamente como um cavalo de Troia, entregando o código malicioso sem atravessar as barreiras tradicionais de download e execução.
A partir da sessão comprometida, o invasor instalou um infostealer distribuído como pacote PyPI adulterado, colheu tokens OAuth do GitHub e implantou o worm de autopropagação. O Shai-Hulud automatizou o roubo de segredos dos repositórios e a exfiltração programática de código-fonte. O ator ainda envenenou um pacote dentro do namespace oficial da organização, provocando uma segunda infecção quando outro funcionário baixou a versão comprometida. O comprometimento, portanto, sobreviveu ao fechamento da sessão original: a poisoned dependency continuou a trabalhar a favor do atacante dentro do perímetro.
A cadeia do worm Shai-Hulud
O Shai-Hulud não é ameaça nova. O worm comprometeu mais de 500 pacotes do ecossistema npm a partir de setembro de 2025, em uma campanha que combina comprometimento de cadeia de suprimentos com propagação automatizada. A entrada inicial veio de phishing que falsificava a npm e pedia que desenvolvedores atualizassem as configurações de autenticação multifator. Depois do primeiro acesso, o payload procurava arquivos.npmrc, variáveis de ambiente e tokens PAT do GitHub, além de chaves de AWS, Google Cloud e Azure, e publicava automaticamente versões maliciosas de outros pacotes mantidos pela mesma vítima.
Há um detalhe que conecta essa campanha ao uso ofensivo de modelos de linguagem: a Unit 42 avalia com confiança moderada que um modelo de linguagem foi usado para escrever o script bash malicioso, com base em comentários e emojis presentes no código. O abuso de IA por adversários já vinha sendo documentado em operações contra modelos proprietários; o caso da Mandiant mostra o outro lado da mesma moeda. A ferramenta que acelera o defensor é capturada e convertida em infraestrutura do atacante, sem que nenhum endpoint tradicional classifique a ação como maliciosa.
Por que o assistente vira alvo
O episódio muda o cálculo de risco dos ambientes de desenvolvimento em três eixos. Primeiro, a execução acontece com aval implícito do humano: o desenvolvedor aceita uma recomendação e o agente executa a instalação, o que neutraliza treinamentos centrados em desconfiar de links e anexos. Segundo, o assistente concentra privilégios que um infostealer comum levaria horas para reunir: acesso ao repositório, ao terminal e, em muitas configurações, a tokens de longa duração. Terceiro, a fronteira entre código confiável e código externo se dissolve quando a sugestão de dependência nasce dentro do fluxo de trabalho aprovado pela empresa.
Em resposta direta ao Shai-Hulud, o GitHub removeu imediatamente mais de 500 pacotes do registro npm para interromper a propagação do malware e passou a bloquear uploads contendo os indicadores de comprometimento da campanha. A empresa também anunciou endurecimento da publicação de pacotes: autenticação de dois fatores obrigatória para publicação local, tokens granulares com vida curta, deprecação dos tokens clássicos e expansão da publicação confiável, que retira tokens estáticos do pipeline ao vincular cada release a uma identidade verificada. Para mantenedores, a mensagem prática é deixar de publicar com token armazenado em máquina de desenvolvedor.
Controles que cortam a cadeia
A recomendação central da Mandiant é tratar o assistente e seus hooks como superfície crítica, não como acessório de produtividade. O checklist abaixo resume os controles do relatório e a prioridade prática de implantação:
| Controle | Prioridade |
|---|---|
| Validar dependências recomendadas por IA contra checksums criptográficos e allowlist em hooks de IDE e CLI antes da instalação | P1 |
| Isolar credenciais locais e impedir que extensões acessem chaves brutas e tokens OAuth de longa duração | P1 |
| Restringir egress da estação e rotear todo tráfego de dependências por registro interno de artefatos | P1 |
| Revogar tokens OAuth do GitHub e da npm expostos a ferramentas de desenvolvimento e adotar publicação confiável | P1 |
| Exigir assinatura digital verificada para binários de assistentes, plugins e servidores MCP | P2 |
| Governar repositórios internos de skills e hooks com aprovação por múltiplas partes e monitoramento contínuo | P2 |
Rotear dependências por um registro interno e manter inventário verificável de componentes também conecta essa defesa às práticas de transparência da cadeia de software exigidas pela regulamentação europeia: quando a resolução de pacotes passa por um espelho controlado, um nome envenenado resolve para a sua cópia auditada ou para nada.
Sinais de comprometimento a verificar
- Repositórios chamados Shai-Hulud criados em contas pessoais ou organizacionais de desenvolvedores;
- Branches shai-hulud e arquivos de workflow como shai-hulud-workflow.yml em repositórios do GitHub;
- Repositórios privados migrados para públicos com sufixo -migration;
- Conexões de saída para webhook.site em estações de desenvolvimento e pipelines de CI;
- Instalações de pacotes PyPI ou npm disparadas por assistentes de IA fora do fluxo revisado;
- Tokens OAuth ou PAT criados sem solicitação do dono da conta.
Prioridades de resposta
P1: mapear onde os assistentes de código rodam na organização, quais tokens acessam e se aceitam instalações automáticas de pacotes; revogar credenciais de longa duração expostas a extensões; apontar a resolução de dependências para registro interno com allowlist. P2: exigir assinatura e verificação para plugins e servidores MCP; submeter mudanças em hooks e skills a revisão por múltiplas partes; incluir o padrão de sequestro de sessão de IA nos exercícios de resposta a incidentes, com roteiro de revogação emergencial de identidades de agentes. A janela entre a recomendação aceita e a execução é medida em segundos; a defesa que depende de revisão humana posterior já chega atrasada.