ataque de confusão de dependência npm alone5511

ataque de confusão de dependência npm alone5511

TL, DR

Entre 1º e 6 de maio de 2026, um único editor npm, alone5511, lançou oito pacotes sem dependências que parecem ter como alvo Microsoft / Namespaces de pacotes internos no estilo Azure.

Os pacotes usavam nomes como cosmos-explorer, ms.analytics-web, icons.generated, latency-tracking-internal, carbonite-internal e carboniteappDiversas versões usaram valores semver altos, como 99.9.0 e 99.9.13, que é uma tática comum de confusão de dependências, projetada para sobrepor-se a pacotes internos privados.

Todos os oito pacotes irmãos já haviam sido removidos do npm pelo editor entre 1º e 6 de maio de 2026. Os metadados do registro direto confirmaram que os arquivos tar agora retornam HTTP 404 da CDN do npm.

No entanto, o agrupamento ainda é importante.

A carga útil nas amostras canônicas, carbonite-internal:99.9.0 e carboniteapp:99.9.0, é executado durante a instalação por meio de um preinstall gancho. Ele coleta dados de impressão digital do host e obtém o endereço IP público da máquina de api.ipify.org, cria um falso “RELATÓRIO DE INTELIGÊNCIA DE NÍVEL PROFISSIONAL” e marca o anfitrião como RCE VERIFIEDe envia o relatório para um bot do Telegram através da API do Telegram Bot.

Alerta Antecipado de Malware (MEW) da Xygeni O sistema classificou as amostras canônicas como provavelmente maliciosas, com uma pontuação acima de 91/100.

Estamos investigando isso como uma campanha interna da Microsoft para confundir dependências de nomes, envolvendo a identificação do host durante a instalação e a exfiltração de dados por meio de beacons do Telegram.

O Cluster: Oito Pacotes, Uma Editora

A conta do editor alone5511 utilizou o endereço de e-mail:

raistargaming703@gmail.com

A conta não tinha e-mail verificado, não. SCM verificação e uma pontuação de reputação npm de 2.

Uma identidade do GitHub referenciada, alonebeast002/beastcrypt, também apareceu no contexto do cluster.

A editora lançou oito pacotes relacionados ao longo de um período de seis dias. Todos os pacotes não tinham dependências e seguiam o mesmo padrão geral: pacote pequeno, script de instalação, identificação do host e beacon do Telegram.

# Pacote Versão Maliciosa Criado, UTC Não publicado, UTC Carga útil confirmada Instalar gancho
1 explorador do cosmos 1.1.3 2026-05-01T18:26Z 2026-05-01T19:01Z Inferido, mesmo editor/cluster pré-instalação, presumida
2 sinaisdk-web 1.0.0, 10.0.0 2026-05-04T13:57Z 2026-05-04T18:51Z Inferido pré-instalação, presumida
3 ms.analytics-web 99.0.0, 99.9.13 2026-05-04T18:47Z 2026-05-05T10:07Z Inferido pré-instalação, presumida
4 ícones.gerados 99.9.13 2026-05-05T10:02Z 2026-05-05T12:57Z Inferido pré-instalação, presumida
5 rastreamento de latência 99.9.0 2026-05-05T11:57Z 2026-05-05T12:57Z Inferido pré-instalação, presumida
6 rastreamento de latência interno Versões removidas do registro 2026-05-06T06:02Z 2026-05-06T08:35Z Inferido pré-instalação, presumida
7 carboniteapp 99.9.0 2026-05-06T05:49Z 2026-05-06T08:35Z Sim, fluxo de código completo do scanner pré-instalação: node index.js
8 carbonita-interna 99.9.0 2026-05-06T06:14Z 2026-05-06T08:36Z Sim, fluxo de código completo do scanner pré-instalação: node index.js

Total de versões maliciosas em todo o cluster: 9+.

Alguns registros de pacotes irmãos tiveram versões removidas após a despublicação, o que limita a reconstrução exata apenas a partir de dados de registros públicos.

Por que os nomes importam

