## CanisterWorm: Gusano de autopropagación en la cadena de suministro de npm tras el ataque a Trivy
Los atacantes, tras el compromiso de Trivy, desplegaron el gusano CanisterWorm, que infectó docenas de paquetes de npm. El malware utiliza canisters de ICP en la blockchain Internet Computer para un servidor C2 resistente. Se trata del primer abuso documentado de ICP para la recuperación de payloads, lo que proporciona resistencia descentralizada a los derribos.
Mecanismo de Infección y Propagación
La cadena de ataque comienza con un hook de postinstall en los paquetes comprometidos. El hook lanza un loader que instala una backdoor de Python. La backdoor se conecta a un canister de ICP para recuperar la URL del siguiente payload.
El canister de ICP implementa los métodos get_latest_link, http_request y update_link. Este último permite al controlador cambiar la URL en tiempo real, actualizando archivos ejecutables en todos los hosts infectados sin interrumpir las operaciones.
La backdoor consulta el canister cada 50 minutos con un User-Agent falso. Si la URL contiene youtube.com, el implante entra en modo inactivo. La activación ocurre al cambiar al verdadero payload; los procesos antiguos continúan ejecutándose en paralelo.
La persistencia se asegura mediante un servicio de systemd llamado "pgmon", haciéndose pasar por monitoreo de PostgreSQL. La directiva Restart=always reinicia la backdoor 5 segundos después de la terminación.
Paquetes afectados:
- 28 en el ámbito @EmilGroup;
- 16 en el ámbito @opengov;
- @teale.io/eslint-config;
- @airtm/uuid-base32;
- @pypestream/floating-ui-dom.
Socket detectó 141 artefactos maliciosos en más de 66 paquetes únicos.
Evolución de CanisterWorm hacia la Automatización Completa
En las versiones 1.8.11–1.8.12 de @teale.io/eslint-config, una variante mutada integra el robo de tokens de npm en index.js. La función findNpmTokens() escanea el entorno durante postinstall y lanza deploy.js como proceso en segundo plano para la autopropagación.
Deploy.js publica versiones maliciosas en todos los paquetes accesibles utilizando los tokens robados. El gusano, presumiblemente generado por IA mediante tecnología Vibe, no ofusca su código.
El payload actual en ICP es la cadena de prueba "hello123", lo que indica una fase de verificación de la cadena antes de un ataque completo.
Un mecanismo similar con verificación de youtube.com se encontró en Trivy 0.69.4 troyanizado mediante sysmon.py, que hace referencia al mismo canister de ICP.
Comparación con Campañas Anteriores
CanisterWorm sigue el patrón de Shai-Hulud (septiembre): el compromiso de tinycolor se extendió a más de 40 paquetes, luego el gusano infectó a más de 300 mediante NpmModule.updatePackage y TruffleHog para la validación de credenciales.
Sha1-Hulud (noviembre) afectó a más de 25.000 repositorios: el script preinstall setup_bun.js detectó el entorno Bun, lanzando bun_environment.js para el robo de datos.
| Campaña | Paquetes Afectados | Mecanismo de Propagación | Herramientas de Robo |
|-------------|--------------------|-----------------------------------|----------------------|
| Shai-Hulud | 300+ | NpmModule.updatePackage | TruffleHog |
| Sha1-Hulud | 25.000+ | preinstall/setup_bun.js | bun_environment |
| CanisterWorm| 66+ | postinstall/deploy.js + ICP C2 | findNpmTokens |
Lecciones Clave
- Primer uso de canisters de ICP para C2 en malware: la descentralización dificulta los derribos.
- Propagación automática: robo de tokens + deploy.js convierte las instalaciones en vectores de infección para CI/CD y máquinas de desarrollo.
- Resiliencia: systemd con Restart=always + procesos en paralelo + update_link dinámico.
- Disfraz: servicios camuflados como pgmon, modo inactivo con youtube.com.
- Escala: desde Trivy hasta 141 artefactos; evolución hacia automatización completa sin despliegues manuales.
Las empresas Aikido Security, Endor Labs, JFrog y Wiz confirman: esto marca un cambio de compromisos individuales a comportamiento exponencial de gusano en el ecosistema de npm.
— Editorial Team
Aún no hay comentarios.