Recentemente, a comunidade NPM foi novamente atingida por um grande incidente de envenenamento de pacotes NPM. Este incidente está altamente relacionado com o ataque Shai-Hulud de setembro de 2025. O código malicioso nos pacotes NPM desta vez rouba chaves de desenvolvedor, chaves de API e outras informações sensíveis, utilizando essas chaves para criar repositórios públicos e fazer upload dessas informações sensíveis roubadas.
SlowMist( Ferramenta de monitoramento de segurança dinâmica e inteligência de ameaças Web3 desenvolvida internamente, o MistEye responde em tempo real, enviando rapidamente informações de ameaças relacionadas, fornecendo segurança crítica aos clientes.
Tomando como exemplo o pacote @asyncapi/php-template@0.1.1, ao comparar com a versão anterior @asyncapi/php-template@0.1.0, pode-se notar que a versão 0.1.1 adicionou dois arquivos js, que são setup_bun.js e o arquivo bun_environment.js ofuscado.
No setup_bun.js, primeiro será verificado se o Bun já está instalado no sistema. Se não estiver instalado, será baixado e instalado automaticamente do site oficial, e as variáveis de ambiente serão configuradas corretamente para encontrar o executável do Bun.
Por fim, execute o arquivo bun_environment.js usando bun, que é um arquivo malicioso altamente ofuscado.
Após a desofuscação de parte do código do script malicioso, pode-se saber que a função principal de todo o script malicioso é a aL0)(. É possível perceber que este script malicioso realiza o roubo de informações sensíveis, primeiro verificando o ambiente de execução para ver se existem credenciais do NPM ou GitHub. Se essas credenciais forem detectadas, ele utilizará as credenciais do NPM para a propagação na cadeia de suprimentos, e todas as informações do sistema coletadas e dados sensíveis serão, por fim, empacotados e enviados para um repositório do GitHub controlado pelo atacante, para uso posterior.
Roubo de credenciais
AWS: Este script malicioso implementa os métodos runSecrets)( e listAndRetrieveAllSecrets)(. O método runSecrets)( irá percorrer todas as credenciais de acesso à nuvem que conseguir encontrar, bem como todas as regiões possíveis, maximizando o alcance da varredura; enquanto listAndRetrieveAllSecrets)( realiza uma “mineração profunda” nas credenciais e regiões especificadas, listando todos os Secrets e obtendo seu conteúdo em texto claro mais recente. Combinados, os dois permitem que o atacante exporte todos os SecretString e SecretBinary acessíveis na conta AWS da vítima de uma só vez.
A função enumerateValidCredentials)( é principalmente utilizada para coletar de forma abrangente todas as chaves de serviço em nuvem válidas. Ela tenta uma a uma várias fontes, como variáveis de ambiente, arquivos de configuração e login via CLI, registrando todas as credenciais que forem verificadas com sucesso, para serem utilizadas posteriormente na captura de segredos na nuvem.
GCP: Outro método listAndRetrieveAllSecrets)( implementado neste script malicioso é principalmente para o módulo GCP, que primeiro lista todos os Secrets no projeto GCP especificado com base no Project ID fornecido, em seguida, localiza diretamente a versão mais recente de cada Secret e chama accessSecretVersion para ler seu conteúdo em texto claro. No final, todos os segredos obtidos (como chaves de API, senhas de banco de dados, etc.) são coletados um a um.
Azure: O outro método listAndRetrieveAllSecrets)( implementado neste script malicioso é especificamente direcionado ao módulo Azure. Primeiro, ele escaneia toda a assinatura através do Azure Resource Manager para encontrar todos os Key Vault; em seguida, usa as credenciais obtidas para conectar-se a cada Vault individualmente; finalmente, enumera todos os Secrets dentro deles e chama getSecret para obter o valor em texto claro de cada segredo.
Na implementação do roubo de informações sensíveis, também são usados ferramentas de segurança legítimas para atacar as vítimas. No método extractAndInstall)(, os arquivos binários do TruffleHog são descompactados e extraídos; o TruffleHog, que originalmente é utilizado para detectar e validar informações confidenciais vazadas em repositórios de código, como chaves de API e credenciais, é utilizado pelos atacantes para escanear todo o sistema de arquivos da vítima.
O script malicioso implementa uma função updatePackage###( para a propagação da cadeia de suprimentos do NPM. Primeiro, utiliza um NPM Token roubado para baixar o código-fonte de pacotes NPM legítimos que a vítima tem permissão para publicar, em seguida, modifica o arquivo package.json, inserindo um comando de script malicioso no campo scripts. Ao mesmo tempo, o script malicioso é colocado no pacote, aumentando automaticamente o número da versão do pacote em 1, a fim de acionar a atualização automática do usuário, enviando o pacote NPM com o script malicioso para o repositório oficial do NPM.
Após roubar as informações, o atacante irá utilizar o GitHub Token roubado para criar um repositório com um nome aleatório na sua conta e obter um token de registro, disfarçando o computador da vítima como um GitHub Actions Runner auto-hospedado desse repositório. Em seguida, o atacante insere um fluxo de trabalho malicioso no repositório, fazendo com que qualquer tarefa de Actions acionada seja executada na máquina da vítima, permitindo assim a execução remota de código.
E faça o upload dessas informações roubadas, que foram codificadas em base64 duplamente, para o repositório criado, cuja descrição é “Sha1-Hulud: The Second Coming.”.
O envenenamento do repositório NPM desta vez combinou a persistência de worms e programas autônomos de longa duração, utilizando o TruffleHog para ataque. A equipe de segurança da Slow Fog recomenda que os desenvolvedores adotem uma estratégia de bloqueio de versão de pacotes de dependência ao construir e lançar novas iterações. Se houver atualizações de segurança ou funcionalidade necessárias para os pacotes de dependência, elas devem ser atualizadas por meio de um rigoroso processo de auditoria de segurança interno e a versão bloqueada deve ser atualizada simultaneamente, evitando atualizações cegas que introduzam novos riscos.
Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
Análise de envenenamento de NPM — Repetição do ataque Shai-Hulud
Autor: Joker & Ccj
Contexto
Recentemente, a comunidade NPM foi novamente atingida por um grande incidente de envenenamento de pacotes NPM. Este incidente está altamente relacionado com o ataque Shai-Hulud de setembro de 2025. O código malicioso nos pacotes NPM desta vez rouba chaves de desenvolvedor, chaves de API e outras informações sensíveis, utilizando essas chaves para criar repositórios públicos e fazer upload dessas informações sensíveis roubadas.
SlowMist( Ferramenta de monitoramento de segurança dinâmica e inteligência de ameaças Web3 desenvolvida internamente, o MistEye responde em tempo real, enviando rapidamente informações de ameaças relacionadas, fornecendo segurança crítica aos clientes.
![])https://img-cdn.gateio.im/social/moments-159684ebd67ca55d47335ddbd42018c3(
![])https://img-cdn.gateio.im/social/moments-bd2aba046f0a86aca7e1abd2b72e9eed(
Ao mesmo tempo, o backend irá salvar amostras maliciosas imediatamente e calcular seus valores de característica correspondentes, como SHA-256.
![])https://img-cdn.gateio.im/webp-social/moments-0c04f20f1376390bdc04bad915d660b6.webp(
Processo de Análise
Tomando como exemplo o pacote @asyncapi/php-template@0.1.1, ao comparar com a versão anterior @asyncapi/php-template@0.1.0, pode-se notar que a versão 0.1.1 adicionou dois arquivos js, que são setup_bun.js e o arquivo bun_environment.js ofuscado.
![])https://img-cdn.gateio.im/webp-social/moments-45994a147ca5cec569400f4833f14468.webp(
Foi adicionado um script preinstall no package.json, que executa automaticamente o setup_bun.js antes da instalação das dependências.
![])https://img-cdn.gateio.im/webp-social/moments-45e344c5a0d73a61db9f267eae229bc6.webp(
No setup_bun.js, primeiro será verificado se o Bun já está instalado no sistema. Se não estiver instalado, será baixado e instalado automaticamente do site oficial, e as variáveis de ambiente serão configuradas corretamente para encontrar o executável do Bun.
Por fim, execute o arquivo bun_environment.js usando bun, que é um arquivo malicioso altamente ofuscado.
![])https://img-cdn.gateio.im/webp-social/moments-44505da1b8a0d007a2a0c1cf3b0472ca.webp(
Após a desofuscação de parte do código do script malicioso, pode-se saber que a função principal de todo o script malicioso é a aL0)(. É possível perceber que este script malicioso realiza o roubo de informações sensíveis, primeiro verificando o ambiente de execução para ver se existem credenciais do NPM ou GitHub. Se essas credenciais forem detectadas, ele utilizará as credenciais do NPM para a propagação na cadeia de suprimentos, e todas as informações do sistema coletadas e dados sensíveis serão, por fim, empacotados e enviados para um repositório do GitHub controlado pelo atacante, para uso posterior.
Roubo de credenciais
AWS: Este script malicioso implementa os métodos runSecrets)( e listAndRetrieveAllSecrets)(. O método runSecrets)( irá percorrer todas as credenciais de acesso à nuvem que conseguir encontrar, bem como todas as regiões possíveis, maximizando o alcance da varredura; enquanto listAndRetrieveAllSecrets)( realiza uma “mineração profunda” nas credenciais e regiões especificadas, listando todos os Secrets e obtendo seu conteúdo em texto claro mais recente. Combinados, os dois permitem que o atacante exporte todos os SecretString e SecretBinary acessíveis na conta AWS da vítima de uma só vez.
![])https://img-cdn.gateio.im/webp-social/moments-3c33d90aa4bd49b2d8304f07d9cf0c78.webp(
A função enumerateValidCredentials)( é principalmente utilizada para coletar de forma abrangente todas as chaves de serviço em nuvem válidas. Ela tenta uma a uma várias fontes, como variáveis de ambiente, arquivos de configuração e login via CLI, registrando todas as credenciais que forem verificadas com sucesso, para serem utilizadas posteriormente na captura de segredos na nuvem.
![])https://img-cdn.gateio.im/webp-social/moments-18502e3837d4a198101e4f71f742d424.webp(
GCP: Outro método listAndRetrieveAllSecrets)( implementado neste script malicioso é principalmente para o módulo GCP, que primeiro lista todos os Secrets no projeto GCP especificado com base no Project ID fornecido, em seguida, localiza diretamente a versão mais recente de cada Secret e chama accessSecretVersion para ler seu conteúdo em texto claro. No final, todos os segredos obtidos (como chaves de API, senhas de banco de dados, etc.) são coletados um a um.
![])https://img-cdn.gateio.im/webp-social/moments-bad2067511f01dd442e955c89db61dc9.webp(
Azure: O outro método listAndRetrieveAllSecrets)( implementado neste script malicioso é especificamente direcionado ao módulo Azure. Primeiro, ele escaneia toda a assinatura através do Azure Resource Manager para encontrar todos os Key Vault; em seguida, usa as credenciais obtidas para conectar-se a cada Vault individualmente; finalmente, enumera todos os Secrets dentro deles e chama getSecret para obter o valor em texto claro de cada segredo.
![])https://img-cdn.gateio.im/social/moments-9176712c5d0ed04eeb1ee93411f8af42(
Na implementação do roubo de informações sensíveis, também são usados ferramentas de segurança legítimas para atacar as vítimas. No método extractAndInstall)(, os arquivos binários do TruffleHog são descompactados e extraídos; o TruffleHog, que originalmente é utilizado para detectar e validar informações confidenciais vazadas em repositórios de código, como chaves de API e credenciais, é utilizado pelos atacantes para escanear todo o sistema de arquivos da vítima.
![])https://img-cdn.gateio.im/webp-social/moments-45e2049fa39e4d26acd79661c664ca21.webp(
) NPM cadeia de suprimentos
O script malicioso implementa uma função updatePackage###( para a propagação da cadeia de suprimentos do NPM. Primeiro, utiliza um NPM Token roubado para baixar o código-fonte de pacotes NPM legítimos que a vítima tem permissão para publicar, em seguida, modifica o arquivo package.json, inserindo um comando de script malicioso no campo scripts. Ao mesmo tempo, o script malicioso é colocado no pacote, aumentando automaticamente o número da versão do pacote em 1, a fim de acionar a atualização automática do usuário, enviando o pacote NPM com o script malicioso para o repositório oficial do NPM.
![])https://img-cdn.gateio.im/social/moments-f2c1d619c8b8a125a018a4990e47e144(
) backdoor and C2
Após roubar as informações, o atacante irá utilizar o GitHub Token roubado para criar um repositório com um nome aleatório na sua conta e obter um token de registro, disfarçando o computador da vítima como um GitHub Actions Runner auto-hospedado desse repositório. Em seguida, o atacante insere um fluxo de trabalho malicioso no repositório, fazendo com que qualquer tarefa de Actions acionada seja executada na máquina da vítima, permitindo assim a execução remota de código.
![]###https://img-cdn.gateio.im/webp-social/moments-547cfd5eb9ee4614a975d1f574583495.webp(
E faça o upload dessas informações roubadas, que foram codificadas em base64 duplamente, para o repositório criado, cuja descrição é “Sha1-Hulud: The Second Coming.”.
![])https://img-cdn.gateio.im/webp-social/moments-6bad80b5f904d7c25fa993600ff2a710.webp(
Após a descriptação, é possível ver os dados sensíveis que o usuário vazou.
![])https://img-cdn.gateio.im/social/moments-73bf3f27df82dfd50c02ff7c42e746af(
![])https://img-cdn.gateio.im/webp-social/moments-aefb641fee19ee0ad471234e3d5aa081.webp(
![])https://img-cdn.gateio.im/social/moments-ea2062526e3489a6cfd6fcbebd94605c(
Resumo
O envenenamento do repositório NPM desta vez combinou a persistência de worms e programas autônomos de longa duração, utilizando o TruffleHog para ataque. A equipe de segurança da Slow Fog recomenda que os desenvolvedores adotem uma estratégia de bloqueio de versão de pacotes de dependência ao construir e lançar novas iterações. Se houver atualizações de segurança ou funcionalidade necessárias para os pacotes de dependência, elas devem ser atualizadas por meio de um rigoroso processo de auditoria de segurança interno e a versão bloqueada deve ser atualizada simultaneamente, evitando atualizações cegas que introduzam novos riscos.