1 700+
Paquets malveillants identifiés depuis jan 2025
Socket, avril 2026
100 M
Téléchargements/semaine d'Axios au moment du compromis
Snyk, 31 mars 2026
3 heures
Fenêtre entre publication axios 1.14.1 et retrait npm
Snyk timeline
Le contexte
L'opération s'appelle Contagious Interview. La première infrastructure a été détectée en 2022, le premier rapport public est sorti en novembre 2023 par Unit 42 (Palo Alto Networks). Depuis, le rythme accélère.
Selon le rapport de Socket présenté en avril 2026 au SANS CTI Summit par Kir Boyenko (Senior Threat Intelligence Analyst), la campagne a publié plus de 1 700 paquets malveillants à travers npm, PyPI, Go, Rust et PHP depuis janvier 2025. L'attribution est unanime entre Mandiant (Google Cloud), CrowdStrike et Recorded Future Insikt Group: c'est UNC1069, aussi tracké comme BlueNoroff, Sapphire Sleet ou Stardust Chollima, un sous-groupe financier du fameux groupe Lazarus.
Ce qui rend cette attaque dangereuse pour une PME ou une agence qui shippe du JavaScript: ce n'est pas un patch à appliquer. C'est de l'ingénierie sociale longue, doublée d'un paquet npm qui fait exactement ce que son README promet, sauf qu'il fait aussi autre chose. Et le code malveillant n'est pas dans un postinstall script qui clignote rouge - il est embarqué dans une fonction qui ressemble au métier du paquet (logger, validator, debug helper).
2022
Première infrastructure Contagious Interview
Détectée a posteriori par les chercheurs. La campagne est déjà active mais pas encore publique.
Novembre 2023
Premier rapport public (Unit 42, Palo Alto)
L'opération est nommée et attribuée à la Corée du Nord. Stack malware BeaverTail/InvisibleFerret documentée.
Janvier 2025
Début du décompte Socket
Point de départ pour le compte de 1 700+ paquets. La cadence devient hebdomadaire, automatisée.
Novembre 2025
Vague de 197 paquets OtterCookie
Publiée en quelques jours sur npm. 31 000+ téléchargements avant retrait.
31 mars 2026
Compromis Axios (3 heures)
axios@1.14.1 et axios@0.30.4 publiés avec plain-crypto-js@4.2.1 comme dépendance malveillante. Détection Socket en 6 minutes, retrait final à 03:29 UTC.
Avril 2026
Présentation SANS CTI Summit
Socket publie 'Hunting Contagious Interview'. 1 700+ paquets confirmés, cross-ecosystem (npm, PyPI, Go, Rust, PHP).
Comment l'attaque se déroule
Les 5 phases reviennent dans tous les rapports publics. C'est un playbook stable, mais bien rodé.
Le playbook Contagious Interview
1. Prise de contact (LinkedIn, Telegram, Slack)
Un recruteur t'écrit pour un poste de Software Engineer dans une boîte crypto/Web3. Le profil semble propre, la compagnie a une page LinkedIn, parfois un site. Compensation affichée: 200 000 à 300 000 USD par an dans les leurres documentés par SANS.
2. Le test technique
Avant l'entrevue, le recruteur envoie un Google Doc poli avec la mise en contexte du projet + un lien vers un repo GitHub ou Bitbucket. On te demande de cloner, exécuter, faire un PR avec tes idées d'amélioration. Le repo a l'air d'un vrai projet React/Web3 avec des centaines de lignes de code MEV bot ou crypto utility.
3. L'exécution
Au
npm install, ou plus subtilement aunpm start, le malware se déclenche. La charge utile est obfusquée (Base64 inversé + XOR, ou Function.constructor pour bypasser les scanners statiques). Vladimir Novick (dev qui a documenté un cas direct sur dev.to) a relevé jusqu'à 5 stages enchaînés, avec un Google Doc éditable comme serveur C2 pour pousser des updates sans toucher au repo GitHub.4. Le vol
BeaverTail collecte les identifiants des navigateurs (Chrome, Brave, Firefox), du Keychain macOS, et d'au moins 12 wallets crypto incluant Solana. Il fetch ensuite InvisibleFerret comme second stage, qui établit un canal C2 bidirectionnel pour le remote tasking.
5. La persistance
Le malware s'installe en autostart. Sur le cas Axios, un binaire macOS à /Library/Caches/com.apple.act.mond beacon vers le C2 toutes les 60 secondes. Sur Windows, un faux Windows Terminal à %PROGRAMDATA%\wt.exe. Sur Linux, un Python RAT à /tmp/ld.py lancé via nohup.
Source
The repo was malware. It didn't get me, but it's something developers should be aware of. Every API key, AWS credential, GitHub/npm token in your shell environment gets stolen.
Le malware zoo
Kir Boyenko (Socket) parle de "malware zoo" pour décrire la stack utilisée. Trois familles principales reviennent dans 90 % des cas documentés, avec des variantes selon l'OS de la victime.
Les 3 familles de malware Contagious Interview
| Famille | Rôle | Cible principale | OS |
|---|---|---|---|
| BeaverTail | Stealer 1ère stage | Browsers, Keychain macOS, ≥12 wallets crypto, tokens AWS/npm/GitHub | Windows + macOS + Linux |
| InvisibleFerret | RAT 2ème stage | Remote tasking, C2 bidirectionnel, exfiltration continue, parfois credit cards | Windows + macOS + Linux |
| OtterCookie | Variante stealer | Similaire à BeaverTail, parfois substitué selon la campagne | Windows + macOS + Linux |
Les loaders utilisés pour livrer ces charges utiles sont eux aussi nommés: HexEval (encodage hex → ASCII pour cacher l'URL du C2), XORIndex (chunks de code scramblés à l'exécution). Ils servent à séparer la livraison du paquet npm et la charge réelle, pour que l'analyse statique du paquet (par un scanner ou un humain) ne révèle rien.
Le cas Axios du 31 mars 2026
Axios n'est pas un paquet obscur. 100 millions de téléchargements par semaine. C'est dans le top 10 des paquets npm les plus utilisés.
La séquence racontée par Snyk:
- 00:21 UTC: axios@1.14.1 publié, avec plain-crypto-js@4.2.1 comme nouvelle dépendance.
- 00:27 UTC: le scanner Socket détecte la charge (6 minutes).
- 01:00 UTC: axios@0.30.4 publié avec la même dépendance malveillante.
- 03:29 UTC: les deux versions retirées de npm.
Trois heures de fenêtre. Pendant cette fenêtre, chaque npm install qui touchait axios téléchargeait un postinstall: node setup.js qui décodait un blob obfusqué (Base64 inversé + XOR avec clé OrDeR_7077). Le payload final est un RAT cross-platform qui beacon vers sfrclak[.]com:8000.
L'attribution exacte du cas Axios n'est pas confirmée à 100 % comme Lazarus, mais le pattern (account takeover du mainteneur via ingénierie sociale, dropper multi-stage, C2 distant cross-platform) colle avec les TTPs Contagious Interview. Et la coïncidence de timing avec le pic de la vague Socket d'avril 2026 est suspecte.
Ce qu'on fait chez les clients qui ont une stack JS
Pour les PMEs et agences qui shippent du JavaScript en 2026, voici la liste qu'on applique.
Hygiène de base anti-Contagious Interview
- `npm ci --ignore-scripts` en CI. Désactive les `postinstall`, vecteur numéro 1 des dropper Contagious Interview.
- Pin exact des versions dans package.json. Pas de `^` ni de `~`. Le lockfile en strict mode.
- Scanner comportemental sur les PRs. Socket ou Snyk en GitHub App, qui blocke les paquets suspects avant merge. Pas juste `npm audit`.
- Quarantaine 48-72h sur les nouveaux paquets avant promotion. Socket et Snyk supportent ça nativement.
- Onboarding dev: doc d'une page qui explique le piège du faux recruteur. Les juniors et les freelancers sont les cibles prioritaires.
- Règle absolue: aucun dev n'exécute du code de recruteur sur sa machine de travail. VM isolée, jamais avec wallet ou Keychain monté.
- Audit annuel des machines des devs qui touchent à un wallet crypto ou à un environnement de production client.
Quand alerter, quand isoler
Si
Un dev mentionne avoir cloné un repo "de recruteur" cette semaine
Alors
Isoler sa machine du réseau, faire l'inventaire des paquets installés, rotation des credentials (npm, GitHub, AWS, crypto wallets).
Même si rien ne semble s'être passé. La charge utile peut être dormante.
Si
Tu vois un paquet inconnu dans package-lock.json après un `npm install` automatique
Alors
Roll back le lockfile, compare avec le précédent, cherche le paquet sur socket.dev avant d'autoriser.
Les paquets typo-squattés sont une des techniques les plus communes.
Si
Un mainteneur d'un paquet populaire que tu utilises publie une version sans changelog clair
Alors
Attends 48h, regarde Socket et Snyk pour des signaux, puis update.
C'est exactement le pattern Axios. Les paquets compromis sont retirés vite mais la fenêtre est fatale.
Questions qu'on reçoit en agence
On est une PME marketing, pas un éditeur de logiciel. Pourquoi ça nous concerne?
Si ton équipe ou ton agence utilise Next.js, React, Vue, ou n'importe quel framework JS pour des sites clients ou des outils internes, tu installes du npm. Ton développeur freelance aussi. Et si ce dev se fait piéger, les credentials volés peuvent inclure les accès à tes comptes clients (GA4, Meta Business, Google Ads via OAuth tokens stockés).
On utilise pnpm/yarn, est-ce qu'on est protégés?
Non. Le vecteur est le paquet lui-même, pas le gestionnaire. pnpm et yarn ont des modes plus stricts (pnpm a une option --ignore-scripts par défaut configurable), mais les paquets malveillants qui cachent leur charge dans le code de la lib (pas dans un postinstall) restent dangereux.
GitHub Copilot ou Cursor recommandent parfois des paquets dans leurs suggestions. C'est risqué?
Oui, plus qu'on pense. Les LLMs hallucinent parfois des noms de paquets. Les attaquants nord-coréens (et d'autres groupes) registrent ces noms hallucinés pour piéger les devs qui acceptent la suggestion sans vérifier. Cherche toujours le paquet sur npmjs.com ou socket.dev avant de l'installer.
Combien de temps ça prend à mettre en place le minimum vital?
Pour activer Socket en GitHub App sur un repo, c'est une après-midi. Pour réviser le CI et ajouter --ignore-scripts, c'est une autre. La partie longue, c'est la culture: faire comprendre à tes devs que le faux recruteur est une attaque réelle qui les vise spécifiquement.
Verdict
L'angle "supply chain" est intéressant parce qu'il déplace la défense. Tu ne peux pas patcher contre Contagious Interview avec un firewall ou un antivirus. C'est de l'hygiène de dev, de la culture d'équipe, et de l'outillage continu sur le CI.
Pour une PME qui n'a pas d'équipe sécu dédiée: le minimum vital tient en trois actions. Activer Socket (ou Snyk en mode behavioral) en GitHub App sur les repos qui font tourner du JS. Écrire un onboarding d'une page qui décrit le piège du faux recruteur en mode très concret. Et auditer une fois par an les machines des devs qui touchent à un wallet crypto ou à des environnements client de production. Le reste vient avec le temps.
Tu veux un audit rapide de la stack dev/marketing de ton équipe? On regarde le risque supply chain en 1h, gratuit pour les PMEs du Québec qu'on n'a pas encore rencontrées.
Réserver l'audit