En bref

  • 144 packages du framework open source Mastra ont été backdoorés le 17 juin 2026 via une dépendance malveillante nommée easy-day-js, typosquat de la librairie dayjs.
  • L'attaque exploite un compte npm d'un ancien contributeur dont les droits n'avaient jamais été révoqués, exposant plus de 1,1 million de téléchargements hebdomadaires.
  • Les équipes de développement utilisant Mastra doivent immédiatement auditer leurs lock files, révoquer leurs tokens npm et vérifier les traces d'exécution postinstall suspectes.

Comment 144 packages npm ont été backdoorés en 88 minutes

Dans la nuit du 16 au 17 juin 2026, le framework JavaScript Mastra — utilisé par des milliers de développeurs pour construire des applications d'intelligence artificielle — a été au centre d'une attaque de supply chain soigneusement préparée. En l'espace de quatre-vingt-huit minutes, un attaquant a publié cent quarante-quatre versions malveillantes de packages appartenant à l'organisation npm @mastra. L'ensemble de l'opération n'a été détecté que plusieurs heures après sa mise en œuvre, laissant le temps à la charge malveillante de se propager auprès de nombreux développeurs.

Le vecteur initial de cette attaque n'est pas une vulnérabilité technique dans l'infrastructure de npm, mais bien un problème de gestion des accès humains. L'attaquant a utilisé le compte d'un ancien contributeur légitime de Mastra, identifié sous le pseudonyme ehindero, dont les droits de publication n'avaient jamais été révoqués après son départ du projet. Ce type de faille organisationnelle — des comptes fantômes conservant des permissions actives longtemps après la fin de leur contribution — est un vecteur classique et sous-estimé dans les projets open source. La compromission du compte ehindero lui-même reste à ce stade sous enquête, les chercheurs n'excluant ni une attaque par credential stuffing ni un hameçonnage ciblé.

La mécanique de l'attaque repose sur une dépendance tierce malveillante : easy-day-js. Ce package a été initialement publié sur npm le 16 juin 2026 à 7h05 UTC par l'utilisateur sergey2016 comme une copie parfaitement fonctionnelle de la librairie day.js, référence pour la manipulation de dates en JavaScript. En apparence, easy-day-js était un package propre et sans danger. C'est précisément là que réside la sophistication de l'attaque : cette phase de mise en sommeil du package vise à lui faire accumuler de la visibilité et de la légitimité avant que le code malveillant ne soit injecté.

Le 17 juin 2026 à 1h01 UTC, l'attaquant a publié une nouvelle version d'easy-day-js intégrant un payload obfusqué dans le hook postinstall du package.json. Ce hook s'exécute automatiquement dès l'installation du package, avant même que le développeur n'ait lancé son application — et donc avant que tout mécanisme de détection runtime ne soit en mesure de l'intercepter. C'est dans cette fenêtre de 88 minutes, entre 1h01 et 2h29 UTC, que le compte ehindero a publié les cent quarante-quatre nouvelles versions de packages Mastra, chacune intégrant easy-day-js comme nouvelle dépendance.

La charge utile déposée par easy-day-js est un Remote Access Trojan (RAT) multiplateforme écrit en Node.js. Ce RAT s'installe de manière persistante sur Windows via le registre Run, sur macOS via LaunchAgent et sur Linux via systemd ou cron, garantissant sa survie aux redémarrages. Une fois installé, il procède à plusieurs actions critiques : inventaire systématique des extensions de navigateur liées à cent soixante-six portefeuilles de cryptomonnaies (MetaMask, Phantom, Coinbase Wallet), exfiltration de l'historique de navigation complet depuis Google Chrome, et collecte d'informations système pour un profilage de la machine compromise.

Selon les analyses publiées par StepSecurity et OX Security, les packages compromis totalisaient plus de 1,1 million de téléchargements hebdomadaires cumulés. Ce chiffre représente l'étendue maximale de l'exposition potentielle, sachant que tous les environnements ne disposaient pas nécessairement de la version infectée dans leur cache ou leurs lock files. Les développeurs ayant lancé un npm install ou npm ci dans la fenêtre de disponibilité des versions malveillantes — sans lock file strict ou sans vérification d'intégrité — sont considérés comme exposés.

