El popular cliente HTTP conocido como Axios sufrió un ataque a la esclavitud de suministro a posteriori de que dos versiones recientemente publicadas del paquete npm introdujeran una dependencia maliciosa.
Se ha descubierto que las versiones 1.14.1 y 0.30.4 de Axios inyectan la lectura 4.2.1 de “plain-crypto-js” como una dependencia falsa.
Según StepSecurity, las dos versiones se publicaron utilizando las credenciales npm comprometidas del mantenedor principal de Axios (“jasonsaayman”), lo que permitió a los atacantes eludir la canalización CI/CD de GitHub Actions del plan.
“Su único propósito es ejecutar un script posterior a la instalación que actúa como un troyano de llegada remoto multiplataforma (RAT), dirigido a macOS, Windows y Linux”, dijo el investigador de seguridad Ashish Kurmi. “El dropper contacta con un servidor de comando y control en vivo y entrega cargas avíos de segunda etapa específicas de la plataforma. A posteriori de la ejecución, el malware se elimina y reemplaza su propio paquete.json con una lectura limpia para esquivar la detección forense”.
Los usuarios que tengan instaladas las versiones 1.14.1 o 0.30.4 de Axios deben rotar sus secretos y credenciales con intención inmediato y descabalgar a una lectura segura (1.14.0 o 0.30.3). Las versiones maliciosas, así como “plain-crypto-js”, ya no están disponibles para descargar desde npm.
Con más de 83 millones de descargas semanales, Axios es uno de los clientes HTTP más utilizados en el ecosistema JavaScript en marcos frontend, servicios backend y aplicaciones empresariales.
“Esto no fue oportunista”, añadió Kurmi. “La dependencia maliciosa se organizó con 18 horas de anticipación. Se preconstruyeron tres cargas avíos separadas para tres sistemas operativos. Ambas ramas de tiro fueron atacadas en 39 minutos. Cada indicio fue diseñado para autodestruirse”.
La cronología del ataque es la próximo:
- 30 de marzo de 2026, 05:57 UTC: se publica una lectura limpia del paquete “plain-crypto-js@4.2.0”.
- 30 de marzo de 2026, 23:59 UTC: se publica una nueva lectura (“plain-crypto-js@4.2.1”) con la carga útil agregada.
- 31 de marzo de 2026, 00:21 UTC: se publica una nueva lectura de Axios (“axios@1.14.1”) que inyecta “plain-crypto-js@4.2.1” como una dependencia de tiempo de ejecución utilizando la cuenta comprometida “jasonsaayman”.
- 31 de marzo de 2026, 01:00 UTC: se publica una nueva lectura de Axios (“axios@0.30.4”) que inyecta “plain-crypto-js@4.2.1” como una dependencia de tiempo de ejecución utilizando la cuenta comprometida “jasonsaayman”.
Según StepSecurity, se dice que el actor de amenazas detrás de la campaña comprometió la cuenta npm de “jasonsaayman” y cambió su dirección de correo electrónico registrada a una dirección de Proton Mail bajo su control (“ifstap@proton.me”). El “plain-crypto-js” fue publicado por un heredero de npm llamado “nrwise” con la dirección de correo electrónico “nrwise@proton.me”.
Se cree que el atacante obtuvo un token de llegada npm clásico de larga duración para que la cuenta tomara el control y publicara directamente versiones envenenadas de Axios en el registro.
El malware incrustado, por su parte, se rejón a través de un dropper ofuscado de Node.js (“setup.js”) y está diseñado para ramificarse en una de las tres rutas de ataque basadas en el sistema activo:
- En macOS, ejecuta una carga útil AppleScript para recuperar un binario troyano de un servidor foráneo (“sfrclak.com:8000”), guardarlo como “/Library/Caches/com.apple.act.mond”, cambiar sus permisos para hacerlo ejecutable y ejecutarlo en segundo plano a través de /bin/zsh. El archivo AppleScript se elimina a posteriori de la ejecución para cubrir las pistas.
- En Windows, localiza la ruta binaria de PowerShell, la copia en “%PROGRAMDATA%wt.exe” (disfrazándola de la aplicación Terminal de Windows), escribe un script de Visual Basic (VBScript) en el directorio temporal y lo ejecuta. VBScript se pone en contacto con el mismo servidor para agenciárselas un script PowerShell RAT y ejecutarlo. El archivo descargado se elimina.
- En otras plataformas (por ejemplo, Linux), el dropper ejecuta un comando de shell a través de execSync de Node.js para recuperar un script Python RAT del mismo servidor, guardarlo en “/tmp/ld.py” y ejecutarlo en segundo plano usando el comando nohup.