Os nomes das embalagens são o sinal mais forte.

Eles parecem ser pacotes internos de SDK, telemetria, geração de ícones, explorador de arquivos ou rastreamento de latência:

cosmos-explorer
signalsdk-web
ms.analytics-web
icons.generated
latency-tracking
latency-tracking-internal
carbonite-internal
carboniteapp

Essa nomenclatura não é aleatória. Parece calibrada para confusão de dependência.

Diversos pacotes posteriores usaram números de versão elevados:

99.0.0
99.9.0
99.9.13
10.0.0

Isso é importante porque os ataques de confusão de dependências frequentemente se baseiam no fato de pacotes públicos terem versões mais recentes do que pacotes internos de registros privados. Se um sistema de compilação estiver mal configurado, o gerenciador de pacotes pode escolher a versão pública do npm em vez da versão interna pretendida.

A editora também parece estar intensificando seus trabalhos com o tempo.

As primeiras embalagens utilizavam versões com aparência normal, como por exemplo: 1.1.3 e 1.0.0Os pacotes posteriores foram movidos para 99.x.x e 99.9.xEssa mudança é consistente com um agente que ajusta a campanha para otimizar o comportamento de resolução de pacotes internos.

O que acontece durante a instalação?

As amostras canônicas, carbonite-internal:99.9.0 e carboniteapp:99.9.0, declare um preinstall gancho:

 
{
  "scripts": {
    "preinstall": "node index.js"
  }
}

Isso significa que o payload é executado antes que o npm termine de instalar as dependências.

Esta é a forma mais precoce possível de instalação. O desenvolvedor não precisa importar o pacote. A compilação não precisa executar o código do aplicativo. A própria instalação é suficiente.

A carga útil é pequena, em torno de 2.4 KB, e não tem nenhuma função além de emitir sinais.

Comportamento da carga útil

As index.js O arquivo executa quatro ações principais.

Primeiro, ele chama api.ipify.org Para obter o endereço IP público do host:

https://api.ipify.org

Em segundo lugar, ele coleta dados básicos de identificação do host usando as APIs do sistema operacional Node.js:

os.userInfo()
os.hostname()
os.platform()
os.networkInterfaces()
os.uptime()

Terceiro, formata os dados coletados em um relatório de várias linhas com um cabeçalho literal:

PRO-LEVEL INTELLIGENCE REPORT

O relatório termina com:

Status: 🟢 RCE VERIFIED

Em quarto lugar, envia o relatório para o Telegram por meio de um sendTelegram(report) função, usando o endpoint da API do Telegram Bot:

https://api.telegram.org/bot<token>/sendMessage

O token exato do bot do Telegram está preservado dentro dos arquivos tar não publicados e deve ser recuperável do armazenamento interno do npm.

Por que o selo “RCE VERIFIED” é importante

O literal RCE VERIFIED O marcador é operacionalmente revelador.

A carga útil não instala uma porta dos fundos. Ela não persiste. Ela não rouba credenciais da nuvem diretamente. Em vez disso, ela confirma que a execução de código ocorreu durante a instalação do pacote.

Isso é suficiente para uma campanha de prova de execução de confusão de dependências.

Se o atacante receber uma mensagem do Telegram de um ambiente alvo, ele saberá que o pacote npm público foi resolvido e executado dentro de um host real, executor de CI, estação de trabalho de desenvolvedor ou ambiente de compilação.

Em outras palavras, o malware não está apenas coletando metadados do host. Ele está validando se a resolução de pacotes do alvo é explorável.

Classificação Xygeni MEW

Xygeni MEW classificou as amostras canônicas como provavelmente malicioso, com uma pontuação acima de 91/100.

As detecções incluíram:

Gravidade Detecção Significado
Críticas exfiltração de dados sensíveis req.write(data) envia o relatório de impressão digital do host para uma requisição POST de saída do Telegram.
Alto scripts_de_instalação_maliciosos pré-instalação: o arquivo node index.js aciona o beacon durante a instalação.
Baixo solicitação_suspeita Descoberta de IPs públicos através do api.ipify.org
Baixo solicitação_suspeita Endpoint de saída da API do bot do Telegram
Baixo pacote trivial O pacote não tem nenhuma finalidade significativa além de sinalizar.
Info enumeração_dados_sensíveis São enumerados detalhes do host, como tempo de atividade, informações do usuário e nome do host.

