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

El popular cliente HTTP conocido como axios ha sufrido 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 «cripto-js simple» versión 4.2.1 como una dependencia falsa.

Según StepSecurity, las dos versiones fueron publicado utilizando las credenciales npm comprometidas del mantenedor principal de Axios («jasonsaayman»), lo que permite 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 gotero de troyano de acceso remoto (RAT) multiplataforma, dirigido a macOS, Windows y Linux», dijo el investigador de seguridad Ashish Kurmi. dicho. «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.

Ciberseguridad

«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 y guardarlo en «/tmp/ld.py,» y ejecútelo 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.

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.

Ciberseguridad

«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[.]es»)

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 malicioso «plain-crypto-js» está incrustado en lo profundo de una ruta proporcionada. Por otro lado, «@qqbrowser/openclaw-qbot@0.0.130» incluye un «axios@1.14.1» manipulado en sus node_modules.

«El axios real tiene sólo tres dependencias (follow-redirects, form-data, proxy-from-env)», la empresa de seguridad de la cadena de suministro dicho. «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».

Hackers norcoreanos publican paquetes de 26 npm que ocultan Pastebin C2 para RAT multiplataforma – CYBERDEFENSA.MX

Los investigadores de ciberseguridad han revelado una nueva iteración de la actual campaña Contagious Interview, donde los actores de amenazas norcoreanos han publicado un conjunto de 26 paquetes maliciosos en el registro npm.

Los paquetes se hacen pasar por herramientas de desarrollador, pero contienen funcionalidad para extraer el comando y control real (C2) mediante el uso de contenido aparentemente inofensivo de Pastebin como un solucionador de caídas y, en última instancia, eliminan un ladrón de credenciales y un troyano de acceso remoto dirigidos a desarrolladores. La infraestructura C2 está alojada en Vercel en 31 implementaciones.

El campañarastreado por Socket y Kieran Miyamoto de kmsec.uk está siendo rastreado bajo el apodo StegaBin.

«El cargador extrae URL C2 codificadas esteganográficamente dentro de tres pastas de Pastebin, ensayos informáticos inofensivos en los que los caracteres en posiciones uniformemente espaciadas han sido reemplazados para deletrear direcciones de infraestructura ocultas», los investigadores de Socket Philipp Burckhardt y Peter van der Zee dicho.

Ciberseguridad

La lista de paquetes npm maliciosos es la siguiente:

  • argonista@0.41.0
  • bcryptance@6.5.2
  • abeja-quarl@2.1.2
  • núcleo de burbuja@6.26.2
  • corstoken@2.14.7
  • daytonjs@1.11.20
  • ether-lint@5.9.4
  • expressjs-lint@5.3.2
  • fastify-lint@5.8.0
  • formmiderable@3.5.7
  • hapi-lint@19.1.2
  • iosysredis@5.13.2
  • jslint-config@10.22.2
  • jsnwebapptoken@8.40.2
  • kafkajs-lint@2.21.3
  • loadash-lint@4.17.24
  • mqttoken@5.40.2
  • prisma-lint@7.4.2
  • promanage@6.0.21
  • secuela@6.40.2
  • tiporiem@0.4.17
  • undicy-lint@7.23.1
  • uuindex@13.1.0
  • vitetest-lint@4.1.21
  • windowston@3.19.2
  • zoddle@4.4.2

Todos los paquetes identificados vienen con un script de instalación («install.js») que se ejecuta automáticamente durante la instalación del paquete, que, a su vez, ejecuta la carga útil maliciosa ubicada en «vendor/scrypt-js/version.js». Otro aspecto común que une a los 26 paquetes es que declaran explícitamente el paquete legítimo que están escribiendo como una dependencia, probablemente en un intento de hacerlos parecer creíbles.

La carga útil sirve como un decodificador de esteganografía de texto al contactar una URL de Pastebin y extraer su contenido para recuperar las URL C2 Vercel reales. Si bien los pegados aparentemente contienen un ensayo benigno sobre informática, el decodificador está diseñado para observar caracteres específicos en ciertas posiciones del texto y unirlos para crear una lista de dominios C2.

