El incidente comenzó el 19 de marzo de 2026, cuando atacantes con credenciales comprometidas publicaron versiones maliciosas de Trivy (v0.69.4), trivy-action y setup-trivy, afectando el repositorio oficial de Aqua Security en GitHub. Los adversarios forzaron el push de 75 etiquetas en aquasecurity/trivy-action y 7 en setup-trivy, redirigiendo a commits con un infostealer en Python conocido como TeamPCP Cloud stealer, sin crear nuevas releases ni ramas visibles.
Este malware extrae secretos de CI/CD, como tokens de GitHub, AWS, Azure y Docker, buscando en memoria, archivos de entorno, claves SSH y configuraciones de nubes, para exfiltrarlos cifrados vía release assets. Con más de 10.000 workflows en GitHub que usan trivy-action, el radio de impacto es masivo, afectando pipelines de desarrollo en empresas de todo el mundo.
El 22 de marzo, investigadores de Socket confirmaron imágenes maliciosas adicionales en Docker Hub: las etiquetas 0.69.5 y 0.69.6 de Trivy, publicadas sin releases en GitHub, con el mismo infostealer TeamPCP. Estas versiones se eliminaron posteriormente, pero Socket advierte que imágenes derivadas o que se reconstruyeron contra tags comprometidos durante las ventanas de ataque podrían propagar el malware.
En paralelo, los datos robados permitieron comprometer cuentas de npm como @emilgroup y @teale.io, llevando a la publicación de 141 paquetes maliciosos en más de 66 nombres únicos. El gusano CanisterWorm, desplegado vía un canister de Internet Computer Protocol (ICP), usa scripts como deploy.js para infectar paquetes accesibles con tokens robados, propagándose automáticamente en postinstall hooks sin intervención manual.
La variante mutada en @teale.io/eslint-config (v1.8.11 y 1.8.12) integra findNpmTokens() en index.js, robando tokens durante postinstall y repitiendo el ciclo de infección, convirtiendo instalaciones en vectores de propagación exponencial. Aikido y Endor Labs describen CanisterWorm como "vibe-coded" con IA, sin ofuscación, maximizando el blast radius en ecosistemas de desarrollo.
El grupo TeamPCP (también DeadCatx3, PersyPCP), especializado en infraestructuras cloud para robo y extorsión, defaceó 44 repositorios internos de la organización aquasec-com, renombrándolos con prefijo "tpcp-docs-" y exponiéndolos públicamente vía cuenta "Argon-DevOps-Mgt" comprometida. Aqua Security ha revocado tokens, rotado credenciales y recomienda evitar versiones ≥0.69.4, usando 0.69.3 como última limpia.
Recomendaciones de mitigación incluyen auditar ejecuciones recientes de Trivy, revocar tokens de npm/Docker/GitHub, escanear con herramientas como Socket o Aikido, y adoptar prácticas de publicación confiable como firmas de código y políticas de SLSA. Incidentes como este resaltan vulnerabilidades en repositorios públicos y la evolución de ataques supply chain hacia gusanos multiplataforma.