Ambos carbonite-internal:99.9.0 e carboniteapp:99.9.0 possuíam cargas úteis idênticas, incluindo o mesmo ID de fluxo de código e scripts de instalação equivalentes em bytes.

O índice de projetos de publicação do MEW classificou todos os oito pacotes como parte do mesmo cluster de publicação/carga útil.

Por que o padrão de autodespublicação é importante

Todos os oito pacotes irmãos foram retirados de publicação pela editora minutos ou horas após a publicação.

Esse comportamento é importante.

Os mantenedores legítimos às vezes removem pacotes das publicações, mas o momento em questão sugere uma ação de limpeza por parte de um atacante. Os pacotes apareceram, executaram seu payload de instalação (caso fosse resolvido pelo alvo) e, em seguida, desapareceram do acesso público ao registro.

Isso cria dois problemas para os defensores.

Primeiro, os metadados públicos do npm ficam incompletos após o unpublish. Alguns registros de versão podem ser removidos ou mais difíceis de reconstruir.

Em segundo lugar, os sistemas de segurança que dependem do estado atual do registro podem não detectar pacotes que estavam presentes durante o período de exposição, mas que já não podem ser instalados.

Por esse motivo, o npm deve preservar internamente os arquivos tar não publicados para fins de análise forense. O bot do Telegram O token dentro dos arquivos tar pode ajudar a enumerar o canal de recebimento e reconstruir possíveis vítimas.

Indicadores de comprometimento e detecção

Editora e Conta

Campo Valor
nome de usuário do npm alone5511
e-mail do editor npm raistargaming703@gmail.com
reputação do npm 2
Email verificado Não
SCM verificado Não
Identidade do GitHub referenciada alonebeast002/beastcrypt

Nomes dos pacotes afetados

cosmos-explorer
signalsdk-web
ms.analytics-web
icons.generated
latency-tracking
latency-tracking-internal
carbonite-internal
carboniteapp

Padrões de versão suspeitos

10.0.0
99.0.0
99.9.0
99.9.13

Essas versões avançadas são especialmente relevantes em investigações de confusão de dependências, pois podem ter precedência sobre versões de pacotes privados.

Pontos finais de rede

Formato Valor
Sondagem de IP público https://api.ipify.org
sumidouro de exfiltração https://api.telegram.org/bot<token>/sendMessage
Método de exfiltração API POST do bot do Telegram

Marcadores de carga útil

Procure nos scripts de instalação por estas strings:

