⏱️ Lectura: 13 min

El ataque a Trivy que se hizo público a finales de marzo de 2026 es, probablemente, el incidente de cadena de suministro más irónico del año: la herramienta open-source que miles de equipos usan para detectar vulnerabilidades en contenedores, filesystems, repositorios y clústeres de Kubernetes terminó siendo la puerta de entrada para exfiltrar 340 GB de datos (91,7 GB comprimidos) de la Comisión Europea. El grupo TeamPCP, identificado por CERT-EU, comprometió los releases oficiales de Aqua Security entre el 19 y el 28 de marzo, afectando a 71 clientes: 42 entidades internas de la Comisión y 29 organismos externos de la UE. El escáner que prometía prevenir compromisos se convirtió en el compromiso.

📑 En este artículo
  1. Qué pasó: el scanner que se convirtió en vector
  2. Contexto e historia: cómo TeamPCP envenenó la cadena
    1. Timeline completo del incidente
  3. Datos y cifras del ataque a Trivy
    1. Versiones Trivy afectadas (crítico)
  4. Impacto y análisis: por qué esto afectó a toda corporación con Trivy
    1. IOCs públicos para bloquear ya
  5. Qué hacer HOY si usaste Trivy en los últimos 30 días
    1. Mitigaciones a mediano plazo
    2. Alternativas temporales mientras Aqua publica el post-mortem final
  6. Qué sigue: lecciones para LATAM y la industria
  7. Preguntas frecuentes
    1. ¿Qué versiones de Trivy están comprometidas en este ataque?
    2. ¿Cómo sé si mi pipeline fue afectado por el ataque a Trivy?
    3. ¿Quién es TeamPCP y cómo lograron acceso persistente?
    4. ¿Qué datos se filtraron de la Comisión Europea?
    5. ¿Debería dejar de usar Trivy después de este incidente?
    6. ¿Qué diferencia este ataque de SolarWinds o xz-utils?
  8. Referencias

Lo que empezó como una misconfiguración en GitHub Actions escaló hasta convertirse en un evento comparable a SolarWinds, Codecov o el backdoor de xz-utils: el tooling de seguridad y observabilidad vuelve a ser, por diseño, un objetivo premium. Este artículo reconstruye cronológicamente el ataque a Trivy, detalla las versiones comprometidas, lista los IOCs públicos y ofrece un checklist accionable para cualquier equipo que haya corrido trivy en un pipeline CI/CD durante marzo de 2026.

Qué pasó: el scanner que se convirtió en vector

Trivy, mantenido por Aqua Security, es uno de los escáneres de vulnerabilidades más populares del ecosistema cloud-native. Con 34.570 stars en GitHub al momento del incidente y presencia en miles de pipelines CI/CD enterprise, su superficie de impacto es enorme: un solo release malicioso se propaga en horas a través de GitHub Container Registry (GHCR), Amazon ECR, DockerHub y los repositorios deb y rpm oficiales.

Según el post-mortem publicado por CERT-EU, TeamPCP obtuvo acceso persistente a la infraestructura de Aqua durante aproximadamente tres semanas gracias a una rotación incompleta de credenciales. Con ese acceso, el grupo reescribió tags de release, publicó binarios alterados y ejecutó una campaña de exfiltración masiva desde los runners CI/CD de sus víctimas. El incidente fue calificado por CERT-EU como de impacto crítico, y el advisory oficial de Aqua se publicó bajo el identificador GHSA-69fq-xp46-6×23.

⚠️ Ojo: Si corriste trivy o la GitHub Action aquasecurity/trivy-action en cualquier pipeline entre el 19 y el 28 de marzo de 2026, asumí compromiso y rotá credenciales antes de seguir leyendo.

Contexto e historia: cómo TeamPCP envenenó la cadena

La raíz del ataque a Trivy está, como en casi todos los supply-chain attacks recientes, en un error de configuración mundano. A fines de febrero de 2026, una misconfiguración en un workflow de GitHub Actions de Aqua Security dejó expuesto el token del bot aqua-bot, la identidad usada para publicar releases oficiales. El 1 de marzo, tras detectar la fuga, el equipo de seguridad inició una rotación de credenciales que resultó incompleta: varias claves asociadas al bot siguieron siendo válidas.

