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:
flockialiA v1.2.5 tem como alvo alguém da CQFD Composites, uma fabricante francesa de compósitosflockialiA v1.2.6 tem como alvo alguém da Ingeteam, uma empresa espanhola de turbinas eólicasoprescA v1.0.0 tem como alvo alguém da Emagine, uma empresa de carregamento de veículos elétricos dos Emirados Árabes Unidosprndneoprnmambas têm como alvo a mesma pessoa na Amixon GmbH, uma empresa alemã de mistura industrialoperniA 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:
flockialiv1.2.3 (placeholder vazio) - 18:10 UTC:
flockialiv1.2.4 (atualização de metadados) - 18:15 UTC:
flockialiv1.2.5 (alvo CQFD Composites) - 18:29 UTC:
flockialiv1.2.6 (alvo Ingeteam)
22 de janeiro (mais cinco pacotes):
- 09:52 UTC:
oprescv1.0.0 (alvo Emagine) - 12:29 UTC:
prndnv1.0.0 (alvo Amixon) - 12:49 UTC:
oprnmv1.0.0 (Amixon novamente) - 13:11 UTC:
operniv1.2.6 (quebrado, vazio) - 13:16 UTC:
operniv1.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/DIVzTaSFhttps://login.siemens-energy[.]icu/DIVzTaSF
URLs jsDelivr:
hxxps://cdn.jsdelivr[.]net/npm/flockiali@1.2.6/resp/template.min.jshxxps://cdn.jsdelivr[.]net/npm/flockiali@1.2.5/resp/template.min.jshxxps://cdn.jsdelivr[.]net/npm/opresc@1.0.0/resp/template.min.jshxxps://cdn.jsdelivr[.]net/npm/prndn@1.0.0/template.min.jshxxps://cdn.jsdelivr[.]net/npm/oprnm@1.0.0/resp/template.min.jshxxps://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.6fdb6c79a8d01b528698c53ebd5030f875242e6af93f6ae799dee7f66b452bf3e– flockiali 1.2.54631584783d84758ae58bc717b08ac67d99dee30985db18b9d2b08df8721348e– opresc211f88a55e8fe9254f75c358c42bb7e78e014b862de7ea6e8b80ed1f78d13add– prndn/oprnm7d7f795ac1fcb5623731a50999f518877fd423a5a98219d0f495c488564a1554– operni 1.2.7

