Neuf lignes. Le fichier JavaScript d'imgdecode ne fait presque rien : il charge un addon natif Windows, et c'est cette bibliothèque, une DLL, qui travaille. Publié le 30 septembre 2026 et mis à jour jusqu'au 11 octobre, le paquet a été analysé par SafeDep, qui le rattache à la campagne MALFEX, active depuis août 2023 d'après ses chercheurs. Rien dans le code lisible ne signale un danger.
L'ampleur du dégât reste floue. Ce qui frappe, c'est la méthode, et un rappel que beaucoup d'équipes oublient : un paquet npm n'est pas un fichier posé dans un dossier. C'est du code exécuté avec les droits de la machine qui l'installe.
Une fausse photo, un vrai chargeur
La DLL va chercher sur un dépôt GitHub un fichier présenté comme une image JPEG. C'est en réalité une charge chiffrée. Elle est déchiffrée en mémoire puis injectée dans dllhost.exe, un processus Windows légitime. Pour un antivirus, voir dllhost.exe travailler n'a rien d'anormal ; un exécutable inconnu lancé depuis un dossier temporaire attirerait bien plus l'œil.

Un détail intrigue. Avant d'injecter quoi que ce soit, la DLL lit les premiers octets du contenu déchiffré. S'ils correspondent à une signature JPEG ou PNG, elle s'arrête là. Si l'opérateur remplace son fichier par une vraie image, le chargeur devient inerte. Ce n'est pas un garde-fou de sécurité, c'est un interrupteur.
Deux familles de malwares suivent. movinlike est un voleur écrit en Node.js : navigateurs Chromium, Discord, Telegram, portefeuilles de cryptomonnaies, phrases de récupération, fichiers .env et .pem, tout y passe. Overlord, un RAT (outil d'accès à distance) open source écrit en Go, donne ensuite la main à distance. L'ensemble s'installe durablement via une clé Run du registre et une tâche planifiée.
40 000 téléchargements, mais surtout un seul paquet
Le chiffre repris par TechJuice, plus de 40 000 téléchargements pour huit paquets, change de sens dès qu'on le décompose. function-flag en pèse à lui seul environ 37 000. Les sept autres, imgdecode compris, sont récents et peu suivis, avec des noms d'utilitaires banals : imgbundle, runhelper, native-runner, cdn-img-fetch. Ni SafeDep ni TechJuice ne disent combien de ces téléchargements correspondent à de vraies installations plutôt qu'à des miroirs ou des robots.
Cela dessine une campagne en petites touches, chaque paquet visant le package.json d'un projet un peu distrait. Le risque est réel, mais ce n'est pas une épidémie, et on peut le dire sans hausser les épaules.
Voici comment TechJuice, à partir des travaux de SafeDep, reconstitue la suite. Le 26 septembre, trois paquets sont publiés. npm en retire deux dès le 28, et le 30 deux remplaçants sont déjà en ligne, le jour même où imgdecode 1.0.0 apparaît. Une 1.0.1 suit dans la nuit, puis la 1.0.2 le 1er octobre. Pendant ce temps, npm continue de nettoyer : imgbundle et cdn-img-fetch disparaissent les 7 et 8 octobre. La 1.0.3 d'imgdecode, elle, sort le 11.
Retirer un paquet prend des jours, en republier un prend des minutes. Un retrait n'est pas une correction. Les machines déjà infectées n'en savent rien.

Ce qu'un studio de trois personnes peut réellement faire
Abandonner npm n'est pas réaliste, et personne ne le fera. En revanche, certaines habitudes coûtent peu et se vérifient vite.
- Commiter le lockfile et installer avec
npm ci, qui n'invente pas de nouvelles versions en route. - Lire le diff du lockfile en revue de code : un paquet qui surgit sans raison mérite une question.
- Traiter les addons natifs à part. Une DLL échappe à toute lecture du JavaScript, et il faut une bonne raison de l'accepter.
- Ne pas compter sur
--ignore-scripts: si la charge part au chargement du module, l'option ne bloque rien.
La provenance npm, souvent présentée comme une garantie, atteste d'une chaîne de build, pas des intentions de l'auteur. Rien de tout cela ne remplace un audit, mais dans la pratique les petites équipes n'en font presque jamais. Beaucoup ne sauraient pas dire pourquoi chaque ligne de leur node_modules s'y trouve. Si l'un des noms cités apparaît sur un poste Windows, mieux vaut considérer la machine comme compromise et renouveler identifiants, clés et accès aux portefeuilles.
Combien de postes ont vraiment exécuté la charge ?
Personne ne le dit pour l'instant. SafeDep ne chiffre pas les exécutions, et les sources consultées ne précisent pas si imgdecode est encore téléchargeable ni si l'opérateur a déjà publié un successeur sous un autre nom. Une question, donc, pour la prochaine mise à jour de SafeDep : que contient la 1.0.3, la dernière version connue, que n'avaient pas les précédentes ?
