TL;DR
El 31 de marzo de 2026, atacantes comprometieron la cuenta npm del mantenedor principal de Axios, el cliente HTTP de JavaScript más popular con 83 millones de descargas semanales. Publicaron versiones maliciosas (1.14.1 y 0.30.4) que contenían un RAT multiplataforma que roba credenciales, claves SSH y tokens de la nube de las máquinas de los desarrolladores. Desactualice a Axios 1.14.0 inmediatamente, rote todos los secretos y escanee en busca de indicadores de compromiso en su sistema.
Introducción
Axios procesa más solicitudes HTTP que cualquier otra biblioteca de JavaScript. Si ha creado un cliente API, probado puntos finales o conectado una interfaz a una base de datos en los últimos cinco años, probablemente lo haya utilizado.
El 31 de marzo de 2026, a las 00:21 UTC, un actor de amenazas publicó la versión 1.14.1 de Axios a través de una cuenta de mantenedor secuestrada. El paquete parecía idéntico a la versión legítima. La diferencia era quirúrgica: solo package.json cambió en 86 archivos. Pero ese único archivo inyectó una dependencia fantasma llamada plain-crypto-js que desplegó un troyano de acceso remoto en cada máquina que ejecutaba npm install.
Las versiones maliciosas permanecieron activas durante aproximadamente dos o tres horas antes de que npm las retirara. Dos o tres horas en 83 millones de descargas semanales.
Este artículo desglosa cómo funcionó el ataque, cómo detectar si sus sistemas están comprometidos y qué deberían cambiar los equipos de API en su gestión de dependencias en el futuro.
Cómo se desarrolló el ataque a la cadena de suministro de Axios
La línea de tiempo
El atacante ejecutó esta operación con precisión en una ventana de 18 horas:
- 30 de marzo, 05:57 UTC: Se publicó un paquete de señuelo limpio
plain-crypto-js@4.2.0en npm. Publicar una versión "limpia" primero le dio al paquete un breve historial en el registro, haciéndolo parecer menos sospechoso. - 30 de marzo, 23:59 UTC: Se publicó la versión maliciosa
plain-crypto-js@4.2.1, añadiendo un hookpostinstallque contenía el dropper. - 31 de marzo, 00:21 UTC: Se lanzó
axios@1.14.1utilizando la cuenta comprometidajasonsaayman. - 31 de marzo, 01:00 UTC:
axios@0.30.4siguió 39 minutos después, dirigido a proyectos fijados en la rama 0.x. - 31 de marzo, ~03:15 UTC: npm retiró ambas versiones de Axios después de los informes de la comunidad.
- 31 de marzo, 04:26 UTC: npm publicó un stub de seguridad para
plain-crypto-jspara evitar su republicación.
Cómo se comprometió la cuenta
El atacante tomó el control de la cuenta npm jasonsaayman, el mantenedor principal de Axios. Cambiaron el correo electrónico registrado a ifstap@proton.me. La evidencia forense clave:
- Las versiones legítimas de Axios utilizan GitHub Actions con el mecanismo de Publicador de Confianza OIDC de npm. Las versiones maliciosas carecían por completo de enlace OIDC.
- No apareció ningún campo
gitHeaden las versiones comprometidas, lo que significa que no existían commits de GitHub correspondientes. - El atacante utilizó tokens de acceso npm de larga duración robados para publicar manualmente en lugar de hacerlo a través de CI/CD.
Esta distinción es importante. Si su organización publica paquetes npm, la ausencia de enlace OIDC y la procedencia de CI/CD en una versión es una señal de alerta que vale la pena automatizar para su verificación.
La técnica de inyección de dependencia
Aquí está lo que hizo que este ataque fuera sutil. El atacante no modificó el código fuente de Axios. Cambiaron una línea en package.json para agregar plain-crypto-js@^4.2.1 como una dependencia en tiempo de ejecución. Este paquete nunca fue importado en ninguna parte del código base de Axios. Existía únicamente para activar su hook postinstall durante npm install.
El análisis binario confirmó la precisión quirúrgica: solo package.json difería entre la versión limpia 1.14.0 y la comprometida 1.14.1 en los 86 archivos del paquete.
Qué hace la carga útil maliciosa
El mecanismo del dropper
El hook postinstall en plain-crypto-js ejecutó un archivo ofuscado de 4.2 KB llamado setup.js. Utilizó dos capas de ofuscación:
- Capa 1: Cifrado XOR utilizando una clave derivada de la cadena
"OrDeR_7077" - Capa 2: Codificación Base64 con inversión de caracteres
Una vez decodificado, el dropper identificó el sistema operativo del host y ejecutó cargas útiles específicas de la plataforma.
Rutas de ataque específicas de la plataforma
macOS:
Escribe AppleScript en /tmp/6202033
Ejecuta vía osascript
Descarga la carga útil en /Library/Caches/com.apple.act.mond
Windows:
Copia PowerShell en %PROGRAMDATA%\wt.exe (artefacto de persistencia)
Ejecuta el dropper VBScript a través de cscript
Linux:
Descarga el RAT de Python a /tmp/ld.py
Ejecuta vía nohup python3
Las tres ramas contactaron un servidor de comando y control con cuerpos POST específicos de la plataforma:
- macOS:
packages.npm.org/product0 - Windows:
packages.npm.org/product1 - Linux:
packages.npm.org/product2
Capacidades del RAT
El troyano de acceso remoto desplegado soporta:
- Ejecución arbitraria de comandos de shell
- Enumeración y exfiltración del sistema de archivos
- Listado e inyección de procesos
- Inyección binaria en memoria (ejecución sin archivos)
- Intervalos de baliza de 60 segundos a la infraestructura C2
En términos sencillos: el atacante obtiene control remoto completo de su máquina de desarrollo. Pueden leer sus archivos .env, robar sus claves API, copiar sus claves SSH y recolectar tokens de proveedores de la nube.
Antiforense: la carga útil de autolimpieza
Después de la ejecución, el dropper realizó tres pasos de limpieza:
- Eliminó
setup.js - Eliminó el malicioso
package.json - Renombró un
package.mdpreconfigurado (informando la versión 4.2.0) apackage.json
Esto creó una capa de engaño donde npm list informaría la versión 4.2.0 en lugar de la 4.2.1 que ejecutó la carga útil. Un desarrollador que verificara sus dependencias después del hecho no vería nada malo.
Quién está detrás de este ataque
El Grupo de Inteligencia de Amenazas de Google atribuyó el ataque de Axios a UNC1069, un presunto actor de amenazas norcoreano. El malware de macOS exhibe una "superposición significativa" con WAVESHAPER, un backdoor de C++ que Mandiant rastreó en febrero de 2026.
Grupos estatales norcoreanos tienen una profunda experiencia en ataques a la cadena de suministro. Históricamente, han utilizado herramientas de desarrollador comprometidas para robar criptomonedas, y esta operación sigue el mismo patrón: comprometer una herramienta de desarrollador ampliamente utilizada para obtener acceso a credenciales e infraestructura en la nube en miles de organizaciones.
El nivel de sofisticación es notable. La inyección de dependencia en dos etapas, el despliegue multiplataforma de RAT y la limpieza antiforense apuntan a una operación con buenos recursos. Esto no es un script kiddie que suelta un criptominero. Es una operación de inteligencia que apunta a las estaciones de trabajo de los desarrolladores.
Cómo verificar si estás afectado
Paso 1: Verifica tu versión de Axios
Ejecuta esto en cada proyecto que use Axios:
npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"
Si esto devuelve resultados, tu proyecto instaló una versión comprometida.
Paso 2: Busca la dependencia maliciosa
ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENCIALMENTE AFECTADO"
Aunque el dropper se haya limpiado, la existencia del directorio confirma que la carga útil se ejecutó.
Paso 3: Verifica si hay artefactos RAT en tu sistema
macOS:
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null
Linux:
ls -la /tmp/ld.py 2>/dev/null
Windows (PowerShell):
Test-Path "$env:PROGRAMDATA\wt.exe"
Paso 4: Comprueba los indicadores de red
Bloquea y escanea conexiones a:
- Dominio C2:
sfrclak.com - IP C2:
142.11.206.73 - URL C2:
http://sfrclak.com:8000/6202033
Paso 5: Revisa los registros de construcción de CI/CD
Revisa cualquier ejecución de pipeline de CI/CD entre el 31 de marzo a las 00:21 UTC y las 03:15 UTC. Cualquier ejecución de npm install o npm ci durante esta ventana que resolvió Axios podría haber ejecutado el dropper en tu entorno de construcción.
Pasos de remediación inmediata
Si encuentra algún indicador de compromiso, trate el sistema afectado como completamente comprometido. Aquí está la lista de prioridades:
1. Desactualice Axios inmediatamente
npm install axios@1.14.0
O para la rama 0.x:
npm install axios@0.30.3
2. Agregue anulaciones de versión a su package.json
Evitar la resolución transitiva a versiones maliciosas:
{
"overrides": {
"axios": "1.14.0"
}
}
Para Yarn:
{
"resolutions": {
"axios": "1.14.0"
}
}
3. Eliminar el paquete malicioso
rm -rf node_modules/plain-crypto-js
4. Rote todas las credenciales
Si el dropper se ejecutó en su máquina, asuma que lo siguiente está comprometido:
- tokens de npm
- credenciales de AWS/GCP/Azure
- claves SSH
- tokens de GitHub
- claves API en archivos
.env - credenciales de base de datos
- cualquier secreto almacenado en variables de entorno
Rótelo todo. No hay forma de saber qué exfiltró el RAT durante su ventana activa.
5. Bloquear C2 a nivel de red
Añadir a su archivo hosts o reglas de firewall:
echo "0.0.0.0 sfrclak.com" | sudo tee -a /etc/hosts
6. Si se encuentran artefactos, reconstruya la máquina
Un RAT con ejecución de shell y acceso al sistema de archivos puede modificar cualquier cosa. Si encontró artefactos del Paso 3, no confíe en el sistema. Reconstruya a partir de un estado conocido y bueno.
Defensas a largo plazo para equipos de desarrollo de API
Usar archivos de bloqueo y fijar versiones exactas
El ataque de Axios explotó los rangos semánticos ^. Si tu package.json dice "axios": "^1.14.0", npm resuelve la última versión compatible, que fue 1.14.1 durante la ventana del ataque.
{
"dependencies": {
"axios": "1.14.0"
}
}
Fije las versiones exactas. Siempre confirme su package-lock.json o yarn.lock. Ejecute npm ci en lugar de npm install en CI/CD para forzar la resolución del archivo de bloqueo.
Deshabilitar scripts postinstall en CI/CD
Todo el ataque dependió de la ejecución de los hooks postinstall durante npm install. Puedes deshabilitar esto:
npm ci --ignore-scripts
Esto rompe algunos paquetes que necesitan compilación nativa. Prueba tus compilaciones primero, luego permite selectivamente scripts para los paquetes que los necesitan usando .npmrc:
ignore-scripts=true
Auditar dependencias regularmente
npm audit
npx socket-security/cli audit
Ejecute estos comandos en CI/CD como una puerta. Cualquier vulnerabilidad crítica o alta debe bloquear la compilación.
Reduzca la superficie de dependencia de su cliente HTTP
Aquí está la pregunta más profunda que plantea este ataque: ¿por qué su flujo de trabajo de pruebas de API depende de una biblioteca HTTP de terceros que puede ser comprometida?
Apidog proporciona un cliente HTTP integrado para pruebas, depuración y documentación de API. No necesita Axios, node-fetch o got en su pila de pruebas. El cliente HTTP forma parte de la plataforma, sin dependencias de terceros que comprometer.
Específicamente para las pruebas de API, mover sus solicitudes HTTP a Apidog elimina toda la superficie de ataque:
- Pruebas de API: Utilice el constructor visual de pruebas de Apidog en lugar de escribir scripts de prueba basados en Axios
- Depuración de API: Utilice el inspector de solicitudes integrado de Apidog en lugar de código de cliente HTTP personalizado
- Servidores mock: Utilice el mock inteligente de Apidog en lugar de construir puntos finales mock con Express + Axios
- Integración CI/CD: Utilice la CLI de Apidog para pruebas de API automatizadas sin dependencias HTTP de npm
Pruebe Apidog gratis para ver cómo eliminar las dependencias de la biblioteca HTTP de su flujo de trabajo de API reduce el riesgo de su cadena de suministro.
Verificar la procedencia del paquete
npm ahora admite la procedencia de paquetes a través de Sigstore. Comprueba si los paquetes de los que dependes utilizan esto:
npm audit signatures
Las versiones maliciosas de Axios carecían de la procedencia de OIDC. Las versiones legítimas de las canalizaciones de CI/CD incluyen la certificación criptográfica de su origen de construcción. Si aparece una nueva versión sin procedencia, trátala con sospecha.
Lo que esto significa para el ecosistema JavaScript
El modelo de confianza está roto
El modelo de confianza de npm depende de la seguridad de la cuenta del mantenedor. Una sola credencial comprometida le da a un atacante el control sobre un paquete que 83 millones de proyectos instalan cada semana. La autenticación de dos factores ayuda, pero los tokens de acceso de larga duración aún pueden ser robados de entornos de desarrollo comprometidos.
La comunidad está discutiendo varios cambios estructurales:
- Publicación OIDC obligatoria: Requerir que todos los paquetes por encima de un umbral de descarga utilicen la publicación basada en CI/CD con tokens OIDC en lugar de credenciales de larga duración.
- Aprobación de lanzamiento por dos personas: Requerir que un segundo mantenedor apruebe los lanzamientos para paquetes críticos.
- Alcance de permisos en tiempo de ejecución: Limitar a qué pueden acceder los scripts
postinstall, similar al modelo de permisos de Deno.
Los ataques a la cadena de suministro no están disminuyendo
Este ataque se produjo pocos días después del incidente de la fractura de RubyGems y de las continuas preocupaciones sobre las dependencias de PyPI. Los registros de paquetes en todos los ecosistemas de lenguajes están bajo un ataque sostenido. Los desarrolladores de API deben considerar su árbol de dependencias como una superficie de ataque, no como una conveniencia.
La discusión en Reddit capturó bien el sentimiento: "NPM es la mayor debilidad de Internet hoy en día y aún causará una catástrofe gigante". Esté o no de acuerdo con la hipérbole, el ataque de Axios demuestra que el radio de explosión es real.
Comparación: Enfoques de dependencia del cliente HTTP
| Enfoque | Riesgo de la cadena de suministro | Carga de mantenimiento | Capacidad de prueba |
|---|---|---|---|
| Axios + scripts personalizados | Alto (dependencia de terceros) | Alto (gestión de versiones) | Requiere configuración manual |
| Node.js native fetch | Bajo (integrado en el tiempo de ejecución) | Bajo | Funciones de prueba limitadas |
| Cliente integrado de Apidog | Ninguno (sin dependencia npm) | Ninguno (gestionado por la plataforma) | Pruebas completas, mocking, documentación |
| Scripts curl/httpie | Bajo (herramienta a nivel de sistema) | Medio | Automatización limitada |
Preguntas Frecuentes
¿Es seguro usar Axios ahora?
Sí. Las versiones 1.14.0 y 0.30.3 están limpias. Las versiones comprometidas (1.14.1 y 0.30.4) fueron retiradas aproximadamente en tres horas. Verifique su versión instalada con npm list axios y revise su lockfile para confirmar que está en una versión segura.
¿Cómo sé si el RAT se ejecutó en mi máquina?
Busque artefactos específicos de la plataforma: /Library/Caches/com.apple.act.mond en macOS, /tmp/ld.py en Linux, o %PROGRAMDATA%\wt.exe en Windows. También verifique si node_modules/plain-crypto-js existe en alguno de sus proyectos. El dropper se limpia a sí mismo, por lo que la ausencia de artefactos no garantiza que esté seguro si instaló la versión comprometida.
¿Debería dejar de usar Axios por completo?
No necesariamente. Axios sigue siendo una biblioteca bien mantenida con un sólido historial. Pero este ataque debería impulsarle a evaluar si realmente necesita un cliente HTTP de terceros. Node.js 18+ incluye fetch nativo. Para pruebas de API, plataformas como Apidog proporcionan clientes HTTP integrados que eliminan esta dependencia.
¿Cómo puedo prevenir ataques a la cadena de suministro en mis proyectos?
Fije versiones exactas de dependencias, haga commit de los lockfiles, ejecute npm ci --ignore-scripts en CI/CD, audite las dependencias regularmente, verifique la procedencia del paquete con npm audit signatures y minimice su árbol de dependencias. Considere mover los flujos de trabajo de pruebas de API a plataformas integradas que no dependan de paquetes npm para la comunicación HTTP.
¿Este ataque estuvo relacionado con la filtración del código fuente de Claude Code?
Ambos eventos ocurrieron el mismo día (31 de marzo de 2026), pero no están relacionados. El ataque a Axios fue un compromiso deliberado de la cadena de suministro por parte de un actor de amenazas patrocinado por el estado. La filtración de Claude Code resultó de un error de la herramienta de construcción Bun que envió mapas de origen en producción. La coincidencia en el tiempo ha impulsado la discusión sobre la seguridad general del registro npm.
¿Quién estuvo detrás del ataque a Axios?
El Grupo de Inteligencia de Amenazas de Google atribuyó el ataque a UNC1069, un presunto actor de amenazas norcoreano. El malware de macOS comparte una superposición significativa con WAVESHAPER, un backdoor rastreado por Mandiant. Los grupos norcoreanos tienen una amplia experiencia en ataques a la cadena de suministro, generalmente dirigidos a credenciales de desarrolladores e infraestructura de criptomonedas.
¿Cuántos desarrolladores se vieron afectados?
Las versiones maliciosas estuvieron activas durante aproximadamente dos o tres horas. Con 83 millones de descargas semanales, la exposición potencial es significativa. npm no ha publicado cifras oficiales de impacto. La detección en tiempo de ejecución de StepSecurity confirmó que el dropper contactó con C2 en 1.1 segundos desde el inicio de npm install, antes de que se completara la resolución de dependencias.
¿Puede Apidog ayudar a prevenir ataques a la cadena de suministro?
Apidog elimina un vector de ataque importante al proporcionar un cliente HTTP integrado para pruebas, depuración y documentación de API. No necesita instalar Axios, node-fetch u otras bibliotecas HTTP en su flujo de trabajo de pruebas. Esto reduce la superficie de dependencia de npm y elimina el riesgo de que los paquetes de clientes HTTP comprometidos afecten su proceso de desarrollo de API.
Conclusiones clave
- El ataque a la cadena de suministro de Axios comprometió más de 83 millones de descargas semanales a través de una única cuenta de mantenedor robada.
- El RAT ataca todas las plataformas (macOS, Windows, Linux) y roba credenciales, claves SSH y tokens de la nube.
- Verifique sus sistemas inmediatamente utilizando los pasos de detección anteriores.
- Fije versiones exactas de dependencias y deshabilite los scripts postinstall en CI/CD.
- Reduzca su superficie de dependencia del cliente HTTP utilizando herramientas integradas como Apidog para pruebas de API.
- La seguridad del registro de paquetes es un problema sistémico que afecta a npm, PyPI y RubyGems.
El ataque de Axios es una llamada de atención. Cada dependencia en su node_modules es una decisión de confianza. Asegúrese de tomar esas decisiones deliberadamente, no por defecto.