“Cada plataforma envía un cuerpo POST diferente a la misma URL C2: paquetes.npm.org/product0 (macOS), paquetes.npm.org/product1 (Windows), paquetes.npm.org/product2 (Linux)”, dijo StepSecurity. “Esto permite que el servidor C2 proporcione una carga útil apropiada para la plataforma en respuesta a un único punto final”.
El binario de segunda etapa descargado para macOS es un RAT C++ que toma huellas digitales del sistema y envía señales a un servidor remoto cada 60 segundos para recuperar comandos para su posterior ejecución. Admite capacidades para ejecutar cargas avíos adicionales, ejecutar comandos de shell, enumerar el sistema de archivos y finalizar la RAT.
El prospección de SafeDep del RAT de Linux ha revelado que admite los mismos comandos que su homólogo de macOS. La abandono de un mecanismo de persistencia significa que el malware no sobrevive tras los reinicios. Esto indica que el ataque está orientado a una rápida filtración de datos o aprovecha la capacidad del RAT para ejecutar binarios y comandos de shell para implementar persistencia.
“El ataque se destaca por su moderación. No se modificaron archivos fuente de axios, lo que hace que sea menos probable que la revisión de código tradicional basada en diferencias lo detecte”, dijo SafeDep. “El comportamiento astuto vive completamente en una dependencia transitiva, activada automáticamente por el ciclo de vida posterior a la instalación de npm”.
Una vez que se inicia la carga útil principal, el malware Node.js además toma medidas para realizar tres pasos de precisión forense: eliminando el script postinstalación del directorio del paquete instalado, eliminando el “package.json”, que hace remisión al atractivo postinstalación para iniciar el cuentagotas, y cambiando el nombre de “package.md” a “package.json”.
Vale la pena señalar que el archivo “package.md” está incluido en “plain-crypto-js” y es un manifiesto “package.json” libre sin el atractivo postinstalación que desencadena todo el ataque. Al cambiar los manifiestos del paquete, la idea es evitar gestar señales de alerta durante la inspección posterior a la infección del paquete.
“Ninguna lectura maliciosa contiene una sola secante de código astuto en el interior del propio Axios”, dijo StepSecurity. “En cambio, los dos inyectan una dependencia falsa, Plain-crypto-js@4.2.1, un paquete que nunca se importa a ninguna parte del código fuente de Axios, cuyo único propósito es ejecutar un script posterior a la instalación que implementa un troyano de llegada remoto multiplataforma (RAT)”.
Se recomienda a los usuarios que realicen las siguientes acciones para determinar el compromiso:
- Busque las versiones maliciosas de Axios.
- Compruebe si hay artefactos RAT: “/Library/Caches/com.apple.act.mond” (macOS), “%PROGRAMDATA%wt.exe” (Windows) y “/tmp/ld.py” (Linux).
- Cambie a las versiones 1.14.0 o 0.30.3 de Axios.
- Elimine “plain-crypto-js” del directorio “node_modules”.
- Si se detectan artefactos RAT, asuma un compromiso y rote todas las credenciales en el sistema.
- Audite las canalizaciones de CI/CD en averiguación de ejecuciones que instalaron las versiones afectadas.
- Sitiar el tráfico de salida al dominio de comando y control (“sfrclak(.)com”)
Socket, en su propio prospección del ataque, dijo que identificó dos paquetes adicionales que distribuyen el mismo malware a través de dependencias proporcionadas:
En el caso de “@shadanai/openclaw”, el paquete proporciona la carga útil maliciosa “plain-crypto-js” directamente (por ejemplo, @shadanai/openclaw/files/2026.3.31-1/dist/extensions/slack/node_modules/plain-crypto-js/setup.js). Por otro banda, “@qqbrowser/openclaw-qbot@0.0.130” incluye un “axios@1.14.1” manipulado en su carpeta “node_modules/” con “plain-crypto-js” inyectado como dependencia.
“El axios actual tiene sólo tres dependencias (follow-redirects, form-data, proxy-from-env)”, dijo la empresa de seguridad de la esclavitud de suministro. “La complemento de Plain-crypto-js es una manipulación inequívoca. Cuando npm procesa este axios suministrado, instala Plain-crypto-js y activa la misma esclavitud de postinstalación maliciosa”.


