L'ampleur de PolinRider est vaste et croît rapidement :
La campagne s'est propagée bien au-delà de npm, son vecteur initial :
dev-log-core, logger-base, logkitx, pino-debugger, debug-fmt et debug-glit .vscode/tasks.json malveillants et des pipelines CI injectés La campagne a également compromis la bibliothèque npm Axios (versions 1.14.1 et 0.30.0) en avril 2026 via une dépendance malveillante nommée plain-crypto-js, affectant environ 100 millions de téléchargements par semaine .
La chaîne d'infection de PolinRider est un processus minutieusement orchestré en quatre étapes, conçu pour maximiser la furtivité et minimiser l'interaction nécessaire de la victime.
Les attaquants ajoutent du JavaScript lourdement obfusqué à la fin de fichiers de configuration légitimes de développeurs, tels que postcss.config.mjs, tailwind.config.js, eslint.config.mjs et next.config.mjs . Les lignes malveillantes sont rembourrées avec un excès d'espaces blancs, poussant le code au-delà de la largeur d'affichage par défaut de l'EDI, le rendant invisible lors d'une revue de code occasionnelle
.
PolinRider utilise trois techniques de dissimulation principales :
.woff2 : Le JavaScript obfusqué est déguisé en fichier de police web, un format binaire que la plupart des développeurs n'inspectent jamais Des fichiers .vscode/tasks.json malveillants sont injectés dans les dépôts. Lorsqu'un développeur clone un dépôt compromis et l'ouvre dans VS Code, la tâche s'exécute automatiquement sans aucune autre interaction de l'utilisateur. Cela contourne complètement l'étape d'ingénierie sociale utilisée dans les campagnes Contagious Interview précédentes .
Le chargeur JavaScript désobfusqué récupère sa charge utile de deuxième étape en lisant des données cryptées intégrées dans les transactions de la blockchain de cryptomonnaies. La campagne utilise les blockchains TRON, Aptos et BSC (BNB Smart Chain) comme canaux C2 de type "dead-drop" . Cette technique d'"etherhiding" rend le démantèlement extrêmement difficile car les données C2 existent de manière immuable sur les blockchains publiques.
PolinRider livre une suite de charges utiles malveillantes, chacune avec des capacités spécifiques :
La principale famille de logiciels malveillants livrés est une nouvelle variante de BeaverTail, un malwareJavaScript connu associé aux opérations de la RPDC. Il agit comme un droger de première étape et un récupérateur d'identifiants .
La chaîne d'infection livre un RAT basé sur JavaScript connu sous le nom de DEV#POPPER.js. Il fournit une capacité complète d'exécution de code à distance (RCE), un accès persistant et la capacité d'exécuter des commandes arbitraires sur le poste de travail du développeur compromis. L'unité de réponse aux menaces (TRU) d'eSentire l'a détecté dans la nature ciblant le secteur de l'énergie, des services publics et des déchets en février 2026 .
Déployé aux côtés de DEV#POPPER, OmniStealer cible agressivement les identifiants de portefeuille de cryptomonnaies, les clés privées, les identifiants stockés dans le navigateur, les jetons de session, les clés API et les secrets CI/CD .
PolinRider est une évolution opérationnelle directe de la campagne Contagious Interview. Alors que Contagious Interview s'appuyait historiquement sur des offres d'emploi factices et l'ingénierie sociale pour inciter les développeurs à installer des projets piégés, PolinRider représente un changement vers une compromission de la chaîne d'approvisionnement entièrement automatisée et sans ingénierie sociale .
Les principales différences et chevauchements incluent :
Sur la base des conseils d'OpenSourceMalware, de Socket Security, de Sonatype et d'autres chercheurs, les organisations devraient prendre les mesures suivantes :
package.json, go.mod et des fichiers de verrouillage postcss.config.mjs, tailwind.config.js, eslint.config.mjs, next.config.mjs et fichiers similaires à la recherche de JavaScript obfusqué ajouté .vscode/ pour détecter des tasks.json inattendus avec des configurations d'exécution automatique .woff2 et autres fichiers binaires à la recherche de JavaScript intégré npm auditsocket.dev) avant l'installation