Uma campanha sofisticada de ataque à cadeia de suprimentos de software foi identificada, visando um dos ecossistemas mais confiáveis do mundo do software de código aberto. Batizada de "Mini Shai-Hulud", a operação focou no ecossistema de pacotes @antv do npm, uma coleção de bibliotecas de visualização de dados amplamente utilizadas que alimentam painéis e aplicações para desenvolvedores globalmente. O ataque foi caracterizado por ser silencioso, preciso e desenhado para causar danos máximos antes de qualquer detecção, comprometendo contas de mantenedores e injetando versões maliciosas de pacotes populares.
Descoberta e escopo da campanha
A investigação foi conduzida por pesquisadores de segurança da Microsoft, que revelaram o escopo completo do que o malware era capaz de fazer. A ameaça começou com a compromissão de uma conta de mantenedor dentro da organização @antv. A partir desse ponto, o ator malicioso publicou versões maliciosas de pacotes de gráficos centrais. O que tornou este ataque particularmente perigoso foi a sua propagação: a infecção se espalhou para bibliotecas dependentes, como o echarts-for-react, um pacote com mais de um milhão de downloads semanais. Um único pacote envenenado se espalhou silenciosamente em milhares de pipelines de desenvolvedores quase overnight.
O caso originou-se quando a Microsoft identificou o comportamento anômalo nos pacotes do @antv. A equipe de resposta a incidentes analisou o tráfego e os artefatos deixados no ambiente de CI/CD, confirmando que o objetivo não era apenas roubar dados, mas estabelecer uma presença persistente e exfiltrar credenciais de alto valor. A ação coordenada resultou na remoção de 640 pacotes maliciosos pela plataforma GitHub e na invalidação de mais de 61.000 tokens do npm com permissões de escrita.
Vetor e exploração técnica
O vetor de ataque principal foi o hook preinstall dentro do pacote. Este hook é executado automaticamente durante o comando npm install, o que significa que os desenvolvedores não precisavam executar comandos extras para que a infecção começasse. O payload malicioso era um arquivo JavaScript ofuscado de aproximadamente 499 KB, desenhado para executar no momento exato em que um desenvolvedor instalava a dependência.
A ofuscação do JavaScript utilizou duas camadas de proteção. A primeira envolveu 1.732 strings codificadas em Base64 embaralhadas em um array rotacionado. A segunda camada utilizou um cipher personalizado baseado em PBKDF2 e SHA-256, decodificando strings críticas apenas em tempo de execução. Essa técnica complexa foi projetada para evadir detecções estáticas de antivírus e ferramentas de análise de segurança de software (SAST).
Além disso, o malware incluiu um environment gating (controle de ambiente) que fazia com que ele saísse imediatamente se não estivesse rodando dentro de um ambiente Linux do GitHub Actions. Isso ajudou a evitar detecções durante testes normais em máquinas locais, onde o contexto de CI/CD não estaria presente, tornando a infecção mais difícil de ser reproduzida em laboratórios de análise.
Roubo de credenciais em ambientes de nuvem
Uma vez ativo, o payload iniciou uma varredura agressiva por segredos em seis plataformas principais. Para a Amazon Web Services (AWS), o malware consultou o Instance Metadata Service e chamou o SecretsManager em todas as regiões disponíveis. Para o HashiCorp Vault, ele procurou em mais de doze caminhos de token. Para o Kubernetes, leu tokens de conta de serviço e enumerou segredos de namespace.
Uma das capacidades mais preocupantes foi a capacidade de raspar a memória do processo diretamente do runner do GitHub Actions, contornando a máscara padrão de segredos. Para o 1Password, o malware tentou até mesmo contornar a autenticação de dois fatores para extrair senhas mestras. O exfiltração de dados ocorreu por dois canais: o principal usou uma conexão HTTPS criptografada para um domínio de comando e controle (C2) na porta 443, enquanto um canal de fallback usou a API de Dados do Git do GitHub para criar commits em repositórios de vítimas em branches não protegidas.
Persistência e ofuscação de cadeia de suprimentos
O malware também trabalhou para manter o acesso a longo prazo. Ele instalou o runtime Bun e o utilizou para executar um payload de segunda etapa. O atacante injetou uma regra de sudo sem senha através de um bind mount e modificou as configurações de DNS editando o arquivo hosts. Uma técnica particularmente avançada foi a falsificação de atestados de proveniência da cadeia de suprimentos de software através do Sigstore, fazendo com que pacotes maliciosos parecessem legítimos e assinados.
Essa capacidade de forjar assinaturas digitais é crítica, pois compromete a confiança na integridade do software. Se um pacote malicioso aparece como assinado e verificado, as ferramentas de auditoria de segurança podem ser enganadas, permitindo que a infecção persista mesmo após a descoberta inicial do pacote original.
Impacto e alcance global
O escopo do roubo de credenciais foi impressionante. A Microsoft identificou mais de 2.200 repositórios públicos criados sob contas de vítimas como uma assinatura da campanha. O impacto se estende a qualquer organização que utilize bibliotecas de visualização de dados baseadas no @antv em seus ambientes de desenvolvimento. A remoção dos pacotes maliciosos pelo GitHub e a invalidação dos tokens são medidas reativas, mas o dano potencial já ocorreu para aqueles que instalaram as versões comprometidas.
Para os CISOs, o risco não é apenas técnico, mas operacional. A exposição de credenciais de nuvem pode levar a vazamentos de dados massivos, criptografia de dados por ransomware ou uso de recursos de nuvem para mineração de criptomoedas. A contaminação de pipelines de CI/CD pode comprometer a integridade de todo o ciclo de vida de desenvolvimento de software (SDLC) de uma organização.
Medidas de mitigação recomendadas
A Microsoft recomenda que desenvolvedores revisem as árvores de dependência para qualquer uso de pacotes afetados do @antv. As etapas críticas incluem:
- Executar
npm installcom a flag--ignore-scriptspara prevenir a execução de hooks maliciosos. - Pinning de versões conhecidas como boas para evitar atualizações automáticas para versões comprometidas.
- Rotação de qualquer credencial exposta, especialmente tokens do npm, chaves de API da AWS e credenciais do GitHub.
- Auditar contas do GitHub para repositórios públicos inesperados criados durante a janela de exposição.
Além disso, organizações devem considerar a implementação de políticas de segurança de software que validem a proveniência dos pacotes antes da instalação, utilizando ferramentas de SBOM (Software Bill of Materials) e assinaturas de código verificáveis.
Implicações regulatórias e LGPD
Para empresas brasileiras, este incidente tem implicações diretas sob a Lei Geral de Proteção de Dados (LGPD). Se credenciais de acesso a sistemas que processam dados pessoais foram comprometidas, a organização pode ser obrigada a notificar a Autoridade Nacional de Proteção de Dados (ANPD) e os titulares afetados, dependendo da natureza dos dados vazados. A falha em proteger a cadeia de suprimentos de software pode ser interpretada como uma falha de segurança da informação, sujeitando a empresa a sanções administrativas.
A governança de segurança deve incluir a avaliação de riscos de terceiros e a verificação de integridade de bibliotecas de código aberto utilizadas em aplicações críticas. A conformidade com frameworks como NIST CSF e ISO 27001 exige que as organizações monitorem e protejam seus ativos de software, incluindo dependências de terceiros.
O que os CISOs devem fazer imediatamente
Diante da descoberta da campanha Mini Shai-Hulud, os líderes de segurança devem priorizar as seguintes ações:
- Auditoria de Dependências: Verificar se há pacotes do @antv em uso nos ambientes de produção e desenvolvimento.
- Rotação de Segredos: Considerar a rotação proativa de credenciais de CI/CD e serviços em nuvem, mesmo sem evidência direta de vazamento.
- Monitoramento de Tráfego: Implementar regras de detecção para tráfego de saída incomum de servidores de build, especialmente conexões para domínios não autorizados.
- Educação de Desenvolvedores: Alertar as equipes de engenharia sobre os riscos de instalação de pacotes de código aberto sem verificação de integridade.
Perguntas frequentes
Qual é o risco principal deste ataque?
O risco principal é o roubo de credenciais de alto valor, como chaves de nuvem e tokens de acesso, que permitem aos atacantes acessar sistemas críticos e dados sensíveis.
Como posso saber se fui afetado?
Verifique os logs de instalação do npm e procure por pacotes @antv instalados durante o período de comprometimento. Utilize ferramentas de análise de dependências para identificar versões suspeitas.
Devo confiar em atualizações de segurança?
Sim, mas sempre verifique a integridade dos pacotes e utilize assinaturas verificáveis. A confiança cega em repositórios públicos deve ser substituída por validação contínua.
Conclusão
A campanha Mini Shai-Hulud destaca a evolução das ameaças à cadeia de suprimentos de software. Ataques que visam diretamente o processo de build e instalação de dependências representam um risco crítico para a segurança da informação moderna. A resposta eficaz requer não apenas ferramentas técnicas, mas também uma mudança cultural na forma como as organizações gerenciam e validam seu software de terceiros. A vigilância contínua e a adoção de práticas de segurança de software (DevSecOps) são essenciais para mitigar esses riscos.