hacker-3480124_640.jpg

Pacotes npm maliciosos com payload Shai-Hulud

Uma nova onda de pacotes maliciosos no repositório npm está roubando credenciais de desenvolvedores que trabalham com infraestrutura em nuvem e serverless, ao mesmo tempo em que expande seu alcance para o ecossistema Leo/RStreams, um conjunto de bibliotecas usado para processamento de dados e streaming de eventos nativos da AWS.

Os pacotes comprometidos registraram aproximadamente 45 mil downloads em um único mês, expondo potencialmente milhares de desenvolvedores sem que eles soubessem, conforme relatório publicado hoje pela equipe de pesquisa da JFrog Securitys. O pesquisador Yair Benamou observou que esta não é uma ameaça completamente nova, mas mais uma evolução da mesma campanha, com a mesma maquinaria de roubo de credenciais, agora direcionada a novos alvos e com marcadores atualizados.

Mecanismo de entrega e coleta de dados

Os pacotes maliciosos utilizam um truque de entrega que os ajuda a escapar de scanners de segurança básicos. Em vez de colocar código malicioso nos scripts padrão de instalação do npm, o atacante esconde a execução em um arquivo chamado binding.gyp. Quando o npm encontra um pacote com este arquivo e nenhum script de instalação explícito, ele executa automaticamente o node-gyp, que processa comandos shell embutidos no arquivo. O payload coleta credenciais armazenadas em arquivos, variáveis de ambiente, histórico do shell, tokens do GitHub CLI, chaves de acesso à nuvem e segredos de pipelines CI/CD. Todo dado roubado é empacotado em arquivos criptografados e exfiltrado por meio da criação de repositórios sob um token GitHub roubado, técnica conhecida como GitHub dead drop.

O payload não para durante a instalação. Ele planta vários hooks de persistência para continuar rodando após a instalação inicial, configurando-se como um serviço systemd no Linux ou um LaunchAgent no macOS, além de modificar arquivos de configuração de ferramentas de desenvolvimento de IA como Cursor, Copilot e Gemini. Chaves SSH encontradas na máquina comprometida são usadas para movimento lateral a outros sistemas, e o payload também se injeta em workflows do GitHub Actions para capturar segredos de pipeline.

Recomendações e indicadores de comprometimento

A JFrog recomenda isolar máquinas afetadas e runners de CI antes de rotacionar quaisquer credenciais. Todos os artefatos de persistência, incluindo o serviço monitor, hooks de ferramentas de IA e arquivos de workflow suspeitos, devem ser removidos primeiro. Após a limpeza, credenciais do GitHub, npm, nuvem, SSH, Docker e registros de pacotes devem ser rotacionadas. Contas GitHub e npm também devem ser auditadas para repositórios inesperados, lançamentos de pacotes ou alterações suspeitas em workflows.

Entre os indicadores de comprometimento estão as versões maliciosas dos pacotes leo-auth v4.0.6leo-aws v2.0.4leo-streams v2.0.1, e mais 15 pacotes da família Leo/RStreams. Indicadores de rede incluem URLs da API da Anthropic e do GitHub usados para comunicação e exfiltração. O arquivo ~/.config/systemd/user/gh-token-monitor.service no Linux e ~/Library/LaunchAgents/com.user.gh-token-monitor.plist no macOS são indicadores de persistência.