Aikido

Caindo no Phishing: Pacotes npm Servindo Páginas Personalizadas de Coleta de Credenciais

Escrito por
Charlie Eriksen

Em 20/01/2026 às 18:03 UTC, nosso sistema começou a nos alertar sobre um novo npm package chamado flockiali. Em 26 minutos, o atacante publicou quatro versões. Dois dias depois, eles iniciaram uma série de publicações: opresc, prndn, oprnm, e operni. Quando analisamos mais de perto, descobrimos uma campanha de spear-phishing altamente direcionada atingindo funcionários de empresas industriais e de energia na Europa, Oriente Médio e Estados Unidos.

E o mecanismo de entrega? npm + jsDelivr. Porque hospedar sua própria infraestrutura de phishing quando você pode se aproveitar do CDN de outra pessoa?

O que encontramos

Os pacotes contêm um único arquivo JavaScript que, quando carregado, substitui completamente a página da web por um kit de phishing. Mas o que torna isso interessante é: cada versão tem como alvo uma pessoa específica.

Encontramos cinco alvos em cinco empresas:

  • flockiali A v1.2.5 tem como alvo alguém da CQFD Composites, uma fabricante francesa de compósitos
  • flockiali A v1.2.6 tem como alvo alguém da Ingeteam, uma empresa espanhola de turbinas eólicas
  • opresc A v1.0.0 tem como alvo alguém da Emagine, uma empresa de carregamento de veículos elétricos dos Emirados Árabes Unidos
  • prndn e oprnm ambas têm como alvo a mesma pessoa na Amixon GmbH, uma empresa alemã de mistura industrial
  • operni A v1.2.7 tem como alvo alguém da CMC America, uma empresa americana de equipamentos de panificação

O atacante não está agindo de forma indiscriminada. Eles estão publicando novos pacotes para cada alvo. E quando um alvo é particularmente interessante, eles publicam múltiplos pacotes com diferentes caminhos de entrega.

O fluxo do ataque

Veja o que acontece quando uma vítima abre o link de phishing.

A página carrega mostrando uma interface falsa de compartilhamento de arquivos "Micro-Share":

📁 Micro-Share
   compartilhamento seguro de arquivos
   Documentos compartilhados com segurança, por favor, verifique seu e-mail e continue.
   Os seguintes documentos foram compartilhados com segurança com [victim]@ingeteam.com

   📄 Specification.pdf
      - RFQ.pdf
      - Project descriptions.pdf
      - destino final do equipamento.pdf

                    [ Baixar ]

Os documentos são temáticos de engenharia: RFQs, especificações de projeto, arquivos CAD. Exatamente o que se esperaria que alguém de uma empresa industrial recebesse.

Quando a vítima clica em "Baixar", a página transiciona para uma tela de login com a marca Microsoft:

⊞ Microsoft

Entrar

⚠ Autenticação necessária. Clique em próximo para entrar e continuar o download.

┌────────────────────────────────────────┐
│ [victim]@ingeteam.com                  │  (somente leitura)
└────────────────────────────────────────┘

Não tem conta? Crie uma
Não consegue acessar sua conta?

                              [ Próximo ]

O e-mail da vítima já está preenchido e marcado como somente leitura. Quando clicam em "Próximo", são redirecionados para o servidor de coleta de credenciais:

window"https://login.siemensergy[.]icu/DIVzTaSF";

Exato, siemensergy[.]icu. Isso é um typosquat da Siemens Energy. O atacante claramente fez sua lição de casa sobre com quem seus alvos fazem negócios.

Truques anti-bot

O kit de phishing não está de brincadeira. Ele inclui diversas técnicas para evitar análises automatizadas.

Ele verifica por WebDriver (navigator.webdriver), listas de plugins vazias e dimensões de tela zero. Ele filtra user-agents que correspondem a /bot|crawl|spider|headless|HeadlessChrome/i. Ele inclui campos de formulário honeypot que, se preenchidos por bots, acionam o kill switch. E o botão de download permanece desabilitado até que a página detecte movimento do mouse ou eventos de toque. Sem interação, sem phishing.

v1.2.5 vai além com um analisador de trajetória de mouse surpreendentemente sofisticado:

isLegitimateTrajectory() {
  if (this.mouseTrail.length < 20) return false;
  const t = this.mouseTrail.slice(-10);
  const variance = t.reduce((acc, p) => 
    acc + Math.pow(p.x - t[0].x, 2), 0) / 10;
  return variance > 100;
}

Isso calcula a variância das últimas 10 posições do mouse. Se o seu cursor se moveu em uma linha suspeitosamente reta (como um bot faria), a variância permanece baixa e o botão nunca é ativado. Humanos reais se movem de forma irregular.

Alguém dedicou um esforço considerável a este kit de phishing.

Cinco pacotes, cinco alvos, dois modelos

As versões do payload não estão apenas visando pessoas diferentes. Elas usam dois designs de kit de phishing diferentes.

O v1.2.5 o payload (visando a CQFD Composites) usa a marca "MicroSecure Pro" com um gradiente roxo e fonte Inter. Ele exibe arquivos CAD e entregáveis de engenharia como isca, possui o sofisticado analisador de trajetória do mouse e envia credenciais para oprsys.deno[.]dev.

O restante (v1.2.6, opresc, prndn, oprnm, operni) usam um design "Micro-Share" mais limpo, com fundos brancos e Segoe UI. Eles exibem RFQs e especificações de projeto, usam verificações de interação básicas e enviam credenciais para os typosquats da Siemens Energy.

O v1.2.5 o kit é mais chamativo, com animações e fundos gradientes. Os kits mais recentes são mais minimalistas, mais próximos da aparência real da Microsoft. Talvez o atacante tenha feito testes A/B e descoberto que designs mais simples convertem melhor. Ou talvez estejam apenas iterando.

O payload da CMC America (operni) possui iscas de documentos personalizadas para a indústria alimentícia: "Especificações de produtos e detalhes de ingredientes", "Metas de capacidade de produção e parâmetros operacionais". O atacante está personalizando sua isca.

O que é interessante é a escolha do C2. Todos os alvos recentes são enviados para os typosquats da Siemens Energy. Isso não é aleatório. A Ingeteam fabrica turbinas eólicas. A Emagine atua na infraestrutura de carregamento de veículos elétricos. A Amixon e a CMC America fabricam equipamentos de mistura industrial (a Amixon inclusive trabalha com materiais para baterias). Todas operam em mercados onde a Siemens Energy é um player importante. O atacante pesquisou os relacionamentos comerciais de seus alvos.

Observe a evolução sutil: siemensergy[.]icu (sem hífen) tornou-se siemens-energy[.]icu (com hífen). A segunda variante está mais próxima do domínio real siemens-energy[.]com domínio. Confirmamos via DNS que o domínio sem hífen não possui nenhum registro. O atacante o abandonou.

A infraestrutura conta uma história

É aqui que fica interessante. Usamos logs de transparência de certificados para verificar quando a infraestrutura C2 foi configurada. O primeiro certificado SSL para *.siemens-energy[.]icu foi emitido em 24 de outubro de 2025. Em seguida, renovações em 14, 16 e 17 de janeiro. A campanha npm começou em 20 de janeiro.

O atacante registrou o domínio e obteve certificados SSL três meses antes do aparecimento dos pacotes npm. Pense nisso. Isso não é oportunista. Alguém planejou esta operação, configurou a infraestrutura em outubro de 2025 e depois esperou.

O servidor C2 (163.123.236[.]118) é hospedado pela RackGenius, um pequeno provedor de hospedagem em Muskegon, Michigan. Enquanto isso, o payload mais antigo v1.2.5 payload usa oprsys.deno[.]dev, que se resolve para a infraestrutura do Google Cloud (Deno Deploy). Hospedagem serverless gratuita para phishing. Clássico. Notificamos a equipe Deno sobre esta campanha quando a observamos, e eles foram muito rápidos em derrubá-la. 

Por que npm + jsDelivr?

O package.json conta a história:

{
  "keywords": ["jsdelivr", "cdn", "template"],
  "main": "resp/template.min.js"
}

jsDelivr espelha automaticamente pacotes npm. Publique no npm, obtenha hospedagem CDN instantânea em cdn.jsdelivr[.]net/npm/flockiali@1.2.6/resp/template.min.js. Sem servidores para manter, sem hospedagem para pagar, e a vítima vê uma URL de CDN com aparência legítima em vez de um domínio de phishing suspeito.

A linha do tempo

20 de janeiro (quatro versões em 26 minutos):

  • 18:03 UTC: flockiali v1.2.3 (placeholder vazio)
  • 18:10 UTC: flockiali v1.2.4 (atualização de metadados)
  • 18:15 UTC: flockiali v1.2.5 (alvo CQFD Composites)
  • 18:29 UTC: flockiali v1.2.6 (alvo Ingeteam)

