Aikido

Gone Phishin' : paquets npm servant des pages personnalisées de collecte d'identifiants

Charlie EriksenCharlie Eriksen
|
#
#
#

Le 20 janvier 2026 à 18 h 03 UTC, notre système a commencé à nous alerter au sujet d'un nouveau paquet npm appelé flockialiEn l'espace de 26 minutes, l'attaquant a publié quatre versions. Deux jours plus tard, il s'est lancé dans une frénésie de publications : opresc, prndn, oprnm, et operniEn y regardant de plus près, nous avons découvert une campagne de spear phishing très ciblée visant les employés d'entreprises industrielles et énergétiques à travers l'Europe, le Moyen-Orient et les États-Unis.

Et le mécanisme de livraison ? npm + jsDelivr. Pourquoi héberger votre propre infrastructure de phishing alors que vous pouvez profiter gratuitement du CDN de quelqu'un d'autre ?

Ce que nous avons trouvé

Les paquets contiennent un seul fichier JavaScript qui, une fois chargé, remplace complètement la page Web par un kit de phishing. Mais voici ce qui rend cela intéressant : chaque version cible une personne spécifique.

Nous avons identifié cinq cibles dans cinq entreprises :

  • flockiali La version 1.2.5 cible un employé de CQFD Composites, un fabricant français de composites.
  • flockiali La version 1.2.6 cible un employé d'Ingeteam, une entreprise espagnole spécialisée dans les éoliennes.
  • opresc La version 1.0.0 cible un employé d'Emagine, une entreprise de recharge de véhicules électriques basée aux Émirats arabes unis.
  • prndn et oprnm les deux visent la même personne chez Amixon GmbH, une entreprise allemande spécialisée dans le mélange industriel.
  • operni La version 1.2.7 cible un employé de CMC America, une entreprise américaine spécialisée dans les équipements de boulangerie.

L'attaquant ne procède pas à des attaques aveugles. Il publie de nouveaux paquets pour chaque cible. Et lorsqu'une cible est particulièrement intéressante, il publie plusieurs paquets avec différents chemins de livraison.

Le déroulement de l'attaque

Voici ce qui se passe lorsqu'une victime clique sur le lien de phishing.

La page se charge et affiche une fausse interface de partage de fichiers « Micro-Share » :

📁 Micro-Share
   partage sécurisé de fichiers
   Pour sécuriser les documents partagés, veuillez vérifier votre adresse e-mail et continuer.
   Les documents suivants ont été partagés de manière sécurisée avec [victim]@ingeteam.com

   📄 Specification.pdf
      - RFQ.pdf
      - Project descriptions.pdf
      - equipment's end destination.pdf

                   [ Télécharger ]

Les documents sont liés à l'ingénierie : appels d'offres, cahiers des charges, fichiers CAO. Exactement ce que l'on s'attendrait à recevoir dans une entreprise industrielle.

Lorsque la victime clique sur « Télécharger », la page affiche un écran de connexion Microsoft :

Microsoft

Connectez-vous à

⚠ Authentification requise. Cliquez sur Suivant pour vous connecter et poursuivre le téléchargement.

┌────────────────────────────────────────┐
│ [victim]@ingeteam.com                  │  (lecture seule)
└────────────────────────────────────────┘

Vous n'avez pas de compte ? Créez-en un.
Vous ne parvenez pas à accéder à votre compte ?

                             [ Suivant ]

L'adresse e-mail de la victime est déjà renseignée et marquée comme étant en lecture seule. Lorsqu'elle clique sur « Suivant », elle est redirigée vers le serveur de collecte d'identifiants :

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

Oui, siemensergy[.]icuIl s'agit d'un typosquat de Siemens Energy. L'attaquant a clairement fait ses recherches sur les partenaires commerciaux de ses cibles.

Astuces anti-bot

Le kit de phishing ne plaisante pas. Il comprend plusieurs techniques permettant d'éviter l'analyse automatisée.

Il vérifie la présence de WebDriver (navigator.webdriver), les listes de plugins vides et les dimensions d'écran nulles. Il filtre les agents utilisateurs correspondant à /bot|crawl|spider|headless|HeadlessChrome/i. Il comprend des champs de formulaire honeypot qui, s'ils sont remplis par des robots, déclenchent le kill switch. Et le bouton de téléchargement reste désactivé jusqu'à ce que la page détecte un mouvement de souris ou un événement tactile. Pas d'interaction, pas de phishing.

v1.2.5 va plus loin avec un analyseur de trajectoire de souris étonnamment sophistiqué :

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;
}

Cela calcule la variance des 10 dernières positions de la souris. Si votre curseur s'est déplacé de manière suspecte en ligne droite (comme le ferait un bot), la variance reste faible et le bouton ne s'active jamais. Les vrais humains bougent.

Quelqu'un a vraiment mis du cœur à l'ouvrage pour créer ce kit de phishing.

Cinq paquets, cinq cibles, deux modèles

Les versions de charge utile ne ciblent pas seulement des personnes différentes. Elles utilisent deux modèles de kits de phishing différents.

Le v1.2.5 La charge utile (ciblant CQFD Composites) utilise la marque « MicroSecure Pro » avec un dégradé violet et la police Inter. Elle affiche des fichiers CAO et des livrables d'ingénierie comme appât, dispose d'un analyseur sophistiqué de trajectoire de souris et envoie les identifiants à oprsys.deno[.]dev.

Le reste (v1.2.6, opresc, prndn, oprnm, operni) utilisent un design « Micro-Share » plus épuré, avec un fond blanc et la police Segoe UI. Ils affichent des appels d'offres et des spécifications de projet, utilisent des vérifications d'interaction de base et envoient des identifiants aux typosquatteurs de Siemens Energy.