Durante tres semanas, TeamPCP preparó el golpe silenciosamente. No tocaron el repositorio, no abrieron pull requests, no dejaron rastros obvios en el historial: se limitaron a esperar el momento adecuado para reescribir el pasado.

Diagrama del ataque a Trivy mostrando la cadena de suministro comprometida
La cadena de suministro de Trivy: del bot comprometido a los pipelines CI/CD.

Timeline completo del incidente

graph LR;
 A[Feb 2026: fuga token aqua-bot] --> B[1-mar: rotacion incompleta];
 B --> C[19-mar 17:43 UTC: force-push de tags];
 C --> D[19-mar 18:22 UTC: binario v0.69.4 malicioso];
 D --> E[22-mar 15:43 UTC: v0.69.5 y v0.69.6];
 E --> F[24-28 mar: deteccion y disclosure];
 F --> G[Post: ShinyHunters filtra 340 GB];
  • Fines de febrero de 2026 — Misconfiguración en GitHub Actions filtra el token de aqua-bot.
  • 1 de marzo — Aqua detecta la fuga y rota credenciales; la rotación es incompleta y deja acceso persistente.
  • 19 de marzo, 17:43 UTC — TeamPCP hace force-push y reescribe 76 de 77 tags del repositorio aquasecurity/trivy-action, además de los 7 tags de setup-trivy. La única versión limpia confirmada es v0.35.0, commit 57a97c7.
  • 19 de marzo, 18:22 UTC — Publican el binario malicioso v0.69.4 en GHCR, ECR, DockerHub y los repositorios deb y rpm oficiales.
  • 22 de marzo, 15:43 UTC — Suben v0.69.5 y v0.69.6 también maliciosos a DockerHub.
  • 24-28 de marzo — Detección, revocación de tokens, disclosure coordinado con CERT-EU y, días después, publicación de los 340 GB por parte del grupo de leaks ShinyHunters.

Datos y cifras del ataque a Trivy

Los números del incidente ayudan a dimensionar el alcance real. No se trata de un compromiso aislado: es un evento sistémico que tocó a casi todo el ecosistema de seguridad europeo.

  • 340 GB de datos exfiltrados (91,7 GB comprimidos).
  • 71 clientes afectados: 42 entidades internas de la Comisión Europea y 29 externas de la UE.
  • 34.570 stars de Trivy en GitHub al momento del ataque.
  • 76 de 77 tags reescritos en aquasecurity/trivy-action.
  • 3 versiones de binario comprometidas: v0.69.4, v0.69.5 y v0.69.6.
  • 27 hashes SHA256 de artefactos maliciosos publicados en el advisory.
  • ~3 semanas de acceso persistente gracias a la rotación incompleta.

Versiones Trivy afectadas (crítico)

Este es el check más importante que cualquier equipo debería hacer hoy:

  • Binario Trivy — versiones v0.69.4, v0.69.5 y v0.69.6 están comprometidas. Última versión limpia confirmada: v0.69.3.
  • GitHub Action aquasecurity/trivy-action — 76 de 77 tags reescritos. Única versión limpia: v0.35.0.
  • setup-trivy — todos los tags anteriores a v0.2.6 se consideran comprometidos.

El advisory oficial con la lista completa de hashes SHA256 y artefactos afectados está disponible en GHSA-69fq-xp46-6×23.

Impacto y análisis: por qué esto afectó a toda corporación con Trivy

Trivy se ejecuta, por definición, dentro de runners CI/CD que tienen acceso a los secretos del pipeline. Cada invocación de trivy image o trivy fs dentro de un job de GitHub Actions, GitLab CI, CircleCI o Jenkins expone el entorno completo al binario que corre. Si ese binario ha sido alterado, todos los secretos visibles para el runner son exfiltrables.

Los secretos típicamente disponibles en un runner son los que cualquier SRE maneja a diario: AWS_ACCESS_KEY_ID, GCP_SERVICE_ACCOUNT_KEY, GITHUB_TOKEN, SSH_PRIVATE_KEY, DATABASE_URL, credenciales de registros privados, tokens de Kubernetes y, muchas veces, llaves maestras de KMS. Según CERT-EU, la API key de la Comisión Europea fue exfiltrada desde un pipeline CI con Trivy comprometido y usada posteriormente para acceder al AWS corporativo de la institución.

