
Resumo Executivo
O ecossistema NPM enfrenta um grave ataque à cadeia de suprimentos. O pacote popular @ctrl/tinycolor, que recebe mais de 2 milhões de downloads semanais, foi comprometido, juntamente com mais de 40 outros pacotes de diversos mantenedores. Este ataque evidencia uma evolução preocupante nas ameaças à cadeia de suprimentos, pois o malware inclui um mecanismo de autorreplicação que infecta automaticamente pacotes subsequentes, criando uma cascata de compromissos em todo o ecossistema. As versões comprometidas foram removidas do npm.
Análise Técnica
O ataque se desenrola por meio de uma cadeia sofisticada de múltiplas etapas que utiliza o process.env do Node.js para acesso oportunista a credenciais e emprega módulos empacotados pelo Webpack para modularidade. Um arquivo minificado de cerca de 3,6 MB, bundle.js, é executado de forma assíncrona durante a instalação do npm, possivelmente acionado por um script postinstall sequestrado incorporado no pacote.json comprometido.
Mecanismo de Autorreplicação
O malware incorpora um mecanismo de autorreplicação através da função NpmModule.updatePackage, que consulta a API do registro NPM para buscar até 20 pacotes pertencentes ao mantenedor, forçando a publicação de patches para esses pacotes. Isso cria um efeito de compromisso em cascata, injetando recursivamente o pacote malicioso em ecossistemas dependentes em todo o registro NPM.
Análise da Comunidade
Para auxiliar a comunidade a responder a este incidente, a StepSecurity organizou um horário de atendimento comunitário no dia 16 de setembro às 13h PT. A gravação está disponível aqui: https://www.youtube.com/watch?v=D9jXoT1rtaQ
Coleta de Credenciais
O malware reutiliza ferramentas de código aberto, como TruffleHog, para escanear o sistema de arquivos em busca de segredos de alta entropia. Ele busca padrões, como chaves da AWS, utilizando expressões regulares como AKIA[0-9A-Z]{16}. Além disso, o malware despeja todo o process.env, capturando tokens transitórios como GITHUB_TOKEN e AWS_ACCESS_KEY_ID.
Persistência do Malware
O malware estabelece persistência injetando um arquivo de fluxo de trabalho do GitHub Actions (.github/workflows/shai-hulud-workflow.yml) via um script Bash codificado em base64. Este fluxo é acionado em eventos de push e exfiltra segredos do repositório usando a expressão ${{ toJSON(secrets) }} para um ponto de controle de comando. O malware cria ramos ao mesclar forçadamente do ramo padrão (refs/heads/shai-hulud) usando o endpoint /git/refs do GitHub.
Exfiltração de Dados
O malware agrega credenciais coletadas em um payload JSON, que é formatado para legibilidade. Em seguida, ele faz upload desses dados em um novo repositório público chamado Shai-Hulud via API do GitHub /user/repos. A natureza pública desses repositórios significa que qualquer atacante pode acessar e potencialmente abusar dessas credenciais, criando um risco secundário além do compromisso inicial.
Mecanismo de Ataque
O compromisso inicia com um pacote JavaScript minificado sofisticado injetado em pacotes afetados como @ctrl/tinycolor. Este não é um malware rudimentar, mas sim um motor modular sofisticado que utiliza pedaços do Webpack para organizar utilitários de SO, SDKs de nuvem e wrappers de API. A carga útil importa seis módulos principais, cada um servindo uma função específica na cadeia de ataque.
Indicadores de Compromisso
Os seguintes indicadores podem ajudar a identificar sistemas afetados por este ataque: busque por queries no GitHub para descobrir repositórios comprometidos, verifique arquivos de workflow maliciosos e identifique chamadas de API suspeitas. O arquivo bundle.js malicioso possui um hash SHA-256 de: 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09.
Ações Imediatas Requeridas
Se você usa algum dos pacotes afetados, tome as seguintes ações imediatamente: identifique e remova pacotes comprometidos, limpe repositórios infectados, remova fluxos de trabalho maliciosos e gire todas as credenciais. Revise a infraestrutura em nuvem para identificar acessos não autorizados.
Monitoramento de Exploração Ativa
Implemente controles de segurança e monitore logs de firewall para conexões com domínios suspeitos. É crucial revisar os logs de auditoria da AWS e do GCP para padrões de acesso a segredos que possam indicar compromissos.
Agradecimentos
A equipe de segurança do npm e os mantenedores dos pacotes por sua rápida resposta a este incidente, bem como os pesquisadores de segurança e membros da comunidade que continuam a colaborar na defesa contra ataques à cadeia de suprimentos.
Confira os últimos vídeos publicados no canal