Le v1.2.5 Le kit est plus tape-à-l'œil, avec des animations et des arrière-plans dégradés. Les kits plus récents sont plus minimalistes, plus proches de l'apparence réelle de Microsoft. Peut-être que l'attaquant a effectué des tests A/B et a constaté que les versions plus simples convertissaient mieux. Ou peut-être qu'il s'agit simplement d'itérations.

La charge utile CMC America (operni) a personnalisé des leurres documentaires pour l'industrie alimentaire : « Spécifications des produits et détails des ingrédients », « Objectifs de capacité de production et paramètres opérationnels ». L'attaquant adapte son appât.

Ce qui est intéressant, c'est le choix du C2. Toutes les cibles récentes sont redirigées vers des typosquats de Siemens Energy. Ce n'est pas un hasard. Ingeteam fabrique des éoliennes. Emagine développe des infrastructures de recharge pour véhicules électriques. Amixon et CMC America fabriquent des équipements de mélange industriels (Amixon travaille même avec des matériaux pour batteries). Toutes ces entreprises opèrent sur des marchés où Siemens Energy est un acteur majeur. L'attaquant a étudié les relations commerciales de ses cibles.

Remarquez l'évolution subtile : siemensergy[.]icu (sans trait d'union) est devenu siemens-énergie[.]icu (avec trait d'union). La deuxième variante est plus proche de la réalité. siemens-energy[.]com domaine. Nous avons confirmé via DNS que le domaine sans trait d'union ne contient aucune entrée. L'attaquant l'a abandonné.

L'infrastructure raconte une histoire

C'est là que ça devient intéressant. Nous avons utilisé les journaux de transparence des certificats pour déterminer quand l'infrastructure C2 a été mise en place. Le premier certificat SSL pour *.siemens-energy[.]icu a été émis le 24 octobre 2025. Il a ensuite été renouvelé les 14, 16 et 17 janvier. La campagne npm a débuté le 20 janvier.

L'attaquant a enregistré le domaine et obtenu les certificats SSL trois mois avant l'apparition des paquets npm. Réfléchissez-y bien. Il ne s'agit pas d'une action opportuniste. Quelqu'un a planifié cette opération, mis en place l'infrastructure en octobre 2025, puis attendu.

Le serveur C2 (163.123.236[.]118) est hébergé par RackGenius, un petit fournisseur d'hébergement situé à Muskegon, dans le Michigan. Parallèlement, l'ancien v1.2.5 utilisations de la charge utile oprsys.deno[.]dev, qui renvoie vers Cloud Google Cloud (Deno Deploy). Hébergement sans serveur gratuit pour le phishing. Classique. Nous avons informé l'équipe Deno de cette campagne lorsque nous l'avons remarquée, et ils l'ont très rapidement supprimée. 

Pourquoi npm + jsDelivr ?

Le fichier package.json raconte l'histoire :

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

jsDelivr reflète automatiquement les paquets npm. Publiez sur npm, bénéficiez d'un hébergement CDN instantané sur cdn.jsdelivr[.]net/npm/flockiali@1.2.6/resp/template.min.js. Aucun serveur à entretenir, aucun hébergement à payer, et la victime voit une URL CDN d'apparence légitime au lieu d'un domaine de phishing douteux.

La chronologie

20 janvier (quatre versions en 26 minutes) :

  • 18 h 03 UTC : flockiali v1.2.3 (espace réservé vide)
  • 18 h 10 UTC : flockiali v1.2.4 (mise à jour des métadonnées)
  • 18 h 15 UTC : flockiali v1.2.5 (cible CQFD Composites)
  • 18 h 29 UTC : flockiali v1.2.6 (cible Ingeteam)

22 janvier (cinq colis supplémentaires) :

  • 09 h 52 UTC : opresc v1.0.0 (cible Emagine)
  • 12 h 29 UTC : prndn v1.0.0 (cible Amixon)
  • 12 h 49 UTC : oprnm v1.0.0 (Amixon à nouveau)
  • 13 h 11 UTC : operni v1.2.6 (cassé, vide)
  • 13 h 16 UTC : operni v1.2.7 (cible CMC Amérique)

L'attaquant dispose d'une liste de cibles et la passe en revue. L'employé d'Amixon a reçu deux colis à 20 minutes d'intervalle (un peu exagéré, non ?). Le colis de CMC America comportait une faute de frappe (reps/ au lieu de resp/) et une première version défectueuse. Oups. Cet attaquant agit rapidement et commet des erreurs.

Que devriez-vous faire ?

Si vous travaillez dans l'une des entreprises ciblées, vérifiez si quelqu'un a reçu des liens vers des URL jsDelivr ou a cliqué sur quoi que ce soit en rapport avec le partage de documents « Micro-Share ».

Rechercher dans les journaux de messagerie les liens contenant 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/operniBloquez les domaines IOC à votre périmètre. Si des identifiants ont été saisis, modifiez-les immédiatement.

Indicateurs de compromission

Domaines C2 :

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

URL de phishing :

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

URL 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

Forfaits :

  • 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)

Hachages de la charge utile (SHA256) :

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

4.7/5

Sécurisez votre logiciel dès maintenant.

Essai gratuit
Sans CB
Planifiez une démo
Vos données ne seront pas partagées - Accès en lecture seule - Pas de CB nécessaire

Sécurisez-vous maintenant.

Sécuriser votre code, votre cloud et votre runtime dans un système centralisé unique.
Détectez et corrigez les vulnérabilités rapidement et automatiquement.

Pas de carte de crédit requise | Résultats du scan en 32 secondes.