💭 Clave: No es que Trivy sea inseguro. Es que cualquier tool de seguridad u observabilidad con acceso amplio al entorno es un target premium por diseño. El ataque a Trivy es, estructuralmente, el mismo que Codecov (2021), SolarWinds (2020) y xz-utils (2024).

IOCs públicos para bloquear ya

Los indicadores de compromiso publicados por CERT-EU y Aqua incluyen un dominio typosquatted, una IP de exfiltración y repositorios de fallback. Bloqueá estos indicadores en tu firewall, IDS y SIEM:

  • Dominio typosquatted: scan.aquasecurtiy.org (nótese la diferencia con el dominio legítimo aquasecurity.org).
  • IP de exfiltración: 45.148.10.212.
  • Repositorios de fallback en GitHub: github.com/tpcp-docs-*.
  • 27 hashes SHA256 documentados en el advisory GHSA-69fq-xp46-6×23.
Pipeline CI/CD con runners comprometidos por ataque a Trivy
Cada pipeline CI/CD con Trivy comprometido exponía secretos al dominio typosquatted.

Qué hacer HOY si usaste Trivy en los últimos 30 días

Si tu organización corrió trivy entre el 19 y el 28 de marzo de 2026, asumí que los secretos del pipeline fueron exfiltrados y ejecutá este plan de respuesta inmediata:

  1. Verificar la versión instalada con trivy --version. Si cae en el rango v0.69.4 a v0.69.6, está comprometida.
  2. Auditar GitHub Actions buscando aquasecurity/trivy-action y tags reescritos (cualquiera que no sea v0.35.0).
  3. Rotar inmediatamente todas las credenciales expuestas al runner durante marzo: claves de AWS/GCP/Azure, GitHub PATs, SSH keys, tokens de registries, DATABASE_URL, credenciales de servicios terceros.
  4. Auditar logs de CloudTrail, Cloud Audit Logs, GitHub audit log y tu SIEM buscando actividad anómala posterior al 19 de marzo: llamadas desde IPs desconocidas, nuevas IAM users, egress hacia los IOCs listados arriba.
  5. Verificar checksums SHA256 del binario que tengas contra los hashes oficiales publicados por Aqua tras la revocación.
  6. Forzar re-deploy de toda imagen construida en el período, por si el payload persistió en capas de Docker.

Un ejemplo rápido para chequear la versión en todos tus workflows con grep:

grep -rE "aquasecurity/trivy-action@(v?0\.[0-9]+\.[0-9]+)" .github/workflows/
grep -rE "trivy (image|fs|repo|config)" .github/workflows/

Mitigaciones a mediano plazo

Más allá de la respuesta al incidente, el ataque a Trivy deja lecciones arquitectónicas claras para endurecer cualquier pipeline CI/CD contra el próximo supply-chain attack:

  • Aplicar SLSA — el framework de Supply-chain Levels for Software Artifacts formaliza requisitos de build provenance y resistencia a tampering.
  • OIDC federated auth en GitHub Actions en lugar de API keys estáticas: los tokens son efímeros y scoped al workflow.
  • Secrets scoping temporal mediante short-lived tokens generados vía IAM role assumption justo antes del paso que los necesita.
  • Sandboxing de herramientas de seguridad en runners dedicados, sin acceso a secretos que no sean estrictamente necesarios.
  • Pinning por SHA en vez de por tag para TODAS las GitHub Actions externas: uses: aquasecurity/trivy-action@57a97c7 en lugar de @v0.35.0.
💡 Tip: El pinning por SHA es inmune al force-push de tags. Es tedioso de mantener, pero es la defensa más simple contra este tipo de ataque y GitHub ya tiene bots que actualizan los SHA automáticamente.

Alternativas temporales mientras Aqua publica el post-mortem final

No se trata de abandonar Trivy. Se trata de evaluar el pipeline hasta que el post-mortem de Aqua confirme que la cadena está limpia. Algunas alternativas maduras:

  • Grype (Anchore) — scanner de vulnerabilidades en imágenes y SBOMs.
  • Snyk — solución comercial con amplia cobertura de lenguajes.
  • Clair — proyecto de CoreOS/RedHat orientado a registries.
  • Anchore Enterprise — edición comercial con policies granulares.

Qué sigue: lecciones para LATAM y la industria

