Registrada a segunda ataque a pacotes no repositório NPM, realizado com a modificação do worm de auto-replicação Shai-Hulud, que insere malware nas dependências. Como resultado do ataque, foram publicados lançamentos maliciosos de 605 pacotes, totalizando mais de 100 milhões de downloads.
Para realizar o ataque, os criminosos interceptaram, através de phishing, os parâmetros da conta de um mantenedor de um dos pacotes populares usado como dependência por muitos pacotes. Aproveitando a conta capturada, os atacantes publicaram uma nova versão do pacote, à qual foi adicionado um código para ativar o worm ao instalar o pacote comprometido entre as dependências. O worm ativado procura credenciais no ambiente atual, baixando e executando a ferramenta TruffleHog.
Se um token de conexão ao diretório NPM for detectado, o worm automaticamente publica novos lançamentos maliciosos para pacotes desenvolvidos no ambiente atual. Dessa forma, toda a árvore de dependências é comprometida em sequência. Além do token NPM, o worm salva chaves de acesso ao GitHub e serviços em nuvem como AWS, Azure e GCP (Google Cloud Platform), além de variáveis de ambiente e outros dados confidenciais que podem ser detectados pelo scanner TruffleHog.
Os dados confidenciais encontrados no sistema são hospedados no GitHub através da criação de repositórios com nomes aleatórios (por exemplo, "qzx15djl71alh6p80h") e a frase "Sha1-Hulud: The Second Coming" na descrição, além de serem exibidos em formato codificado nos logs do GitHub Actions. No repositório criado, é adicionado um arquivo em formato JSON (por exemplo, jsonactionsSecrets.json ou contents.json), que contém uma linha com informações codificadas em base64 sobre o sistema, variáveis de ambiente e dados capturados. Para transmitir informações de fora dos sistemas de integração contínua baseados no GitHub, o worm cria um manipulador do GitHub Actions chamado ".github/workflows/formatter_123456789.yml" e configura um runner chamado SHA1HULUD.
As diferenças em relação ao ataque semelhante de setembro se resumem a um método diferente de inserção de código malicioso no pacote. Nos lançamentos maliciosos gerados pelo worm, é declarada a implementação do suporte à plataforma JavaScript Bun. No arquivo package.json, na seção "preinstall", que define os scripts executados antes do início da instalação, é adicionada a comando "node setup_bun.js".

O arquivo "setup_bun.js" contém código para executar um script ofuscado chamado "bun_environment.js", que inclui código de worm. Para se propagar, o worm procura código de pacotes, faz alterações no arquivo package.json (aumenta o número da versão e inclui a chamada para setup_bun.js), adiciona os arquivos setup_bun.js e bun_environment.js, reempacota o pacote e executa o comando "npm publish" para publicar a nova versão.
Entre os pacotes populares comprometidos estão: @zapier/zapier-sdk (2,8 milhões de downloads por semana), @posthog/core (2,8 milhões), posthog-node (1,5 milhões), @asyncapi/specs (1,4 milhões), @postman/tunnel-agent (1,2 milhões). Presume-se que o ataque começou com a compromissão do pacote acompanhante @asyncapi/specs.
Fonte: opennet.ru
