Le 5 août 2026, les chercheurs de Sonatype ont enregistré dans npm une campagne qu'ils ont nommée Flooding Dropper : 846 composants malveillants publiés à partir de dizaines de comptes jetables. Une semaine plus tard, le nombre a augmenté — dans les données mises à jour d'OpenSourceMalware, qui suit la même campagne sous le nom de WEL1DROPPER, 1033 paquets confirmés sont désormais mentionnés. À l'intérieur se trouve un chargeur multiplateforme qui tire la deuxième étape sous Windows, macOS et Linux et nettoie tout ce qu'il peut atteindre sur la machine du développeur : variables d'environnement, identifiants, sessions.
Pour les équipes qui vivent de l'analyse et de l'automatisation, ce n'est pas « une autre nouvelle sur npm ». La pile de scraping est justement npm : Playwright, Puppeteer, Crawlee, des wrappers autour des agents proxy, des parseurs HTML, des files d'attente. Et sur la même machine où tout cela est installé par une seule équipe, se trouve généralement un .env avec le nom d'utilisateur et le mot de passe du pool de proxies, un cookie-jar de sessions et des profils de navigateur anti-détection. Analysons ce qui s'est réellement passé et ce que cela implique pratiquement.
Ce que l'on sait sur la campagne
Sonatype mène une campagne sous l'identifiant sonatype-2026-005660 avec une évaluation CVSS de 8.7 et une classification CWE-506 (code malveillant intégré). Les signes caractéristiques par lesquels les chercheurs ont regroupé les paquets en un seul groupe :
- Génération automatique de noms. Les noms sont créés par interpolation de termes répétitifs — le rapport mentionne « bigops » et « bnpl », avec des exemples comme
bigops-apiet de longues combinaisons telles quedolyame-boxy-desktop-bnpl-card-gallery. OpenSourceMalware décrit cela comme « AI slop squatting » — un type-squatting massif avec des noms générés aléatoirement au lieu d'une imitation soignée d'un paquet populaire. - Versions d'un seul intervalle. Les versions se regroupent autour de 35.x.y — des numéros anormalement élevés pour des paquets sans historique.
- Répartition sur les comptes. Chaque compte publie un petit lot de paquets, donc bloquer un éditeur ne met pas fin à l'opération.
La mécanique de lancement est décrite de différentes manières, et cette différence est importante. Sonatype écrit que le code s'active « lors de l'installation ou de l'importation » du paquet. OpenSourceMalware précise : certains échantillons se passent des hooks de cycle de vie classiques et nécessitent que le développeur connecte lui-même le paquet via require(). La conclusion pratique est la suivante : compter uniquement sur --ignore-scripts ne vous sauvera pas — si la dépendance est réellement importée dans le code, la charge utile s'exécutera.
Comment la deuxième étape est livrée
Le chargeur tire le payload via HTTPS depuis un hôte aléatoire d'une liste intégrée — selon The Hacker News, trois domaines sur Cloudflare Workers ont servi de points de livraison. Si le téléchargement direct échoue, un canal de secours s'active : la charge utile est assemblée à partir des enregistrements DNS TXT du domaine wel1.ru avec des sous-domaines de plateforme (sdk.dl, ext.dl, pkg.dl, net.dl). Cela signifie qu'un filtre sortant sur les domaines HTTP est contourné par des requêtes DNS ordinaires — et celles-ci sont rarement bloquées dans un réseau d'entreprise.
Ensuite, sur les plateformes :
- Windows : patchage de l'ETW et de l'AMSI (c'est-à-dire désactivation de la télémétrie et de la vérification antivirus des scripts), ancrage via des clés de démarrage automatique dans le registre et des tâches planifiées, fichiers dans AppData.
- macOS : mêmes techniques d'évasion, ancrage via LaunchAgent. Dans la charge macOS, les chercheurs ont trouvé des domaines de services financiers russes (tcsbank.ru, cloudpayments.ru) — un signe d'intérêt ciblé pour les sessions bancaires des utilisateurs russophones.
- Linux : un binaire ELF UPX empaqueté, déployant un agent du framework Sliver — c'est déjà un canal C2 complet, et non un vol ponctuel.
De plus, un ensemble standard : vérification de la sandbox et du débogueur, détermination de l'architecture, lecture des variables d'environnement, processus en arrière-plan détachés (survivent à la fermeture du terminal) et réflexion de la charge en mémoire pour ne laisser aucun fichier sur le disque.
Pourquoi cela frappe particulièrement les équipes de scraping
L'infostyleur ne fait pas de distinction entre « important » et « non important » — il prend tout ce qui ressemble à un secret. Pour un utilisateur ordinaire, ce sont les mots de passe du navigateur et le portefeuille crypto. Pour une personne qui collecte des données, l'ensemble des trophées est différent et, honnêtement, plus savoureux :
- Variables d'environnement et
.env— ici se trouve presque toujours l'hôte du proxy, le nom d'utilisateur, le mot de passe et les paramètres de session (pays, ville, identifiant sticky). L'exfiltration des variables d'environnement est directement mentionnée dans l'analyse de la campagne. - Cookies et jetons de session. Une session volée contourne la MFA : le cookie est en soi une preuve que la deuxième vérification a déjà été passée. Les journaux avec des jetons valides pour des services de travail se vendent sur des marchés noirs à partir de 5 $.
- Profils de navigateurs anti-détection — un ensemble « cookie + empreinte + proxy », c'est-à-dire un compte de travail prêt à l'emploi, qui n'a pas besoin d'être réchauffé.
- Jetons CI/CD, npm et cloud — accès non seulement à votre machine, mais aussi à votre pipeline, d'où il est possible d'envoyer vos propres builds.
L'ampleur du phénomène a cessé d'être de niche. SpyCloud, dans son rapport de 2026, a compté 18,1 millions de clés API et de jetons exposés, obtenus précisément à partir des journaux de malware. Selon Recorded Future et Flashpoint, en 2025, les infostyleurs ont infecté 11,1 millions de machines et ont fourni 3,3 milliards de comptes volés. Et dans le rapport de Sonatype sur l'état de la chaîne d'approvisionnement logicielle pour 2026, plus de 454 600 nouveaux paquets malveillants ont été mentionnés pour une seule année 2025, avec plus de 1,233 million bloqués au total — une augmentation de 75 % d'une année sur l'autre. Flooding Dropper n'est pas une anomalie, mais un épisode ordinaire du flux.
Que perd le propriétaire d'un compte proxy
Je vais aborder séparément ce qui n'est généralement pas mentionné dans les analyses de sécurité, car les auteurs ne travaillent pas avec des proxies. Les identifiants de proxy compromis ne sont pas une « perte de mot de passe », mais trois problèmes à la fois :
- Trafic payé. Le trafic résidentiel et mobile est facturé par gigaoctets. Un scraper étranger utilisant vos identifiants — c'est votre facture, et vous pouvez le remarquer bien plus tard que vous ne le souhaiteriez.
- Réputation étrangère sur vos IP. L'attaquant a besoin d'une sortie résidentielle « propre » pour que son activité ressemble à celle d'un utilisateur domestique ordinaire. Vos cibles verront un comportement suspect dans votre propre session — et des bans arriveront sur les comptes que vous avez réchauffés pendant des années.
- Litige avec le fournisseur. Du point de vue de tout fournisseur normal, le trafic provenait de votre compte, et vous devrez vous expliquer.
Que faire : minimum pratique
- Isoler les environnements. La pile de scraping doit être installée dans un conteneur ou une VM séparée — pas sur la machine où se trouvent des cookies personnels, un e-mail professionnel et des jetons de production. C'est la seule mesure qui fonctionne même contre un paquet dont personne ne sait encore.
- Retirer les identifiants de proxy du
.envà proximité du code. Les secrets doivent aller dans un gestionnaire de secrets ou dans les variables d'environnement du runner, et non dans un fichier à la racine du projet, que tout module importé peut lire. - Activer l'autorisation par IP là où elle existe. Lier l'accès à votre serveur dévalue le couple volé nom d'utilisateur/mot de passe : depuis une adresse étrangère, cela ne fonctionnera tout simplement pas. Comment cela fonctionne et dans quels scénarios cela convient, a été discuté dans l'article sur la liste blanche des adresses IP pour les proxies. Les règles générales pour le stockage des accès se trouvent dans le guide sur le stockage sécurisé des credentials proxy.
- Des sous-identifiants distincts pour chaque projet et des limites de trafic. Si chaque script a son propre accès avec un plafond en gigaoctets, la fuite d'un seul ne videra pas tout le solde et sera localisée en quelques minutes.
- Surveiller la consommation. Une augmentation soudaine de la consommation de Go sans augmentation des tâches — le détecteur de compromission le plus précoce et le moins cher que vous ayez.
- Discipline des dépendances.
npm ciselon le fichier de verrouillage au lieu d'uninstalllibre, quarantaine des nouvelles versions (7 à 14 jours), vérification de l'âge du paquet et de l'historique de l'éditeur, miroir interne avec une liste autorisée. Un paquet avec une version 35.x.y, aucune histoire et un nom composé de mots collés — c'est une raison de s'arrêter, pas d'installer.
Si vous soupçonnez que vous avez déjà été compromis
Les recommandations de Sonatype ici sont extrêmement spécifiques et l'ordre est essentiel : considérer l'hôte comme entièrement compromis ; rechercher les mécanismes de fixation décrits (clés de démarrage automatique et tâches planifiées sous Windows, LaunchAgent sous macOS) ; faire pivoter les identifiants — npm, GitHub, cloud, CI/CD — après avoir nettoyé la machine, et non avant, sinon de nouveaux secrets suivront le même chemin ; vérifier les fichiers de verrouillage, les caches de dépendances et les miroirs internes pour des copies conservées ; avant la réinstallation, comparer les noms des paquets caractère par caractère.
Ajoutez à cette liste la vôtre : changement des mots de passe d'accès proxy, révocation des sessions actives dans le navigateur anti-détection et vérification de l'historique de consommation de trafic des deux dernières semaines. Si le trafic est acheté par gigaoctets — proxies résidentiels ou proxies mobiles, — le rapport de consommation est votre journal d'accès.
Conclusion
Flooding Dropper est intéressant non pas pour son ingéniosité, mais pour son économie : mille paquets jetables, des noms générés, des comptes en lots — c'est une chaîne de production conçue pour que quelqu'un installe une dépendance sans regarder. Certaines campagnes mettront des semaines à nettoyer le registre, mais le flux ne s'arrêtera pas : les chiffres de Sonatype pour l'année dernière ne laissent aucune illusion.
La conclusion pratique pour ceux qui collectent des données est simple. La machine du développeur est le point où tous vos accès convergent : proxies, comptes, sessions, pipeline. Isolez la pile, liez les accès à l'IP, répartissez les identifiants par projet et surveillez le graphique de consommation de trafic. Aucun de ces pas n'attend qu'une nouvelle campagne soit indexée.
```