L'équipe de Mastra a réagi dès la détection de l'incident en révoquant les accès du compte ehindero, en supprimant les versions compromises de l'ensemble des packages affectés, et en publiant de nouvelles versions propres dépourvues de la dépendance easy-day-js. npm, désormais sous GitHub/Microsoft, a de son côté supprimé le package easy-day-js et suspendu les comptes impliqués. Une demande CVE formelle a été déposée pour référencer cette attaque, identifiée provisoirement sous le nom EASY_DAY_JS_MASTRA_2026.

Pour les équipes impactées, les étapes de remédiation recommandées incluent : vérifier la présence d'easy-day-js dans les lock files (package-lock.json, yarn.lock, pnpm-lock.yaml), inspecter les logs système à la recherche de processus Node.js anormaux démarrés depuis un répertoire npm, révoquer tous les tokens et secrets potentiellement exfiltrés, et auditer les extensions de navigateur sur les machines des développeurs ayant installé des packages Mastra durant la nuit du 16 au 17 juin.

Un révélateur des fragilités structurelles de l'écosystème npm

L'attaque easy-day-js/Mastra s'inscrit dans une tendance de fond particulièrement préoccupante pour l'écosystème JavaScript : les attaques de supply chain passant par le détournement de comptes de contributeurs légitimes. Ce vecteur est fondamentalement différent des attaques de typosquatting classiques où l'attaquant tente d'imiter le nom d'un package populaire. Ici, l'accès est direct et authentique — ce qui contourne tous les contrôles de réputation basés sur l'ancienneté du compte ou l'historique de publication.

La technique du package endormi utilisée avec easy-day-js mérite une attention particulière. En publiant d'abord une version fonctionnelle et légitime d'une librairie connue, l'attaquant cherche à s'inscrire dans les résultats de recherche npm et à accumuler des téléchargements propres pour passer sous les radars des systèmes de détection comportementale. Cette stratégie de patience est empruntée aux acteurs APT et son apparition dans le contexte de la supply chain JavaScript signale une professionnalisation croissante des attaquants ciblant les développeurs.

Pour les entreprises, cette affaire illustre plusieurs risques concrets. Premièrement, les pipelines CI/CD qui résolvent les dépendances à la volée sans lock file immuable sont structurellement vulnérables — un npm install sans --frozen-lockfile peut introduire une version malveillante même si le code source n'a pas changé. Deuxièmement, l'utilisation de frameworks IA open source comme Mastra dans des contextes de production crée une surface d'attaque souvent sous-évaluée : ces frameworks traitent fréquemment des données sensibles (contexte utilisateur, données métier, clés API). Troisièmement, l'absence de révocation systématique des accès des anciens contributeurs open source est un angle mort persistant, y compris dans des projets bien maintenus.

Du point de vue réglementaire, cet incident renforce l'urgence des exigences de traçabilité des composants logiciels portées par des cadres comme le Cyber Resilience Act européen et les SBOM mandatés dans certains contextes par la directive NIS2. Les organisations soumises à ces obligations doivent documenter leurs dépendances et maintenir la capacité d'identifier rapidement tous les systèmes utilisant un composant compromis — exactement le type de réponse rendu difficile lorsqu'une dépendance transitive est infectée.

Ce qu'il faut retenir

  • 144 packages Mastra ont été backdoorés le 17 juin 2026 via easy-day-js, un typosquat de dayjs déposant un RAT multiplateforme ciblant les portefeuilles crypto et l'historique Chrome.
  • L'attaque a exploité un compte d'ancien contributeur aux droits non révoqués — un vecteur souvent négligé dans la gestion des identités open source.
  • Toute équipe utilisant Mastra doit auditer ses lock files, inspecter les processus Node.js actifs et révoquer les tokens potentiellement exposés dans la fenêtre 1h01-2h29 UTC du 17 juin.

Comment savoir si mon environnement a été compromis par easy-day-js ?

Vérifiez la présence d'easy-day-js dans vos fichiers package-lock.json, yarn.lock ou pnpm-lock.yaml. Recherchez des processus Node.js persistants démarrés depuis un répertoire de modules npm dans les services Windows, les LaunchAgents macOS ou systemd/cron Linux. Inspectez également les extensions de navigateur installées sur les machines des développeurs ayant effectué des installations de packages Mastra dans la nuit du 16 au 17 juin 2026 UTC.

Besoin d'un accompagnement expert ?

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

Prendre contact