Hackers logran extraer secretos directamente de la memoria RAM de servidores
Un ataque a una herramienta para desarrolladores en el transcurso de un día se convirtió en una reacción en cadena que ya afectó a decenas de proyectos. Primero los atacantes comprometieron el popular escáner de vulnerabilidades Trivy e incorporaron en él código para robar credenciales, y luego, con los accesos robados, empezaron a distribuir paquetes maliciosos en NPM.
El 19 de marzo el grupo TeamPCP comprometió la infraestructura de Aqua Security y sustituyó las versiones oficiales de Trivy y las acciones relacionadas de GitHub. Los usuarios instalaban la herramienta como siempre, pero junto con ella recibían un componente malicioso que recolectaba tokens, claves y otros secretos. Al día siguiente, aparentemente, esos mismos datos se utilizaron para la siguiente fase del ataque: la infección masiva de paquetes en el ecosistema NPM.
El ataque resultó ser multinivel. Los atacantes falsificaron cambios en los repositorios, haciéndose pasar por participantes reales del proyecto, y luego publicaron la versión infectada Trivy 0.69.4. El código malicioso se descargaba desde un dominio que se parecía externamente al sitio oficial de Aqua Security y llegaba a las compilaciones publicadas en GitHub, Docker Hub y otras plataformas.
Tras la ejecución, el Trivy infectado funcionaba como de costumbre, mientras recolectaba datos confidenciales. El programa extraía variables de entorno, claves de acceso, credenciales de servicios en la nube y tokens de Kubernetes, luego los cifraba y los enviaba a un servidor remoto. Si el canal principal no funcionaba, el código malicioso usaba una alternativa: creaba un repositorio llamado tpcp-docs en la cuenta de la víctima y subía allí un archivo con los datos robados.
Un escenario separado estaba destinado a los sistemas de compilación. Las acciones de GitHub infectadas leían la memoria del proceso Runner.Worker para extraer secretos directamente de la memoria RAM, y además recorrían el sistema de archivos en busca de claves SSH, credenciales de nubes e incluso monederos de criptomonedas. Los datos recopilados se cifraban usando algoritmos robustos y se enviaban al servidor de los atacantes a través de un túnel de Cloudflare.
Si el código malicioso detectaba que no se ejecutaba en el entorno de GitHub Actions, sino en la máquina del desarrollador, se persistía en el sistema. Para ello se creaba el script sysmon.py y un servicio systemd que consultaba periódicamente ese mismo nodo remoto en la red Internet Computer y descargaba componentes adicionales. Este mecanismo fue la base más adelante de CanisterWorm.
El problema se agravó por el hecho de que los atacantes conservaron el acceso tras el incidente previo y continuaron desarrollando el ataque. El 22 de marzo publicaron nuevas imágenes infectadas de Trivy (versiones 0.69.5 y 0.69.6) en Docker Hub, y también pusieron los repositorios internos de Aqua Security a disposición pública. Paralelamente, la infraestructura de control empezó a distribuir un nuevo script malicioso, kamikaze.sh.
Precisamente los tokens y credenciales robados fueron el combustible para la siguiente fase: la infección masiva de paquetes en NPM. CanisterWorm usa los mismos principios de persistencia y conexión con la infraestructura de control, pero añade propagación automática. Ahora cada máquina infectada busca tokens de NPM y, con ellos, publica actualizaciones maliciosas en los paquetes a los que tiene acceso.
En esencia, la cadena es la siguiente: primero se compromete la herramienta de desarrollo, luego se roban los secretos y después se infecta el ecosistema de dependencias. Este escenario es peligroso porque afecta no a una sola empresa, sino a numerosos proyectos que ni siquiera están directamente relacionados.
En el momento del análisis, el nodo de control entregaba periódicamente enlaces inofensivos, pero luego comenzó a distribuir una carga maliciosa completa. Parte de la infraestructura ya fue bloqueada por violar las normas, sin embargo el ataque sigue evolucionando y los atacantes demuestran que están dispuestos a cambiar rápidamente de táctica.