Mastra npm Supply Chain: easy-day-js Typosquat entrega RAT Cross-Platform a 144 paquetes
Cómo los paquetes de npm clasificados dirigidos al marco de agente Mastra AI infectaron 144 paquetes de empresa con un RAT multiplataforma.
Este post forma parte del Semana del 19 de junio de 2026.
Sinopsis
El 17 de junio de 2026, un atacante comprometió el @mastra npm organización and mass-published 144 versiones de paquetes en una ventana de 88 minutos. Mastra es un marco de agente de código abierto TipoScript AI con descargas semanales combinadas superiores a 1.1 millones. El vector de ataque fue una cuenta de contribuyente con acceso publicado que nunca fue revocado después de que el contribuyente abandonó el proyecto.
Cadena de ataque
Etapa 1: Compromiso de la cuenta basada en la estabilidad
El atacante secuestró la cuenta Npm ehindero — un ex contribuyente legítimo de Mastra cuyo alcance publicar permisos nunca fueron revocados. npm no expira el alcance publicar permisos sobre inactividad, lo que significa que una única credencial firme comprometida fue suficiente para publicar a cada paquete bajo el @mastra alcance.
Etapa 2: Dependencia de Troya — easy-day-js
En lugar de inyectar directamente malware en la fuente de Mastra, el atacante creó una dependencia llamada easy-day-js — un tipo de uso generalizado dayjs biblioteca de citas. The typosquat was engineered to survivor casual review:
- Nombre de autor Duplicado de dayjs, página principal, URL del repositorio, licencia y versión numerando verbatim
- Primera versión
1.11.21, publicado el 16 de junio a las 07:05 UTC) fue una copia limpia y funcional de dayjs sin código malicioso - estableciendo un historial de paquetes creíble - Versión maliciosa
1.11.22, publicado el 17 de junio a las 01:01 UTC) añadió unsetup.cjsgotero en elpostinstallgancho
Los paquetes de Mastra se actualizaron para incluir "easy-day-js": "^1.11.21" — un rango de semver que se resuelve automáticamente a la última versión que coincida en el tiempo de instalación. Una vez 1.11.22 fue publicado, cada nuevo npm install de cualquier paquete Mastra afectado automáticamente sacó la carga útil.
Etapa 3: Carga de carga — RAT de plasma cruzado
El postinstall dropper:
- Validación del certificado TLS
- Descarga una segunda etapa Node.js payload de la infraestructura controlada por los atacantes
- Instala la persistencia de inicio de sesión a nivel de OS (comienzo de Windows, MacOS LaunchAgent, Linux cron/systemd)
La segunda etapa de RAT:
- Inventarios 166 extensiones del navegador de cartera de criptomonedas (MetaMask, Phantom, Coinbase Wallet, etc.)
- Historia del navegador de cosechas, cookies y credenciales guardadas de Chrome, Brave, y Edge
- Exfiltrados descubrieron secretos CI/CD, variables ambientales y
.envarchivos - Establece una baliza C2 persistente
Scope and Detection Timeline
- 16 de junio de 07:05 UTC: Limpio
[email protected]publicado - 17 de junio, 01:01 UTC: Malicious
[email protected]publicado - 17 de junio, 01:01–02:29 UTC (88 minutos): 144
@mastra/*versiones de paquetes publicadas con la dependencia maliciosa - 17 de junio, ~02:30 UTC: Detectado por el investigador externo de seguridad (SafeDep/Orca Security); npm notified
- 17 de junio: Se eliminaron los paquetes maliciosos;
ehinderocuenta suspendida; versiones limpias publicadas
Remediación
# Check if any affected Mastra versions are in your lock file
# Affected: @mastra/* versions published 2026-06-17 01:01 - 02:29 UTC
# Check your package-lock.json or yarn.lock for @mastra/* versions in this window
# Update all @mastra/* packages to latest clean versions
npm update @mastra/core @mastra/client-js # (and any other @mastra/* deps)
# If your environment ran npm install during the attack window:
# 1. Treat the machine/CI runner as compromised
# 2. Rotate ALL secrets: API keys, cloud credentials, DB passwords, JWT secrets
# 3. Audit cryptocurrency wallet extensions
# 4. Scan for persistence mechanisms:
# - Windows: HKCU\Software\Microsoft\Windows\CurrentVersion\Run
# - macOS: ~/Library/LaunchAgents/*.plist
# - Linux: crontab -l; ls /etc/cron.*; systemctl list-units --user
Structural Fix: Prevent Stale Contributor Attacks
Este ataque es totalmente prevenible. Los encargados de los proyectos deberían:
- Auditoría periódica npm miembros de la organización y revocar el acceso de los contribuyentes difuntos
- Exigir certificados a nivel SLSA para todas las npm publica (
npm publish --provenance) - Unidades de pin a versiones exactas (
1.11.21) no rangos (^1.11.21) para las dependencias transitivas críticas - Habilitación
npm audit signaturesen CI para verificar firmas de paquetes