PRO-LEVEL INTELLIGENCE REPORT
Status: 🟢 RCE VERIFIED
sendTelegram(

Sinalize também este padrão de manifesto:

{
  "scripts": {
    "preinstall": "node index.js"
  }
}

Especialmente quando combinado com:

  • Zero dependências
  • Tamanho da embalagem minúsculo
  • Nome de pacote com aparência interna
  • Versão semver alta
  • APIs de identificação de hosts
  • Tráfego da API do bot do Telegram

APIs de identificação de host

A carga útil canônica utiliza:

os.userInfo()
os.hostname()
os.platform()
os.networkInterfaces()
os.uptime()

Também se dirige a:

https://api.ipify.org

para capturar o endereço IP público do host.

Notas de Detecção

Diversas regras podem afetar esta campanha e variantes próximas.

Primeiro, fique atento a scripts de instalação do npm que contatam o Telegram:

api.telegram.org

Um script de instalação de pacote quase nunca deve enviar uma requisição POST para o Telegram. Considere isso como algo hostil, a menos que haja uma exceção muito clara e revisada.

Segundo, bandeira preinstall Scripts em pacotes minúsculos, sem dependências e com nomes que parecem internos.

A combinação de um pacote pequeno, uma versão semver alta e um nome no estilo de namespace interno é um forte sinal de confusão de dependências.

Terceiro, fique atento a nomes de pacotes que se parecem com módulos de engenharia privados publicados por contas públicas do npm com baixa reputação.

Exemplos desse grupo incluem:

ms.analytics-web
latency-tracking-internal
carbonite-internal
icons.generated

Em quarto lugar, procure por referências de arquivos de bloqueio aos oito nomes de pacotes em sistemas de CI e estações de trabalho de desenvolvedores.

Pesquisa:

package-lock.json
yarn.lock
pnpm-lock.yaml
npm-shrinkwrap.json

Qualquer correspondência deve acionar uma revisão de dependências e possíveis confusões.

Ações de registro sugeridas

Este agrupamento já não havia sido publicado no momento da elaboração do relatório. No entanto, a não publicação não elimina o risco.

Ações recomendadas no npm:

  • Confirme se as remoções de publicação foram uma ação de limpeza iniciada pelo atacante ou uma ação legítima do mantenedor.
  • Suspender ou banir a conta do editor alone5511.
  • Adicione o editor, o endereço de e-mail, os nomes dos pacotes e os marcadores de conteúdo às listas de bloqueio de abuso e da cadeia de suprimentos.
  • Conservar amostras de alcatrão não publicadas em armazenamento interno para fins forenses.
  • Extraia o token do bot do Telegram dos arquivos tar preservados.
  • Trabalhe com o Telegram, sempre que possível, para identificar o canal de recebimento e reconstruir a telemetria da possível vítima.

Lista de verificação para resposta a compromissos

Se algum dos pacotes afetados aparecer nos seus arquivos de bloqueio, logs de compilação, cache de pacotes ou histórico de instalação de CI durante o período de exposição, trate-o como um evento de execução de confusão de dependências.

Resposta recomendada:

  • Identifique onde o pacote foi instalado: estação de trabalho local, executor de CI, agente de compilação ou imagem de contêiner.
  • Preserve os arquivos de bloqueio, o cache do npm, os registros de compilação, o histórico do shell e a saída do gerenciador de pacotes.
  • Verifique os registros de rede de saída para api.telegram.org e api.ipify.org durante o período de instalação.
  • Verifique se a instalação foi executada em um ambiente com variáveis ​​sensíveis, credenciais confidenciais ou acesso à rede interna.
  • Rotacione os tokens expostos ao ambiente de instalação se o host for um executor de CI privilegiado ou uma estação de trabalho de desenvolvedor.
  • Configuração de resolução de pacotes de auditoria para evitar confusão entre registros públicos e privados.
  • Impor pacotes privados com escopo definido e fixação de registro.
  • Bloquear pacotes públicos não aprovados que correspondam a padrões de nomenclatura internos.
  • Adicione guardrails para scripts de instalação, especialmente preinstall, install e postinstall.

O que os defensores devem levar consigo

Esta campanha não é tecnicamente complexa. É exatamente por isso que ela é importante.

A carga útil é pequena, direta e fácil de executar. O atacante não precisa de persistência ou malware avançado. Ele precisa apenas de um caminho de resolução de pacotes mal configurado.

O verdadeiro risco é a confusão de dependências.

Um pacote com um nome interno familiar, um número de versão alto e um preinstall O gancho pode transformar um normal em algo normal. npm install transformando-se em um farol a partir do seu ambiente.

Para DevSecOps Para as equipes, a lição é clara: nomes de pacotes internos são ativos sensíveis. Trate-os como superfície de ataque.

Reportado ao npm para aplicação de medidas em nível de conta, inclusão em listas de bloqueio e preservação de arquivos tarball não publicados.

sca-tools-software-composição-análise-ferramentas
Priorize, corrija e proteja seus riscos de software
você recebe uma avaliação gratuita de 7 dias da nossa licença Business Edition e pode aproveitar alguns dos recursos avançados da plataforma SecurityScorecard.
Não é necessário cartão de crédito

Proteja seu desenvolvimento e entrega de software

com o Suíte de Produtos da Xygeni