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. 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. 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. 3. L'exécution

    Au npm install, ou plus subtilement au npm 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. 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. 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.

Vladimir Novick (dev.to)Témoignage direct: un recruteur LinkedIn lui envoie un fake repo MEV bot avant l'entrevue technique. Il identifie le piège à temps.

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

FamilleRôleCible principaleOS
BeaverTailStealer 1ère stageBrowsers, Keychain macOS, ≥12 wallets crypto, tokens AWS/npm/GitHubWindows + macOS + Linux
InvisibleFerretRAT 2ème stageRemote tasking, C2 bidirectionnel, exfiltration continue, parfois credit cardsWindows + macOS + Linux
OtterCookieVariante stealerSimilaire à BeaverTail, parfois substitué selon la campagneWindows + 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