Saltar al contenido

MALFEX: un malware de npm pasó 14 meses sin ser detectado

MALFEX, una campaña de malware en npm de una sola persona, publicó 12 paquetes desde 2023 y acumuló 40.767 descargas. Algunos paquetes siguen activos y sin aviso de seguridad.

Por Tech AI Wire Team

4 min de lectura

XLinkedIn
Screenshot of CloudSEK's blog post MALFEX - A malicious npm postinstall no advisory has caught for fourteen months, above the report's header image.

En cifras

npm packages published by one operator
12
total downloads, per Checkmarx
40,767
downloads of function-flag alone
37,419
when the first package appeared
Aug 2023

Un solo atacante publica malware en npm desde agosto de 2023, y parte de él seguía siendo instalable a finales de septiembre de 2026. La empresa de seguridad CloudSEK bautizó la campaña como MALFEX el 30 de septiembre. Encontró un paquete malicioso que ningún aviso de seguridad había señalado durante 14 meses. Checkmarx lo siguió el 5 de octubre con un recuento de 40.767 descargas entre los paquetes de la campaña. Si alguno de ellos está en su árbol de dependencias, un equipo con Windows que lo instaló puede estar ejecutando una herramienta de acceso remoto.

Cómo funciona el ataque

npm es el registro de paquetes de JavaScript. Cuando instala un paquete, npm puede ejecutar un script «postinstall», un comando que eligió el autor del paquete. MALFEX usa ese script para descargar y lanzar malware para Windows en cuanto un desarrollador ejecuta npm install.

Las cargas útiles se esconden a plena vista. Según CloudSEK, los scripts descargan programas de Windows disfrazados de imágenes PNG. Checkmarx rastreó tres vías de entrega distintas.

  1. Overlord RAT. Los paquetes tlxbnhd, tldriver y mxdriver obtienen un PNG falso de api.imghippo.com. Dentro hay un programa AutoIt3 firmado y un script cifrado que carga Overlord, una herramienta de acceso remoto de código abierto escrita en Go. Una herramienta de acceso remoto, o RAT, permite al atacante controlar el equipo a distancia.
  2. Un ladrón de datos. Una cadena de native-runner, img-to-native y cdn-img-fetch descarga un programa cifrado de una cuenta de GitHub llamada «cavecrew». Después descarga un ladrón en Node.js de 64 MB al que Checkmarx llama «movinlike».
  3. Un descargador de larga duración. function-flag sigue obteniendo cargas nuevas desde servidores que rotan, entre ellos discloud.app, squareweb.app, render.com y un proxy de la CDN de Discord.

Las tres vías apuntan a Windows. Checkmarx señala que el descargador falla en macOS y Linux, porque un ajuste exclusivo de Windows del que depende no existe allí.

Qué roba y cómo se oculta

Overlord no tiene una dirección de servidor fija. «Puede leer notas cifradas que el operador publica en transacciones de Solana, descifrarlas y usar el resultado como su lista de servidores», escribe Checkmarx. Solana es una cadena de bloques pública, así que el operador puede cambiar de servidor sin modificar el malware.

El ladrón apunta a ocho clientes de Discord y a las cookies de Chrome, Edge, Brave, Opera, Vivaldi y Yandex. También va a por Telegram Desktop y las carteras de criptomonedas MetaMask, Phantom y Coinbase. Los datos robados salen por un webhook de Discord, que según Checkmarx se creó el 26 de septiembre de 2026.

La persistencia también es discreta. Checkmarx halló una tarea programada llamada \Maiden que se ejecuta cada cinco minutos, con su fecha retrasada al 1 de enero de 2020. El operador además empujó código malicioso muy a la derecha con espacios, de modo que queda más allá del borde de una ventana de editor normal.

Según CloudSEK, el operador firma su trabajo como «Murizada» con varios alias, entre ellos malfexkkj, malfex_user y cavecrew.

Los paquetes que hay que revisar

PaqueteFunciónDescargas, según CheckmarxEstado
function-flagDescargador37.419Activo, sin aviso
function-colorNo indicada300Activo, sin aviso
cdn-img-fetchCadena del ladrón643El aviso solo cubre 1.0.0-1.0.1
img-to-nativeCadena del ladrón967Con aviso
native-runnerCadena del ladrón872Incluido por Checkmarx
tlxbnhdOverlord RAT139Incautado
tldriverOverlord RAT138Incautado
mxdriverOverlord RAT289Incautado

Las dos empresas cuentan de forma algo distinta. CloudSEK indica que function-flag, cdn-img-fetch y function-color siguen siendo instalables. «Los tres paquetes sin avisos son las únicas amenazas activas que los defensores pueden atacar hoy», escribe. Checkmarx explica la diferencia en cdn-img-fetch: su aviso, MAL-2026-17320, cubre las versiones 1.0.0 y 1.0.1, pero las versiones maliciosas son la 1.0.2 y la 1.0.3.

Según Checkmarx, el operador publicó 12 paquetes en total: ocho maliciosos y cuatro señuelos inofensivos. En la semana hasta el 1 de octubre, los paquetes aún sumaron 3.017 descargas.

Los desarrolladores han sido un objetivo frecuente este mes. A principios de octubre se informó de otra campaña que escondía malware en hooks post-checkout de Git dentro de repositorios falsos de reclutadores.

Qué significa para los desarrolladores

  • Busque ya en sus archivos de bloqueo. Busque cada nombre de paquete de la tabla en package-lock.json, yarn.lock o pnpm-lock.yaml, incluidas las dependencias transitivas. npm ls <name> muestra de dónde vino un paquete.
  • No confíe solo en los avisos. El aviso de cdn-img-fetch cubre las versiones equivocadas, y dos paquetes activos no tenían ninguno. Un npm audit limpio no demuestra que esté a salvo de esta campaña.
  • Desactive los scripts de instalación donde pueda. npm install --ignore-scripts, o ignore-scripts=true en .npmrc, impide que se ejecute el código postinstall. Permita scripts solo en los paquetes que los necesiten.
  • Revise los equipos con Windows que instalaron un paquete de la lista. Busque una tarea programada llamada \Maiden y un archivo llamado node_runtime_helper.exe en %APPDATA%\Microsoft\Windows\. Checkmarx también indica la dirección 104.234.65.75 en el puerto 700 como servidor de descarga.
  • Renueve lo que se lleva el ladrón. Si un equipo fue afectado, cierre sesión en Discord y Telegram, borre las sesiones del navegador, cambie las contraseñas guardadas y mueva los fondos de cualquier cartera del navegador.

Las 37.419 descargas de function-flag son la cifra que hay que recordar. Una pequeña utilidad de nombre sencillo cargó con casi toda la campaña.

Fuentes

  1. MALFEX - A malicious npm postinstall no advisory has caught for fourteen months - CloudSEK
  2. MALFEX npm Malware Campaign: Three Payloads And An Adversary That Signs Their Work - Checkmarx

Artículos relacionados