El ataque a Trivy vuelve a confirmar un patrón que la industria viene viendo desde 2020: el tooling de seguridad es un target premium. SolarWinds Orion en 2020 envenenó el canal de updates de una plataforma de observabilidad. Codecov en 2021 comprometió el bash uploader que miles de pipelines CI/CD ejecutaban sin verificar. El backdoor de xz-utils en 2024 explotó la confianza depositada en maintainers de larga data. Trivy en 2026 es la siguiente iteración del mismo ataque estructural.

Para LATAM la lectura es directa: bancos, fintechs, e-commerces y startups con CI/CD moderno probablemente tienen Trivy en algún workflow. Presupuestos acotados para SOC implican que la detección temprana depende fuertemente de la higiene de secretos y la rotación disciplinada. El checklist práctico para esta semana debería ser: abrí tus GitHub Actions, buscá aquasecurity/trivy-action o el comando trivy, revisá logs del 19 de marzo en adelante, rotá secretos expuestos y aplicá mitigaciones de mediano plazo antes del próximo trimestre.

📌 Nota: El ataque a Trivy no cierra acá. CERT-EU continúa investigando y es altamente probable que salgan más IOCs y clientes afectados en las próximas semanas. Mantené suscripciones activas al advisory GHSA-69fq-xp46-6x23 y al feed oficial de CERT-EU.

📖 Resumen en Telegram: Ver resumen

Preguntas frecuentes

¿Qué versiones de Trivy están comprometidas en este ataque?

El binario Trivy v0.69.4, v0.69.5 y v0.69.6 están comprometidas. La última versión limpia confirmada es v0.69.3. La GitHub Action aquasecurity/trivy-action tiene 76 de 77 tags reescritos; solo v0.35.0 se considera limpia. setup-trivy anterior a v0.2.6 también está comprometido.

¿Cómo sé si mi pipeline fue afectado por el ataque a Trivy?

Revisá tus workflows de CI/CD buscando referencias a aquasecurity/trivy-action o al binario trivy ejecutado entre el 19 y el 28 de marzo de 2026. Si encontrás ejecuciones en ese rango, asumí compromiso, rotá todos los secretos expuestos al runner y auditá logs de CloudTrail, Cloud Audit Logs y GitHub audit log buscando actividad anómala hacia el dominio scan.aquasecurtiy.org o la IP 45.148.10.212.

¿Quién es TeamPCP y cómo lograron acceso persistente?

TeamPCP es el grupo atribuido por CERT-EU como responsable del ataque. Obtuvieron el token del bot aqua-bot mediante una misconfiguración en GitHub Actions a fines de febrero de 2026. La rotación de credenciales del 1 de marzo fue incompleta, dejando acceso persistente por aproximadamente tres semanas hasta el force-push del 19 de marzo.

¿Qué datos se filtraron de la Comisión Europea?

ShinyHunters publicó posteriormente 340 GB de datos (91,7 GB comprimidos) que incluyen información de 71 clientes: 42 entidades internas de la Comisión Europea y 29 externas de la UE. La exfiltración se originó desde un pipeline CI con Trivy comprometido y una API key expuesta fue usada para acceder al AWS corporativo.

¿Debería dejar de usar Trivy después de este incidente?

No necesariamente. Trivy sigue siendo un proyecto sólido mantenido por Aqua Security. La recomendación es auditar tu uso actual, aplicar el pinning por SHA de la GitHub Action, migrar a OIDC federated auth en lugar de API keys estáticas y esperar el post-mortem final de Aqua antes de actualizar a versiones posteriores. Como medida temporal, alternativas como Grype, Snyk o Clair pueden cubrir el mismo caso de uso.

¿Qué diferencia este ataque de SolarWinds o xz-utils?

Estructuralmente son el mismo patrón: comprometer un componente de confianza dentro de la cadena de suministro de software para acceder a las víctimas finales. La diferencia es el vector de entrada (misconfig de GitHub Actions vs. compromiso de maintainer o de infraestructura interna) y la superficie afectada (pipelines CI/CD vs. updates de producto vs. librerías del sistema). El aprendizaje común es que el tooling con acceso privilegiado al entorno requiere defensas extra: SLSA, pinning por SHA y sandboxing estricto.

Referencias

📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.

Categorías: Seguridad

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.