MALFEX : un malware npm resté indétecté pendant 14 mois
MALFEX, une campagne de malware npm menée par une seule personne, a publié 12 paquets depuis 2023 et totalisé 40 767 téléchargements. Certains paquets sont encore en ligne, sans avis de sécurité.
4 min de lecture

En chiffres
- npm packages published by one operator
- 12
- total downloads, per Checkmarx
- 40,767
- downloads of function-flag alone
- 37,419
- when the first package appeared
- Aug 2023
Un seul attaquant publie des malwares sur npm depuis août 2023, et une partie d'entre eux restait installable fin septembre 2026. L'éditeur de sécurité CloudSEK a baptisé la campagne MALFEX le 30 septembre. Il a trouvé un paquet malveillant qu'aucun avis de sécurité n'avait signalé pendant 14 mois. Checkmarx a suivi le 5 octobre avec un décompte de 40 767 téléchargements pour l'ensemble des paquets de la campagne. Si l'un d'eux figure dans votre arbre de dépendances, une machine Windows qui l'a installé exécute peut-être un outil d'accès à distance.
Comment fonctionne l'attaque
npm est le registre de paquets de JavaScript. Quand vous installez un paquet, npm peut exécuter un script « postinstall », une commande choisie par l'auteur du paquet. MALFEX se sert de ce script pour télécharger et lancer un malware Windows dès qu'un développeur exécute npm install.
Les charges utiles se cachent à la vue de tous. D'après CloudSEK, les scripts téléchargent des programmes Windows déguisés en images PNG. Checkmarx a retracé trois chaînes de diffusion distinctes.
- Overlord RAT. Les paquets
tlxbnhd,tldriveretmxdriverrécupèrent un faux PNG sur api.imghippo.com. Il contient un programme AutoIt3 signé et un script chiffré qui charge Overlord, un outil d'accès à distance open source écrit en Go. Un outil d'accès à distance, ou RAT, permet à l'attaquant de contrôler la machine à distance. - Un voleur de données. Une chaîne composée de
native-runner,img-to-nativeetcdn-img-fetchrécupère un programme chiffré sur un compte GitHub nommé « cavecrew ». Elle télécharge ensuite un voleur Node.js de 64 Mo que Checkmarx appelle « movinlike ». - Un téléchargeur de longue durée.
function-flagcontinue de récupérer de nouvelles charges utiles auprès d'hôtes qui changent, dont discloud.app, squareweb.app, render.com et un proxy CDN de Discord.
Les trois chaînes visent Windows. Checkmarx note que le téléchargeur échoue sous macOS et Linux, car un paramètre propre à Windows dont il dépend n'y existe pas.
Ce qu'il vole et comment il se cache
Overlord n'a pas d'adresse de serveur fixe. « Il peut lire des notes chiffrées que l'opérateur publie dans des transactions Solana, les déchiffrer et utiliser le résultat comme liste de serveurs », écrit Checkmarx. Solana est une blockchain publique, l'opérateur peut donc changer de serveurs sans modifier le malware.
Le voleur cible huit clients Discord et les cookies de Chrome, Edge, Brave, Opera, Vivaldi et Yandex. Il s'en prend aussi à Telegram Desktop et aux portefeuilles crypto MetaMask, Phantom et Coinbase. Les données volées sortent par un webhook Discord, créé le 26 septembre 2026 selon Checkmarx.
La persistance est discrète elle aussi. Checkmarx a trouvé une tâche planifiée nommée \Maiden, exécutée toutes les cinq minutes, dont la date est reculée au 1er janvier 2020. L'opérateur a aussi poussé du code malveillant très loin vers la droite avec des espaces, si bien qu'il se trouve au-delà du bord d'une fenêtre d'éditeur normale.
Selon CloudSEK, l'opérateur signe son travail « Murizada » sous plusieurs identifiants, dont malfexkkj, malfex_user et cavecrew.
Les paquets à vérifier
| Paquet | Rôle | Téléchargements, selon Checkmarx | Statut |
|---|---|---|---|
| function-flag | Téléchargeur | 37 419 | En ligne, sans avis |
| function-color | Non précisé | 300 | En ligne, sans avis |
| cdn-img-fetch | Chaîne du voleur | 643 | L'avis ne couvre que 1.0.0-1.0.1 |
| img-to-native | Chaîne du voleur | 967 | Avis publié |
| native-runner | Chaîne du voleur | 872 | Listé par Checkmarx |
| tlxbnhd | Overlord RAT | 139 | Saisi |
| tldriver | Overlord RAT | 138 | Saisi |
| mxdriver | Overlord RAT | 289 | Saisi |
Les deux sociétés comptent un peu différemment. CloudSEK indique que function-flag, cdn-img-fetch et function-color sont toujours installables. « Les trois paquets sans avis sont les seules menaces actives que les défenseurs peuvent cibler aujourd'hui », écrit-il. Checkmarx explique l'écart sur cdn-img-fetch : son avis, MAL-2026-17320, couvre les versions 1.0.0 et 1.0.1, mais les versions malveillantes sont les 1.0.2 et 1.0.3.
Selon Checkmarx, l'opérateur a publié 12 paquets au total : huit malveillants et quatre leurres inoffensifs. Pendant la semaine jusqu'au 1er octobre, les paquets ont encore été téléchargés 3 017 fois.
Les développeurs sont une cible fréquente ce mois-ci. Début octobre, une autre campagne a été signalée, qui cache des malwares dans des hooks Git post-checkout au sein de faux dépôts de recruteurs.
Ce que cela signifie pour les développeurs
- Fouillez vos fichiers de verrouillage dès maintenant. Cherchez chaque nom de paquet du tableau dans
package-lock.json,yarn.lockoupnpm-lock.yaml, y compris dans les dépendances transitives.npm ls <name>montre l'origine d'un paquet. - Ne vous fiez pas aux seuls avis de sécurité. L'avis sur
cdn-img-fetchcouvre les mauvaises versions, et deux paquets actifs n'en avaient aucun. Unnpm auditpropre ne prouve pas que vous êtes à l'abri de cette campagne. - Désactivez les scripts d'installation quand c'est possible.
npm install --ignore-scripts, ouignore-scripts=truedans.npmrc, empêche l'exécution du code postinstall. N'autorisez les scripts que pour les paquets qui en ont besoin. - Vérifiez les machines Windows qui ont installé un paquet listé. Cherchez une tâche planifiée nommée
\Maidenet un fichier nomménode_runtime_helper.exesous%APPDATA%\Microsoft\Windows\. Checkmarx cite aussi l'adresse 104.234.65.75 sur le port 700 comme serveur de téléchargement. - Renouvelez ce que le voleur emporte. Si une machine a été touchée, déconnectez-vous de Discord et de Telegram, effacez les sessions du navigateur, changez les mots de passe enregistrés et déplacez les fonds de tout portefeuille de navigateur.
Les 37 419 téléchargements de function-flag sont le chiffre à retenir. Un petit utilitaire au nom banal a porté presque toute la campagne.
Sources
Articles liés

Le trusted publishing de npm peut désormais déplacer les dist-tags via OIDC
Le trusted publishing de npm peut désormais ajouter, déplacer et supprimer des dist-tags comme latest avec des jetons OIDC de courte durée. L'option est désactivée par défaut et exige npm 11.21.0.

Node.js 22.23.3 LTS corrige un bug use-after-free dans HTTP/2
Node.js 22.23.3 LTS, publié le 23 septembre, corrige un bug use-after-free dans HTTP/2, ajoute la prise en charge de SharedArrayBuffer à Node-API et passe à OpenSSL 3.5.8.

Rejetto HFS CVE-2026-61500 exploitée un jour après la publication de son analyse
HFS 3.0.0 à 3.2.0 signe les connexions avec Math.random(), une faille trouvée par Mythos d'Anthropic. Les attaques ont commencé le 3 octobre, un jour après l'analyse. La 3.2.1 la corrige.