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.

Mastra npm Supply Chain: easy-day-js Typosquat entrega RAT Cross-Platform a 144 paquetes
📌
Serie de Redondas de Seguridad: Semana del 18 de junio de 20264 min de lectura

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ón1.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 maliciosa1.11.22, publicado el 17 de junio a las 01:01 UTC) añadió un setup.cjs gotero en el postinstall gancho

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:

  1. Validación del certificado TLS
  2. Descarga una segunda etapa Node.js payload de la infraestructura controlada por los atacantes
  3. 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 .env archivos
  • 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; ehindero cuenta 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 signatures en CI para verificar firmas de paquetes