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.orgeapi.ipify.orgdurante 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,installepostinstall.
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.





