
El malware roba tokens de npm, claves SSH, credenciales cloud y wallets de criptomonedas. Se propaga automáticamente a cualquier paquete que el desarrollador pueda publicar, expandiendo el compromiso en cadena.
Investigadores de Socket y StepSecurity identificaron el martes una nueva campaña de malware en el ecosistema npm que combina robo de credenciales con capacidad de auto-propagación, permitiendo que el compromiso se expanda automáticamente a través de los paquetes que las víctimas pueden publicar.
Al menos 16 paquetes vinculados a Namastex.ai y otros namespaces han sido confirmados como comprometidos, incluyendo @automagik/genie, pgserve, @fairwords/websocket y @openwebconcept/design-tokens. El malware, bautizado como CanisterWorm, replica el modus operandi del actor de amenazas TeamPCP y utiliza infraestructura descentralizada basada en Internet Computer Protocol (ICP) para evadir intentos de desmantelamiento.
El vector de ataque explota un mecanismo simple pero devastador: cada paquete comprometido incluye un script malicioso de 1.143 líneas que se ejecuta automáticamente durante el proceso de instalación vía el hook postinstall en package.json. Este script no requiere interacción del usuario y está diseñado para fallar silenciosamente con || true, evitando que errores alerten al desarrollador. Según el análisis de Socket, el payload realiza cuatro funciones principales, recolección de secretos del entorno de desarrollo, extracción de datos de navegadores y wallets de criptomonedas, cifrado híbrido RSA-4096 con AES-256 y exfiltración a un canister ICP alojado en blockchain.
La capacidad de auto-propagación distingue a CanisterWorm de los infostealers convencionales. Cuando el malware detecta tokens de publicación de npm en el sistema comprometido, ya sea en ~/.npmrc, variables de entorno como NPM_TOKEN, o configuraciones de proyecto, ejecuta una función findNpmTokens() que consulta el registro de npm para identificar todos los paquetes que el token puede publicar. Posteriormente, incrementa la versión de cada paquete, inyecta el payload malicioso y republica con el flag --tag latest. Cualquier desarrollador que instale esos paquetes sin fijar una versión exacta recibirá la versión comprometida y se convertirá en un nuevo vector de propagación.
El alcance del robo de datos es exhaustivo. El script escanea aproximadamente 40 patrones de expresiones regulares para capturar variables de entorno que contengan tokens, secretos, claves API y credenciales de servicios como AWS, Azure, GCP, GitHub, GitLab, Docker, OpenAI, Anthropic, Stripe y Twilio. Además, accede directamente al sistema de archivos para robar claves SSH, configuraciones de Kubernetes y Docker, credenciales de Terraform y Vault y archivos de bases de datos.
La orientación hacia wallets de criptomonedas es particularmente agresiva: MetaMask, Phantom, Exodus, Atomic Wallet y archivos de Solana y Ethereum son objetivo específico, junto con las bases de datos SQLite de Chrome que almacenan contraseñas guardadas.
StepSecurity documenta en su reporte que las versiones comprometidas de pgserve (1.1.11, 1.1.12 y 1.1.13) fueron publicadas el 21 de abril sin tags de git correspondientes en el repositorio upstream, una señal de alerta para equipos que monitorean la integridad de sus dependencias. El canister ICP utilizado identificado como cjn37-uyaaa-aaaac-qgnva-cai no es el mismo documentado en campañas anteriores de CanisterWorm, lo que sugiere que el actor ha rotado su infraestructura mientras mantiene el mismo diseño operativo.
Los paquetes afectados combinan aproximadamente 8.000 descargas semanales, un volumen que podría parecer modesto pero que representa alto valor estratégico, @automagik/genie es un CLI de orquestación de agentes de IA, mientras que pgserve es un servidor PostgreSQL embebido para desarrollo. El perfil de las víctimas apunta a desarrolladores con acceso a infraestructura crítica, credenciales de cloud y pipelines de CI/CD.
Equipos de seguridad deben rotar inmediatamente todos los tokens npm, claves SSH y credenciales de cloud expuestas en sistemas donde los paquetes afectados fueron instalados, auditar caches de artefactos internos y revisar entornos Python si compartían las mismas credenciales —el malware incluye lógica de propagación cruzada hacia PyPI.
FUENTE ORIGINAL
Socket↗CURADO POR
Santiago Torres