«El decodificador elimina los caracteres Unicode de ancho cero, lee un marcador de longitud de 5 dígitos desde el principio, calcula las posiciones de los caracteres espaciados uniformemente a lo largo del texto y extrae los caracteres en esas posiciones», dijo Socket. «Los caracteres extraídos luego se dividen en un separador ||| (con un marcador de terminación ===END===) para producir una matriz de nombres de dominio C2».

Luego, el malware llega al dominio decodificado para recuperar cargas útiles específicas de la plataforma para Windows, macOS y Linux, una táctica ampliamente observada en la campaña Contagious Interview. Uno de esos dominios, «ext-checkdin.vercel[.]app» sirve un script de shell, que luego contacta la misma URL para recuperar un componente RAT.

El troyano se conecta a 103.106.67[.]63:1244 a esperar más instrucciones que le permitan cambiar el directorio actual y ejecutar comandos de shell, a través de los cuales se implementa un conjunto integral de recopilación de inteligencia. Contiene nueve módulos para facilitar la persistencia de Microsoft Visual Studio Code (VS Code), el registro de teclas y el robo del portapapeles, la recolección de credenciales del navegador, el escaneo de secretos de TruffleHog y el repositorio Git y la filtración de claves SSH.

  • vsque utiliza un archivo task.json malicioso para contactar un dominio de Vercel cada vez que se abre un proyecto en VS Code aprovechando el disparador runOn: «folderOpen». El módulo escanea específicamente el directorio de configuración de VS Code de la víctima en las tres plataformas y escribe el archivo task.json malicioso directamente en él.
  • acortarque actúa como registrador de teclas, rastreador de mouse y ladrón de portapapeles con soporte para seguimiento activo de ventanas y realiza filtraciones periódicas cada 10 minutos.
  • hermanoque es una carga útil de Python para robar almacenes de credenciales del navegador.
  • jque es un módulo de Node.js utilizado para el robo de navegadores y criptomonedas dirigido a Google Chrome, Brave, Firefox, Opera y Microsoft Edge, y extensiones como MetaMask, Phantom, Coinbase Wallet, Binance, Trust, Exodus y Keplr, entre otras. En macOS, también apunta al llavero de iCloud.
  • zque enumera el sistema de archivos y roba archivos que coinciden con ciertos patrones predefinidos.
  • norteque actúa como RAT para otorgar al atacante la capacidad de controlar de forma remota el host infectado en tiempo real a través de una conexión WebSocket persistente a 103.106.67[.]63:1247 y exfiltrar datos de interés a través de FTP.
  • trufaque descarga el legítimo Escáner de secretos de TruffleHog desde la página oficial de GitHub para descubrir y filtrar los secretos de los desarrolladores.
  • gitque recopila archivos de directorios .ssh, extrae credenciales de Git y escanea repositorios.
  • programadoque es lo mismo que «vendor/scrypt-js/version.js» y se vuelve a implementar como mecanismo de persistencia.
Ciberseguridad

«Mientras que las oleadas anteriores de la campaña Contagious Interview se basaban en scripts maliciosos relativamente sencillos y cargas útiles alojadas en Bitbucket, esta última iteración demuestra un esfuerzo concertado para evitar tanto la detección automatizada como la revisión humana», concluyó Socket.

«El uso de esteganografía a nivel de personaje en Pastebin y el enrutamiento Vercel de múltiples etapas apunta a un adversario que está refinando sus técnicas de evasión e intentando hacer sus operaciones más resistentes».

La divulgación se produce cuando también se ha observado que los actores norcoreanos publican paquetes npm maliciosos (por ejemplo, express-core-validator) para recuperar una carga útil de JavaScript de la siguiente etapa alojada en Google Drive.

«Sólo se ha publicado un paquete con esta nueva técnica», Miyamoto dicho. «Es probable que FAMOUS CHOLLIMA continúe aprovechando múltiples técnicas e infraestructura para entregar cargas útiles de seguimiento. Es poco probable que esto indique una revisión completa de su comportamiento de etapa en npm».