22 de janeiro (mais cinco pacotes):

  • 09:52 UTC: opresc v1.0.0 (alvo Emagine)
  • 12:29 UTC: prndn v1.0.0 (alvo Amixon)
  • 12:49 UTC: oprnm v1.0.0 (Amixon novamente)
  • 13:11 UTC: operni v1.2.6 (quebrado, vazio)
  • 13:16 UTC: operni v1.2.7 (alvo CMC America)

O atacante tem uma lista de alvos e está trabalhando nela. O funcionário da Amixon recebeu dois pacotes com 20 minutos de diferença (exagero, não?). O pacote da CMC America tinha um erro de digitação (reps/ em vez de resp/) e uma primeira versão com falha. Ops. Este atacante está agindo rápido e cometendo erros.

O que você deve fazer?

Se você está em uma das empresas-alvo, verifique se alguém recebeu links para URLs do jsDelivr ou clicou em algo relacionado ao compartilhamento de documentos "Micro-Share".

Pesquise nos logs de e-mail por links contendo cdn.jsdelivr[.]net/npm/flockiali, cdn.jsdelivr[.]net/npm/opresc, cdn.jsdelivr[.]net/npm/prndn, cdn.jsdelivr[.]net/npm/oprnm, ou cdn.jsdelivr[.]net/npm/operni. Bloqueie os domínios IOC em seu perímetro. Se as credenciais foram inseridas, rotacione-as imediatamente.

Indicadores de Comprometimento

Domínios C2:

  • login.siemens-energy[.]icu (163.123.236[.]118, RackGenius)
  • login.siemensergy[.]icu (abandonado, sem DNS)
  • oprsys.deno[.]dev (34.120.54[.]55, Deno Deploy)

URLs de Phishing:

  • https://login.siemensergy[.]icu/DIVzTaSF
  • https://login.siemens-energy[.]icu/DIVzTaSF

URLs jsDelivr:

  • hxxps://cdn.jsdelivr[.]net/npm/flockiali@1.2.6/resp/template.min.js
  • hxxps://cdn.jsdelivr[.]net/npm/flockiali@1.2.5/resp/template.min.js
  • hxxps://cdn.jsdelivr[.]net/npm/opresc@1.0.0/resp/template.min.js
  • hxxps://cdn.jsdelivr[.]net/npm/prndn@1.0.0/template.min.js
  • hxxps://cdn.jsdelivr[.]net/npm/oprnm@1.0.0/resp/template.min.js
  • hxxps://cdn.jsdelivr[.]net/npm/operni@1.2.7/reps/template.min.js

Pacotes:

  • flockiali (1.2.3-1.2.6)
  • opresc (1.0.0)
  • prndn (1.0.0)
  • oprnm (1.0.0)
  • operni (1.2.6-1.2.7)

Hashes de payload (SHA256):

  • 3ceb182fb32a8fb0f0fcf056d6ab8de1cf6e789053f1aadc98ba315ae9a96f0c – flockiali 1.2.6
  • fdb6c79a8d01b528698c53ebd5030f875242e6af93f6ae799dee7f66b452bf3e – flockiali 1.2.5
  • 4631584783d84758ae58bc717b08ac67d99dee30985db18b9d2b08df8721348e – opresc
  • 211f88a55e8fe9254f75c358c42bb7e78e014b862de7ea6e8b80ed1f78d13add – prndn/oprnm
  • 7d7f795ac1fcb5623731a50999f518877fd423a5a98219d0f495c488564a1554 – operni 1.2.7

Compartilhar:

https://www.aikido.dev/blog/npm-supply-chain-phishing-campaigns

Assine para receber notícias sobre ameaças.

Comece hoje, gratuitamente.

Comece Gratuitamente
Não é necessário cc
4.7/5
Cansado de falsos positivos?
Experimente Aikido outras 100 mil pessoas.
Começar Agora
Obtenha um guia personalizado

Confiado por mais de 100 mil equipas

Agende Agora
Analise a sua aplicação em busca de IDORs e caminhos de ataque reais

Confiado por mais de 100 mil equipas

Iniciar digitalização
Veja como a IA testa a segurança da sua aplicação

Confiado por mais de 100 mil equipas

Começar o teste

Fique seguro agora

Proteja seu código, Cloud e runtime em um único sistema centralizado.
Encontre e corrija vulnerabilidades rapidamente de forma automática.

Não é necessário cartão de crédito | Resultados da varredura em 32 segundos.