A las 18:03 UTC del 20 de enero de 2026, nuestro sistema comenzó a alertarnos sobre un nuevo paquete npm llamado flockialiEn 26 minutos, el atacante publicó cuatro versiones. Dos días después, se lanzaron a una frenética actividad publicitaria: opresc, prndn, oprnm, y operni. Cuando lo analizamos más detenidamente, descubrimos una campaña de spear phishing muy específica dirigida a empleados de empresas industriales y energéticas de Europa, Oriente Medio y Estados Unidos.
¿Y el mecanismo de entrega? npm + jsDelivr. Porque, ¿por qué alojar tu propia infraestructura de phishing cuando puedes aprovechar la CDN de otra persona?
Lo que encontramos
Los paquetes contienen un único archivo JavaScript que, al cargarse, sustituye por completo la página web por un kit de phishing. Pero lo interesante es que cada versión está dirigida a una persona específica.
Encontramos cinco objetivos en cinco empresas:
flockialiLa versión 1.2.5 está dirigida a alguien de CQFD Composites, un fabricante francés de compuestos.flockialiLa versión 1.2.6 está dirigida a alguien de Ingeteam, una empresa española dedicada a la fabricación de aerogeneradores.oprescLa versión 1.0.0 está dirigida a alguien de Emagine, una empresa de recarga de vehículos eléctricos de los Emiratos Árabes Unidos.prndnyoprnmAmbos se dirigen a la misma persona en Amixon GmbH, una empresa alemana dedicada a la mezcla industrial.operniLa versión 1.2.7 está dirigida a alguien de CMC America, una empresa estadounidense de equipos de panadería.
El atacante no está actuando al azar. Está publicando nuevos paquetes para cada objetivo. Y cuando un objetivo es particularmente interesante, publica varios paquetes con diferentes rutas de entrega.
El flujo del ataque
Esto es lo que ocurre cuando una víctima abre el enlace de phishing.
La página se carga mostrando una interfaz falsa para compartir archivos «Micro-Share»:
📁 Micro-Share
intercambio seguro de archivos
Documentos compartidos de forma segura, por favor, verifique su correo electrónico y continúe.
Los siguientes documentos se han compartido de forma segura con [víctima]@ingeteam.com
📄 Especificaciones.pdf
- RFQ.pdf
- Descripciones del proyecto.pdf
- Destino final del equipo.pdf
[ Descargar ]
Los documentos son de temática técnica: solicitudes de presupuesto, especificaciones de proyectos, archivos CAD. Exactamente lo que cabría esperar que recibiera alguien que trabaja en una empresa industrial.
Cuando la víctima hace clic en «Descargar», la página pasa a una pantalla de inicio de sesión con la marca Microsoft:
⊞Microsoft
Iniciar sesión
⚠ Se requiere autenticación. Haga clic en «Siguiente» para iniciar sesión y continuar con la descarga.
┌────────────────────────────────────────┐
│ [víctima]@ingeteam.com │ (solo lectura)
└────────────────────────────────────────┘
¿No tiene cuenta? Cree una.
¿No puede acceder a su cuenta?
[ Siguiente ]
El correo electrónico de la víctima ya está rellenado y marcado como de solo lectura. Cuando hacen clic en «Siguiente», se les redirige al servidor de recolección de credenciales:
ventana.location.href = "https://login.siemensergy[.]icu/DIVzTaSF";Sí. siemensergy[.]icuEs un typosquat de Siemens Energy. El atacante claramente investigó con quién hacen negocios sus objetivos.
Trucos anti-bot
El kit de phishing no es ninguna tontería. Incluye varias técnicas para evitar el análisis automatizado.
Comprueba si hay WebDriver (navigator.webdriver), listas de complementos vacías y dimensiones de pantalla nulas. Filtra los agentes de usuario que coinciden con /bot|rastreo|araña|sin cabeza|HeadlessChrome/i. Incluye campos de formulario honeypot que, si los rellenan los bots, activan el interruptor de apagado. Y el botón de descarga permanece desactivado hasta que la página detecta movimiento del ratón o eventos táctiles. Sin interacción, no hay phishing.
v1.2.5 va más allá con un analizador de trayectoria del ratón sorprendentemente 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;
}
Esto calcula la varianza de las últimas 10 posiciones del ratón. Si el cursor se ha movido en una línea sospechosamente recta (como lo haría un bot), la varianza se mantiene baja y el botón nunca se activa. Los seres humanos reales se mueven.
Alguien se ha esforzado mucho en crear este kit de phishing.
Cinco paquetes, cinco objetivos, dos plantillas
Las versiones de carga útil no solo están dirigidas a personas diferentes. Utilizan dos diseños diferentes de kits de phishing.
El v1.2.5 La carga útil (dirigida a CQFD Composites) utiliza la marca «MicroSecure Pro» con un degradado morado y la fuente Inter. Muestra archivos CAD y productos de ingeniería como cebo, cuenta con un sofisticado analizador de trayectoria del ratón y envía credenciales a oprsys.deno[.]dev.
El resto (v1.2.6, opresc, prndn, oprnm, operni) utilizan un diseño más limpio, «Micro-Share», con fondos blancos y fuente Segoe UI. Muestran solicitudes de presupuesto y especificaciones de proyectos, utilizan comprobaciones de interacción básicas y envían credenciales a los typosquats de Siemens Energy.
El v1.2.5 El kit es más llamativo, con animaciones y fondos degradados. Los kits más nuevos son más minimalistas, más parecidos al aspecto real de Microsoft. Quizás el atacante realizó pruebas A/B y descubrió que los más sencillos convierten mejor. O quizás solo estén iterando.
La carga útil CMC America (operni) ha personalizado los documentos utilizados como señuelo para la industria alimentaria: «Especificaciones del producto y detalles de los ingredientes», «Objetivos de capacidad de producción y parámetros operativos». El atacante está adaptando su cebo.
Lo interesante es la elección de C2. Todos los objetivos recientes se envían a typosquats de Siemens Energy. Eso no es casualidad. Ingeteam fabrica turbinas eólicas. Emagine se dedica a la infraestructura de recarga de vehículos eléctricos. Amixon y CMC America fabrican equipos de mezcla industrial (Amixon incluso trabaja con materiales para baterías). Todas operan en mercados en los que Siemens Energy es un actor importante. El atacante investigó las relaciones comerciales de sus objetivos.
Observe la sutil evolución: siemensergy[.]icu (sin guión) se convirtió en siemens-energía[.]icu (con guión). La segunda variante se acerca más a la realidad. siemens-energy[.]com dominio. Confirmamos a través del DNS que el dominio sin guión no tiene ningún registro. El atacante lo abandonó.
La infraestructura cuenta una historia.
Aquí es donde se pone interesante. Utilizamos registros de transparencia de certificados para ver cuándo se configuró la infraestructura C2. El primer certificado SSL para *.siemens-energy[.]icu se emitió el 24 de octubre de 2025. Luego se renovó el 14, 16 y 17 de enero. La campaña npm comenzó el 20 de enero.
El atacante registró el dominio y obtuvo certificados SSL tres meses antes de que aparecieran los paquetes npm. Piénsalo bien. Esto no es oportunista. Alguien planeó esta operación, estableció la infraestructura en octubre de 2025 y luego esperó.
El servidor C2 (163.123.236[.]118) está alojado en RackGenius, un pequeño proveedor de alojamiento web con sede en Muskegon, Míchigan. Mientras tanto, el antiguo v1.2.5 Usos de la carga útil oprsys.deno[.]dev, que se resuelve en la infraestructura de Google Cloud (Deno Deploy). Alojamiento sin servidor gratuito para phishing. Clásico. Notificamos al equipo de Deno sobre esta campaña cuando la observamos, y fueron muy rápidos en eliminarla.
¿Por qué npm + jsDelivr?
El archivo package.json lo dice todo:
{
"keywords": ["jsdelivr", "cdn", "template"],
"main": "resp/template.min.js"
}
jsDelivr refleja automáticamente los paquetes npm. Publica en npm y obtén alojamiento CDN instantáneo en cdn.jsdelivr[.]net/npm/flockiali@1.2.6/resp/template.min.js. No hay servidores que mantener, ni alojamiento que pagar, y la víctima ve una URL CDN de aspecto legítimo en lugar de un dominio de phishing sospechoso.
La línea temporal
20 de enero (cuatro versiones en 26 minutos):
- 18:03 UTC:
flockialiv1.2.3 (espacio reservado vacío) - 18:10 UTC:
flockialiv1.2.4 (actualización de metadatos) - 18:15 UTC:
flockialiv1.2.5 (objetivo de CQFD Composites) - 18:29 UTC:
flockialiv1.2.6 (objetivo Ingeteam)
22 de enero (cinco paquetes más):
- 09:52 UTC:
oprescv1.0.0 (objetivo Emagine) - 12:29 UTC:
prndnv1.0.0 (objetivo Amixon) - 12:49 UTC:
oprnmv1.0.0 (Amixon otra vez) - 13:11 UTC:
operniv1.2.6 (dañado, vacío) - 13:16 UTC:
operniv1.2.7 (objetivo CMC América)
El atacante tiene una lista de objetivos y los está revisando uno por uno. El empleado de Amixon recibió dos paquetes con 20 minutos de diferencia (¿no es excesivo?). El paquete de CMC America tenía un error tipográfico (reps/ en lugar de resp/) y una primera versión defectuosa. Vaya. Este atacante se mueve rápido y comete errores.
¿Qué hacer?
Si trabajas en una de las empresas afectadas, comprueba si alguien ha recibido enlaces a direcciones URL de jsDelivr o ha hecho clic en algo relacionado con el intercambio de documentos «Micro-Share».
Buscar en los registros de correo electrónico enlaces que contengan cdn.jsdelivr[.]net/npm/flockiali, cdn.jsdelivr[.]net/npm/opresc, cdn.jsdelivr[.]net/npm/prndn, cdn.jsdelivr[.]net/npm/oprnm, o cdn.jsdelivr[.]net/npm/operniBloquee los dominios del COI en su perímetro. Si se introdujeron credenciales, cámbielas inmediatamente.
Indicadores de Compromiso
Dominios C2:
inicio de sesión.siemens-energy[.]icu(163.123.236[.]118, RackGenius)login.siemensergy[.]icu(abandonado, sin DNS)oprsys.deno[.]dev(34.120.54[.]55, Deno Deploy)
URL de phishing:
https://login.siemensergy[.]icu/DIVzTaSFhttps://login.siemens-energy[.]icu/DIVzTaSF
URL de 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
Paquetes:
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 carga útil (SHA256):
3ceb182fb32a8fb0f0fcf056d6ab8de1cf6e789053f1aadc98ba315ae9a96f0c– flockiali 1.2.6fdb6c79a8d01b528698c53ebd5030f875242e6af93f6ae799dee7f66b452bf3e– flockiali 1.2.54631584783d84758ae58bc717b08ac67d99dee30985db18b9d2b08df8721348e– opresc211f88a55e8fe9254f75c358c42bb7e78e014b862de7ea6e8b80ed1f78d13add– prndn/oprnm7d7f795ac1fcb5623731a50999f518877fd423a5a98219d0f495c488564a1554– operni 1.2.7
Protege tu software ahora.



.avif)
