{"id":11480,"date":"2026-05-14T13:34:52","date_gmt":"2026-05-14T19:34:52","guid":{"rendered":"https:\/\/beaconlab.us\/?post_type=publicacion&#038;p=11480"},"modified":"2026-05-14T13:34:53","modified_gmt":"2026-05-14T19:34:53","slug":"alerta-2026-51-ataque-de-supply-chain-en-npm-orientado-al-robo-de-credenciales-afecta-a-node-ipc","status":"publish","type":"publicacion","link":"https:\/\/beaconlab.us\/es\/publicacion\/alerta-2026-51-ataque-de-supply-chain-en-npm-orientado-al-robo-de-credenciales-afecta-a-node-ipc\/","title":{"rendered":"Alerta 2026-51 Ataque de Supply Chain en npm orientado al robo de credenciales afecta a node-ipc"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Producto(s) afectado(s):&nbsp;<\/h2>\n\n\n\n<p>Versiones comprometidas identificadas hasta ahora:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>node-ipc\u00a0<strong>9.1.6<\/strong><\/li>\n\n\n\n<li>node-ipc\u00a0<strong>9.2.3<\/strong><\/li>\n\n\n\n<li>node-ipc\u00a0<strong>12.0.1<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Descripci\u00f3n<\/h2>\n\n\n\n<p>Se ha hecho p\u00fablica una nueva campa\u00f1a de&nbsp;<strong>supply chain attack<\/strong>&nbsp;contra el ecosistema npm que compromete varias versiones del paquete&nbsp;<strong>node\u2011ipc<\/strong>, un m\u00f3dulo con&nbsp;<strong>m\u00e1s de 700.000\u20131.000.000 descargas semanales<\/strong>&nbsp;seg\u00fan distintas fuentes de m\u00e9tricas p\u00fablicas. En estas versiones, se ha inyectado un payload ofuscado con capacidades de&nbsp;<strong>credential stealer y backdoor<\/strong>&nbsp;tras el probable compromiso de la cuenta del mantenedor; al instalarse, el c\u00f3digo ejecutado en&nbsp;postinstall&nbsp;recoge informaci\u00f3n sensible del entorno (tokens, claves, datos de sistema) y establece comunicaci\u00f3n con infraestructura controlada por el atacante, permitiendo acceso remoto y movimiento lateral en entornos de desarrollo y CI\/CD.<\/p>\n\n\n\n<p>El node-ipc&nbsp;es un&nbsp;<strong>m\u00f3dulo de Node.js<\/strong>&nbsp;que facilita la comunicaci\u00f3n entre procesos (IPC,&nbsp;<em>Inter\u2011Process Communication<\/em>), tanto dentro de la misma m\u00e1quina como, en algunos casos, entre m\u00e1quinas distintas. Es ampliamente utilizado como&nbsp;<strong>dependencia de infraestructura<\/strong>&nbsp;en CLIs, herramientas de desarrollo y frameworks, porque ofrece una API sencilla para que distintos procesos Node intercambien mensajes, coordinen tareas o compartan estado sin tener que implementar sockets de bajo nivel o protocolos propios. Precisamente por ese rol \u201cprofundo\u201d y muy reutilizado, cualquier compromiso de&nbsp;node-ipc&nbsp;puede propagarse de forma transitiva a muchos proyectos que ni siquiera lo declaran directamente en su&nbsp;package.json, aumentando el impacto de un Supply Chain Attack.<\/p>\n\n\n\n<p>Dado el papel de&nbsp;node-ipc&nbsp;como dependencia transitiva en frameworks y CLIs populares, esta campa\u00f1a puede impactar proyectos que nunca a\u00f1adieron expl\u00edcitamente&nbsp;node-ipc&nbsp;a su&nbsp;package.json. En contraste con el incidente de protestware de 2022 (borrado\/escritura de ficheros en sistemas de Rusia\/Bielorrusia), este ataque es&nbsp;<strong>claramente malicioso y orientado a intrusi\u00f3n<\/strong>, por lo que las organizaciones deben tratar cualquier instalaci\u00f3n de las versiones afectadas como un posible compromiso de seguridad.<\/p>\n\n\n\n<p><strong>Vector de compromiso<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Socket y otros investigadores se\u00f1alan indicios de\u00a0<strong>compromiso del token\/npm account del mantenedor<\/strong>\u00a0de\u00a0node-ipc.<\/li>\n\n\n\n<li>El atacante publica versiones nuevas (9.1.6,\u00a09.2.3,\u00a012.0.1) con\u00a0<strong>cambios solo en el artefacto npm<\/strong>\u00a0(tarball), sin modificaciones visibles en el repositorio GitHub, dificultando la detecci\u00f3n por revisiones de c\u00f3digo.<\/li>\n\n\n\n<li>El paquete mantiene su descripci\u00f3n y metadatos normales, pasando bajo el radar de muchas herramientas que solo miran CVEs o cambios de dependencias de primer nivel.<\/li>\n<\/ul>\n\n\n\n<p><strong>Comportamiento del payload<\/strong><\/p>\n\n\n\n<p>Aunque el contenido concreto difiere seg\u00fan la versi\u00f3n, los patrones descritos son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Inclusi\u00f3n de un\u00a0<strong>archivo adicional ofuscado<\/strong>\u00a0(tama\u00f1o ~80 KB) que no est\u00e1 presente en versiones leg\u00edtimas.<\/li>\n\n\n\n<li>Ejecuci\u00f3n en\u00a0postinstall\u00a0o en la inicializaci\u00f3n del m\u00f3dulo, lo que garantiza su ejecuci\u00f3n en\u00a0npm install\/pnpm install\u00a0tanto en dev como en CI\/CD.<\/li>\n\n\n\n<li>Recolecci\u00f3n de informaci\u00f3n de sistema:\n<ul class=\"wp-block-list\">\n<li>usuario, hostname, rutas de proyecto;<\/li>\n\n\n\n<li>tokens npm\/Yarn\/pnpm, posibles PATs de GitHub\/GitLab encontrados en archivos de configuraci\u00f3n;<\/li>\n\n\n\n<li>variables de entorno (incluyendo credenciales cloud o secrets mal gestionados).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Exfiltraci\u00f3n de datos hacia dominios\/infraestructura controlada por el atacante (C2 HTTP\/HTTPS), con uso frecuente de ofuscaci\u00f3n de cadenas y cifrado ligero antes de enviar.<\/li>\n\n\n\n<li>En algunos an\u00e1lisis se observa capacidad de descargar\u00a0<strong>payloads adicionales<\/strong>, lo que lo convierte en un\u00a0<strong>loader\/RAT<\/strong>\u00a0m\u00e1s que en un stealer simple.<\/li>\n<\/ul>\n\n\n\n<p>En la pr\u00e1ctica, instalar las versiones afectadas implica que la m\u00e1quina de desarrollo o el runner de CI pueden considerarse&nbsp;<strong>potencialmente comprometidos a nivel de usuario<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mitigaci\u00f3n<\/h2>\n\n\n\n<p><strong>Evaluar exposici\u00f3n<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Buscar\u00a0node-ipc\u00a0en todos los proyectos:\n<ul class=\"wp-block-list\">\n<li>npm ls node-ipc<\/li>\n\n\n\n<li>pnpm list node-ipc<\/li>\n\n\n\n<li>yarn why node-ipc<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Revisar\u00a0package-lock.json,\u00a0pnpm-lock.yaml,\u00a0yarn.lock\u00a0para detectar uso de las versiones afectadas (9.1.6,\u00a09.2.3,\u00a012.0.1).<\/li>\n\n\n\n<li>Identificar d\u00f3nde se han ejecutado installs con esas versiones, especialmente:\n<ul class=\"wp-block-list\">\n<li>m\u00e1quinas de desarrolladores;<\/li>\n\n\n\n<li>runners de CI\/CD;<\/li>\n\n\n\n<li>builds de im\u00e1genes Docker.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Contenci\u00f3n<\/strong><\/p>\n\n\n\n<p>En sistemas donde se haya detectado una versi\u00f3n comprometida:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Aislar<\/strong>\u00a0temporalmente la m\u00e1quina de la red si es posible (sobre todo en CI\/CD compartidos).<\/li>\n\n\n\n<li>Revisar logs de red\/sistema para conexiones salientes sospechosas durante\u00a0npm install\u00a0y la ejecuci\u00f3n de builds.<\/li>\n\n\n\n<li>Si el entorno es sensible (claves cloud, producci\u00f3n), considerar crear una\u00a0<strong>imagen forense<\/strong>\u00a0antes de limpiar.<\/li>\n<\/ul>\n\n\n\n<p><strong>Eliminaci\u00f3n del paquete malicioso<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fijar expl\u00edcitamente\u00a0node-ipc\u00a0a una versi\u00f3n\u00a0<strong>segura<\/strong>\u00a0(por ejemplo, la \u00faltima release leg\u00edtima anterior al compromiso, seg\u00fan el aviso de Socket\/npm).<\/li>\n\n\n\n<li>Regenerar dependencias:\n<ul class=\"wp-block-list\">\n<li>rm -rf node_modules package-lock.json<\/li>\n\n\n\n<li>npm install\u00a0(o equivalente pnpm\/yarn)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>En im\u00e1genes Docker, reconstruir desde cero, asegurando que el lockfile ya referencia versiones no comprometidas.<\/li>\n<\/ul>\n\n\n\n<p><strong>Rotaci\u00f3n de credenciales<\/strong><\/p>\n\n\n\n<p>Asumiendo que el stealer pudo haber exfiltrado datos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rotar tokens npm y PATs de GitHub\/GitLab usados en esas m\u00e1quinas\/runners.<\/li>\n\n\n\n<li>Rotar credenciales de infraestructura que pudieran estar en variables de entorno (AWS_*,\u00a0GCP_*,\u00a0AZURE_*, etc.).<\/li>\n\n\n\n<li>Revisar accesos recientes en repositorios y registries en busca de actividad an\u00f3mala posterior a la instalaci\u00f3n de\u00a0node-ipc\u00a0malicioso.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Soluci\u00f3n:<\/h2>\n\n\n\n<p>Es recomendado actualizar&nbsp;node-ipc&nbsp;a una versi\u00f3n marcada como segura por npm\/Socket (por ejemplo,&nbsp;9.2.x&nbsp;o&nbsp;12.x&nbsp;posteriores al incidente, una vez verificados).<\/p>\n\n\n\n<p>Evitar rangos de versi\u00f3n demasiado amplios en&nbsp;package.json&nbsp;(^&nbsp;o&nbsp;~) para dependencias de alto riesgo; usar versiones fijas y revisar cambios antes de subir de versi\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">&nbsp;<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Informaci\u00f3n adicional:<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Orca Security \u2013 \u201cProtestware in Russia NPM Package Node-ipc\u201d<br>https:\/\/orca.security\/resources\/blog\/cve-2022-23812-protestware-malicious-code-node-ipc-npm-package\/<\/li>\n\n\n\n<li>Ekzhang \u2013 \u201cThe Node-IPC Incident\u201d<br>https:\/\/notes.ekzhang.com\/software\/node-ipc<\/li>\n\n\n\n<li>Snyk \u2013 Ficha de seguridad del paquete\u00a0node-ipc<br>https:\/\/security.snyk.io\/package\/npm\/node-ipc<\/li>\n\n\n\n<li>SafeDep \u2013 \u201cCompromised node-ipc on npm: Credential Stealer via Maintainer Account Takeover\u201d<br>https:\/\/safedep.io\/malicious-node-ipc-npm-compromise<\/li>\n\n\n\n<li>The Hacker News \u2013 \u201cStealer Backdoor Found in 3 Node-IPC Versions Targeting npm Ecosystem\u201d<br>https:\/\/thehackernews.com\/2026\/05\/stealer-backdoor-found-in-3-node-ipc.html<\/li>\n\n\n\n<li>Opsera \u2013 \u201cHow Opsera AppSec Agents Stop npm Supply Chain Attacks Before They Hit Your Build\u201d<br>https:\/\/www.opsera.ai\/blog\/how-opsera-appsec-agents-stop-npm-supply-chain-attacks-before-they-hit-your-build\/<\/li>\n<\/ul>\n","protected":false},"featured_media":11481,"template":"","class_list":["post-11480","publicacion","type-publicacion","status-publish","has-post-thumbnail","hentry"],"acf":{"activar_pdf_link":false,"pdf":null,"numero_de_boletin":"51","traffic_light_protocol":"White"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/publicacion\/11480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/publicacion"}],"about":[{"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/types\/publicacion"}],"version-history":[{"count":1,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/publicacion\/11480\/revisions"}],"predecessor-version":[{"id":11483,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/publicacion\/11480\/revisions\/11483"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/media\/11481"}],"wp:attachment":[{"href":"https:\/\/beaconlab.us\/es\/wp-json\/wp\/v2\/media?parent=11480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}