Aller au contenu
Sécurité medium

Mastra (npm, typosquat easy-day-js)

3 min de lecture
Point de compromission dans la chaîne Rupture · étape Dépendances
Source
amont
Dépendances
Dépendances
Build & CI
ci
Packaging
artefact
Release
provenance
Registres
distribution
Déploiement
admission
Runtime
exécution
Rayon d'explosion — compromission à l'étape Dépendances, propagation possible aux consommateurs. Domaines : Intégration, Release, Fournisseurs
Gravité élevé
57 paquets @mastra (286+ versions malveillantes, plus de 1,1 million de téléchargements hebdomadaires cumulés) compromis le 17 juin 2026 : une dépendance typosquattée, easy-day-js, imite dayjs et exécute un voleur de variables d'environnement au postinstall.
57 paquets
@mastra compromis
286+
versions malveillantes
1,1 M/sem
téléchargements cumulés
4 572 o
dropper postinstall

En bref

Date
17/06/2026
Gravité
Élevé
Étape de la chaîne
Dépendances
Domaines SOCLE
Intégration+ Release, Fournisseurs

Que s'est-il passé ?

Contexte

Le 17 juin 2026 entre 01:01 et 02:39 UTC, 57 paquets de l'écosystème @mastra (framework d'agents IA), totalisant plus de 1,1 million de téléchargements hebdomadaires, sont compromis. La porte d'entrée est une dépendance typosquattée, easy-day-js, qui imite le populaire dayjs en copiant son auteur npm (iamkun), son dépôt et sa licence MIT.

Mécanisme

La dépendance `"easy-day-js": "^1.11.21"` est ajoutée aux paquets @mastra. Le caret force npm à résoudre vers la dernière version correspondante, la 1.11.22 malveillante publiée à 01:01 UTC. Son hook postinstall exécute `setup.cjs` (4 572 octets), un dropper obfusqué qui télécharge une charge de seconde étape depuis un serveur de l'attaquant puis s'auto-supprime.

ImpactLa seconde étape récolte les variables d'environnement : clés d'API LLM (OpenAI, Anthropic), identifiants cloud (AWS, Azure) et jetons CI/CD. Le trafic part vers `23.254.164.92:8000` (seconde étape) et `23.254.164.123:443` (C2 principal), avec un beacon écrit dans `/.pkg_history`. Les paquets phares `mastra` et `@mastra/core` sont touchés.
Parades

Filtrage egress au moment de l'installation (un voleur qui ne peut pas joindre son C2 est neutralisé), lockfile et versions figées pour empêcher la résolution automatique vers une version piégée, cooldown registre avant de servir une version fraîche, et inventaire npm des postes développeurs.

Chronologie de l'attaque

16 juin 2026
Version saine

easy-day-js@1.11.21 est publiée à 07:05 UTC, sans charge malveillante.

17 juin 2026
Bascule malveillante

easy-day-js@1.11.22 est mise en ligne à 01:01 UTC et ajoutée en dépendance des paquets @mastra.

17 juin 2026
Compromission de masse

Entre 01:12 et 02:39 UTC, 57 paquets @mastra (286+ versions) sont publiés avec la dépendance piégée.

Comment l'attaquant a procédé

Cet incident met en jeu les vecteurs d'attaque suivants du catalogue SOCLE ; chacun renvoie à sa fiche, où l'on trouve les exigences qui le neutralisent :

La leçon à en tirer

Ce qu'il faut retenir

Bloquer le réseau sortant pendant l'installation des dépendances ; figer les versions (lockfile, pas de caret) ; inventorier les paquets npm sur les postes développeurs.

Les exigences SOCLE qui auraient limité cet incident

Cet incident se rattache à 5 exigences du référentiel, par domaine. Les satisfaire n'aurait pas forcément tout empêché, mais aurait réduit la probabilité de l'attaque, limité son impact ou accéléré sa détection :

Pour aller plus loin

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn