
Los investigadores de ciberseguridad están haciendo sonar la alarma sobre lo que se ha descrito como «actividad maliciosa» en las versiones recientemente publicadas de node-ipc.
Según Socket y StepSecurity, se ha confirmado que tres versiones diferentes del paquete npm son maliciosas:
- nodo-ipc@9.1.6
- nodo-ipc@9.2.3
- nodo-ipc@12.0.1
«Los primeros análisis indican que node-ipc@9.1.6, node-ipc@9.2.3 y node-ipc@12.0.1 contienen comportamientos de ladrón/puerta trasera ofuscados», dijo Socket.
«El malware parece tomar huellas dactilares del entorno del host, enumerar y leer archivos locales, comprimir y fragmentar los datos recopilados, envolver la carga útil en un sobre criptográfico e intentar la filtración a través de un punto final de red seleccionado mediante lógica de direcciones/DNS».
StepSecurity dijo que la carga útil muy ofuscada se activa cuando se requiere el paquete en tiempo de ejecución e intenta filtrar un amplio conjunto de secretos de desarrollador y de la nube a un servidor externo de comando y control (C2).
Esto incluye 90 categorías de credenciales, incluidos Amazon Web Services, Google Cloud, Microsoft Azure, claves SSH, tokens de Kubernetes, configuraciones de GitHub CLI, configuraciones de Claude AI y Kiro IDE, estado de Terraform, contraseñas de bases de datos, historial de shell y más. Luego, los datos recopilados se comprimen en un archivo GZIP y se transmiten al dominio «sh.azurestaticprovider(.)net».
Las tres versiones fueron publicadas por una cuenta llamada «atiertant», que no tiene conexión con el autor original del paquete, «riaevangelist». Aunque «atiertant» aparece en la lista de mantenedores, la cuenta no tiene un historial de publicación anterior en relación con el paquete node-ipc. La actualización anterior del paquete fue en agosto de 2024.
El hecho de que el paquete inactivo de alta descarga se haya visto comprometido después de un intervalo de 21 meses indica que las credenciales «atiertant» fueron comprometidas recientemente o que la cuenta se agregó específicamente como mantenedor para publicar las versiones maliciosas.
Lo notable de la actividad es que no depende de ningún enlace del ciclo de vida de npm, como scripts de preinstalación, instalación o postinstalación, sino que agrega la carga útil maliciosa como una expresión de función invocada inmediatamente (IIFE) al final de «node-ipc.cjs». Esto, a su vez, hace que el malware se active incondicionalmente en cada requisito (‘nodo-ipc’).
La rareza no termina ahí, ya que la carga útil realiza una verificación de huellas dactilares SHA-256 y la compara con un hash codificado ensamblado a partir de ocho fragmentos de tabla ofuscados incrustados en el código, antes de continuar con la enumeración del sistema y la recolección integral de credenciales.
«Esto significa que 12.0.1 es completamente inerte en cualquier máquina cuya ruta del módulo principal no alcance el valor objetivo», dijo el investigador de StepSecurity Sai Likhith. «El atacante sabe exactamente qué proyecto o desarrollador está siendo atacado y precalcula el hash de su punto de entrada antes de publicarlo. Las versiones 9.x no tienen esta puerta y ejecutarán la carga útil completa en cualquier sistema que las cargue».
El malware también incorpora un segundo canal de exfiltración además de emitir un HTTPS POST al dominio falso de Azure que contiene los datos robados comprimidos. Esto implica codificar fragmentos del archivo como un registro DNS TXT después de anular el solucionador de DNS del sistema con Google Public DNS para eludir los controles de seguridad locales basados en DNS.

«Primero resuelve sh.azurestaticprovider.net usando 1.1.1.1 (primario) o 8.8.8.8 (alternativo) para obtener la IP C2», dijo StepSecurity. «Luego redirecciona el solucionador directamente a la IP C2 para todas las consultas de exfiltración».
«El sumidero de DNS directo a C2 es una técnica anti-detección notable. Debido a que las consultas de exfiltración nunca tocan los solucionadores de DNS públicos, no hay actividad bt.node.js observable en los registros de DNS públicos. Las organizaciones que dependen únicamente del registro de DNS a través de solucionadores corporativos no verían este tráfico».
Por último, el malware también intenta continuar la ejecución independientemente del proceso Node.js original al bifurcarse en procesos secundarios en segundo plano separados, lo que permite que la actividad de exfiltración continúe silenciosamente después de que se finaliza la aplicación principal.
«Esta campaña refleja cómo los ataques a la cadena de suministro de software están evolucionando más allá de simples paquetes maliciosos hacia operaciones de recolección de credenciales conscientes de la infraestructura», dijo en un comunicado Avital Harel, líder de investigación de seguridad de Upwind. «Los atacantes apuntan cada vez más a las identidades y los sistemas de automatización que impulsan los canales de entrega de software modernos, mientras diseñan malware específicamente para integrarse en el comportamiento normal de los desarrolladores y las aplicaciones».
Esta no es la primera vez que el paquete npm tiene una funcionalidad maliciosa incorporada en su código. En marzo de 2022, el responsable del paquete introdujo deliberadamente capacidad destructiva en las versiones 10.1.1 y 10.1.2 sobrescribiendo archivos en sistemas ubicados en Rusia o Bielorrusia como forma de protesta tras la invasión militar rusa de Ucrania.
Dos versiones posteriores, 11.0.0 y 11.1.0, incluyeron la dependencia «peacenotwar», que también fue publicada por el mismo mantenedor como una «protesta no violenta contra la agresión de Rusia».
«El último incidente parece involucrar una republicación sospechosa o reintroducción de código malicioso en versiones de un paquete conocido, en lugar de un intento de typosquatting», dijo Socket.
Se recomienda a los usuarios eliminar las versiones comprometidas de node-ipc y reinstalar una versión limpia conocida (9.2.1 y 12.0.0), asumir el compromiso y rotar las credenciales y secretos, auditar la actividad de publicación de npm para cualquier paquete accesible con los tokens rotados, revisar los registros de ejecución del flujo de trabajo para detectar actividades sospechosas, auditar los registros de la nube para verificar si las identidades de IAM cuyas credenciales estaban disponibles durante la ventana comprometida realizaron acciones no autorizadas y bloquear el tráfico de salida al dominio C2.
Actualizar
Desde entonces ha surgido que la cuenta del mantenedor inactivo pudo haber sido asumida a través de un dominio de correo electrónico vencido. Según una publicación X de Ian Ahl, director de tecnología (CTO) de Permiso Security, la dirección de correo electrónico de la cuenta de atiertant estaba alojada en un dominio llamado «atlantis-software(.)net» que expiró el 10 de enero de 2025 y se volvió a registrar el 7 de mayo de 2026, una semana antes de que se produjera el ataque.
«Suponiendo que el correo electrónico de recuperación de la cuenta npm para atiertant estuviera efectivamente alojado en atlantis-software(.)net, el nuevo propietario del dominio pudo activar un restablecimiento de contraseña npm estándar, recibir el correo electrónico de restablecimiento en un buzón bajo su control y obtener derechos de publicación sin comprometer la propia infraestructura del mantenedor», dijo Socket.