martes, marzo 31, 2026

El ataque a la cadena de suministro de Axios impulsa RAT multiplataforma a través de una cuenta npm comprometida

TecnologíaEl ataque a la cadena de suministro de Axios impulsa RAT multiplataforma a través de una cuenta npm comprometida

El popular cliente HTTP conocido como Axios sufrió un ataque a la cadena de suministro después 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 versión 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 proyecto.

«Su único propósito es ejecutar un script posterior a la instalación que actúa como un troyano de acceso 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 útiles de segunda etapa específicas de la plataforma. Después de la ejecución, el malware se elimina y reemplaza su propio paquete.json con una versión limpia para evadir 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 efecto inmediato y bajar a una versión 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 útiles separadas para tres sistemas operativos. Ambas ramas de lanzamiento fueron atacadas en 39 minutos. Cada rastro fue diseñado para autodestruirse».

La cronología del ataque es la siguiente:

  • 30 de marzo de 2026, 05:57 UTC: se publica una versión limpia del paquete «plain-crypto-js@4.2.0».
  • 30 de marzo de 2026, 23:59 UTC: se publica una nueva versión («plain-crypto-js@4.2.1») con la carga útil agregada.
  • 31 de marzo de 2026, 00:21 UTC: se publica una nueva versión 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 versión 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 usuario de npm llamado «nrwise» con la dirección de correo electrónico «nrwise@proton.me».

Se cree que el atacante obtuvo un token de acceso 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 lanza 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 operativo:

  • En macOS, ejecuta una carga útil AppleScript para recuperar un binario troyano de un servidor externo («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 después 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 buscar 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 distinto 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 útiles adicionales, ejecutar comandos de shell, enumerar el sistema de archivos y finalizar la RAT.

El análisis de SafeDep del RAT de Linux ha revelado que admite los mismos comandos que su homólogo de macOS. La ausencia 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 malicioso 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 también toma medidas para realizar tres pasos de limpieza forense: eliminando el script postinstalación del directorio del paquete instalado, eliminando el «package.json», que hace referencia al gancho 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» limpio sin el gancho postinstalación que desencadena todo el ataque. Al cambiar los manifiestos del paquete, la idea es evitar generar señales de alerta durante la inspección posterior a la infección del paquete.

«Ninguna versión maliciosa contiene una sola línea de código malicioso dentro del propio Axios», dijo StepSecurity. «En cambio, ambos 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 acceso 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 busca de ejecuciones que instalaron las versiones afectadas.
  • Bloquear el tráfico de salida al dominio de comando y control («sfrclak(.)com»)

Socket, en su propio análisis 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 lado, «@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 real tiene sólo tres dependencias (follow-redirects, form-data, proxy-from-env)», dijo la empresa de seguridad de la cadena de suministro. «La adición de Plain-crypto-js es una manipulación inequívoca. Cuando npm procesa este axios suministrado, instala Plain-crypto-js y activa la misma cadena de postinstalación maliciosa».

Artículos más populares