En bref

  • 36 paquets malveillants déguisés en plugins Strapi CMS ont été découverts sur le registre npm.
  • Ils déploient des reverse shells, exploitent Redis et PostgreSQL, et volent des identifiants.
  • La campagne cible notamment la passerelle de paiement crypto Guardarian.

Ce qui s'est passé

Points clés à retenir

  • Ce qui s'est passé
  • Pourquoi c'est important
  • Ce qu'il faut retenir

Des chercheurs en sécurité ont mis au jour une campagne de type npm supply chain Strapi : 36 paquets malveillants publiés sur le registre npm, tous déguisés en plugins communautaires pour le CMS open source Strapi. Les paquets respectent une convention de nommage volontairement crédible, commençant par « strapi-plugin- » et suivie de termes techniques familiers aux développeurs, tels que « cron », « database », « server » ou « upload ». Tous affichent le même numéro de version, 3.6.8, choisi pour donner l'illusion d'extensions matures et maintenues depuis plusieurs cycles de publication. Derrière cette façade, le code embarqué déploie un reverse shell qui ouvre une connexion sortante vers une infrastructure contrôlée par les attaquants, offrant un accès distant persistant au serveur d'application. L'attaque vise directement la chaîne d'approvisionnement logicielle, en exploitant la confiance accordée aux dépendances tierces.

Chaque paquet contient trois fichiers : package.json, index.js et postinstall.js. Ce dernier s'exécute automatiquement après l'installation et déclenche la charge utile. Selon l'analyse publiée par The Hacker News, les payloads varient : certains déploient un web shell PHP et un reverse shell Node.js via SSH dans le répertoire public de Strapi, d'autres exploitent une instance Redis locale pour injecter une entrée crontab téléchargeant et exécutant un script distant toutes les minutes.

L'enquête a révélé que la campagne cible spécifiquement Guardarian, une passerelle de paiement en cryptomonnaies. Les indices incluent des requêtes directes vers les bases de données associées à Guardarian, l'utilisation d'un module API Guardarian, et le ciblage de fichiers de portefeuilles spécifiques. Les chercheurs recommandent à quiconque a installé l'un de ces paquets de considérer son environnement comme compromis et de procéder à une rotation complète des identifiants.

Pourquoi c'est important (2)

Les attaques supply chain via npm ne faiblissent pas. Après les 1 700 paquets nord-coréens et la compromission d'Axios découverts ces dernières semaines, cette campagne confirme que les registres de paquets restent un vecteur d'attaque privilégié. La sophistication est croissante : les attaquants ne se contentent plus de vol de tokens, ils déploient des implants persistants et exploitent les services d'infrastructure locaux comme Redis. Pour les équipes DevSecOps, cela renforce la nécessité d'auditer systématiquement les dépendances avec des outils comme Socket, Snyk ou npm audit, et de verrouiller les versions avec des lockfiles signés.

Ce qu'il faut retenir (2)

  • Vérifiez immédiatement si l'un des 36 paquets « strapi-plugin-* » malveillants figure dans vos projets.
  • Considérez tout environnement ayant installé ces paquets comme compromis : rotation des clés, tokens et mots de passe.
  • Intégrez un outil d'analyse de dépendances dans votre pipeline CI/CD pour détecter les paquets suspects avant déploiement.

Comment vérifier si mes projets sont affectés par ces paquets malveillants ?

Lancez la commande « npm ls » dans chacun de vos projets et recherchez tout paquet commençant par « strapi-plugin- » avec la version 3.6.8. Vous pouvez aussi utiliser « npm audit » pour une vérification automatisée. Si vous trouvez l'un de ces paquets, supprimez-le immédiatement, purgez le cache npm, et procédez à un audit complet de votre serveur, en particulier les répertoires publics de Strapi et les entrées crontab.

Pourquoi c'est important

Les attaques supply chain via npm ne faiblissent pas. Après les 1 700 paquets nord-coréens et la compromission d'Axios découverts ces dernières semaines, cette campagne confirme que les registres de paquets restent un vecteur d'attaque privilégié. La sophistication est croissante : les attaquants ne se contentent plus de vol de tokens, ils déploient des implants persistants et exploitent les services d'infrastructure locaux comme Redis. Pour les équipes DevSecOps, cela renforce la nécessité d'auditer systématiquement les dépendances avec des outils comme Socket, Snyk ou npm audit avant tout déploiement en production.

Cette campagne s'inscrit dans une lignée de précédents documentés : ua-parser-js en 2021, event-stream en 2018, ou encore node-ipc détourné à des fins politiques en 2022. Le choix de Strapi comme cible n'est pas anodin : ce CMS headless open source équipe des dizaines de milliers d'API en production, souvent connectées à des bases de données sensibles et à des passerelles de paiement. En imitant des plugins « cron », « database » ou « server », les attaquants misent sur la confiance implicite accordée aux extensions d'un écosystème perçu comme fiable. Le registre npm héberge plus de trois millions de paquets et reçoit plusieurs milliers de nouvelles publications quotidiennes, un volume qui rend la modération manuelle impossible et explique pourquoi ces campagnes restent actives plusieurs semaines avant détection.

Ce qu'il faut retenir

  • 36 paquets npm frauduleux imitent des plugins Strapi légitimes avec un numéro de version fixe (3.6.8) destiné à rassurer.
  • Le script postinstall.js s'exécute automatiquement à l'installation, sans action supplémentaire de la victime.
  • Les charges utiles combinent web shell PHP, reverse shell Node.js et persistance via crontab exploitant Redis.
  • La cible identifiée, Guardarian, illustre un ciblage financier précis plutôt qu'une campagne opportuniste généraliste.
  • Toute installation de l'un de ces paquets doit être traitée comme une compromission complète de l'environnement.

Comment vérifier si mes projets sont affectés par ces paquets malveillants ?

Plusieurs vérifications rapides permettent d'évaluer l'exposition d'un environnement Strapi :

  • Inspecter package.json et package-lock.json à la recherche de dépendances commençant par « strapi-plugin- » dont l'origine n'est pas clairement identifiée ni maintenue sur le dépôt officiel Strapi Marketplace.
  • Exécuter npm ls --all | grep strapi-plugin pour lister l'arbre complet des dépendances, y compris transitives.
  • Examiner le contenu des scripts postinstall déclarés dans les package.json des dépendances installées avant tout déploiement.
  • Vérifier les tâches planifiées (crontab -l) pour toute entrée inconnue téléchargeant et exécutant un script distant.
  • Auditer les instances Redis locales à la recherche de clés ou de configurations injectées de façon anormale.
  • En cas de doute, procéder à une rotation complète des identifiants (base de données, API, portefeuilles crypto) et réinstaller l'environnement depuis une image saine.

Ces réflexes s'inscrivent dans une démarche plus large de sécurisation de la chaîne d'approvisionnement logicielle, essentielle pour toute organisation dépendant d'un écosystème open source aussi vaste que celui de npm.

Besoin d'un accompagnement expert ?

Ayi NEDJIMI vous accompagne sur vos projets cybersécurité et IA.

Prendre contact

Sources et références