CI/CD

Poisoned Pipeline Execution

La vulnerabilidad de CI/CD más peligrosa no cambia ni una sola línea de código de la aplicación. Cambia la pipeline - y ejecuta código arbitrario en el build con sus permisos y sus secrets.

~8 min de lectura · CI/CD

Qué es el PPE

Poisoned Pipeline Execution (OWASP CICD-SEC-4) abusa del acceso de escritura al sistema de control de versiones para que la pipeline de CI ejecute comandos maliciosos - con acceso a los secrets, los artefactos y la red interna del runner de build.

  • D-PPE (Direct): el atacante modifica la configuración de CI directamente (el archivo del workflow).
  • I-PPE (Indirect): modifica archivos referenciados por el CI - scripts de build, tests, configuraciones de lint.

Megalodon: PPE a escala industrial

El 18 de mayo de 2026, la campaña Megalodon inyectó, en una única ventana de 6 horas, archivos de workflow maliciosos en más de 5.561 repos de GitHub - un d-PPE de manual que explotaba repos con protección de ramas débil o inexistente. Lo decisivo: el atacante nunca tocó el código de aplicación, solo las definiciones de pipeline - prácticamente invisible para los revisores de código.

El ataque a npm de TanStack (11 de mayo de 2026) mostró debilidades relacionadas: pull_request_target inseguro, cache poisoning y robo de tokens en workflows de GitHub Actions.

El recorrido

Así se desarrolla un ataque PPE - y dónde lo corta PoisonZero cuando un agente en el runner tiene rutas protegidas:

1 · Acceso al SCM

Falta protección de ramas

Las PRs de forks o las reglas débiles permiten el acceso de escritura a los archivos de pipeline.

2 · D-PPE

Archivo de pipeline envenenado

Solo se cambia la configuración del workflow/CI - el código de la app permanece intacto.

3 · Build

El runner ejecuta

Con los permisos y los secrets del job.

PoisonZero

PoisonZero evalúa las escrituras a las rutas protegidas de agente/config en el runner.

peligroso → revert
✕ Impedido

Exfil de secrets → backdoor

↳ Secrets/tokens captados del job
↳ Backdoor en el artefacto firmado
↳ Movimiento lateral hacia otros repos
Sin protección, el PPE acaba en robo de secrets y artefactos envenenados. Con PoisonZero, las escrituras a rutas protegidas se evalúan y las peligrosas se revierten.

Por qué las revisiones lo pasan por alto

Los revisores de código miran la lógica de negocio. Un archivo de pipeline modificado se cuela - y luego se ejecuta con plenos permisos. Es justamente esta capa "invisible" la que hace tan eficaz al PPE.

Cómo te protege PoisonZero aquí

Cada vez con más frecuencia, hay agentes de IA corriendo en la pipeline (véase Agentes de IA en la pipeline de CI/CD). PoisonZero protege su memoria y su config en el runner: comprueba cada cambio en esas rutas protegidas antes de que surta efecto - una edición inofensiva pasa, una peligrosa se revierte fail-closed con un rastro de auditoría completo, una que no está clara se retiene para revisión. Relacionado: Gusanos de la cadena de suministro.

Si ese agente mantiene memoria persistente, la propia memoria entra en juego - OWASP ASI06 (Memory & Context Poisoning) en el OWASP Top 10 for Agentic Applications, la contraparte del lado del agente de CICD-SEC-4. Véase memory poisoning.

PoisonZero no revisa la lógica de su pipeline; vigila lo que una ejecución envenenada intenta escribir en la memoria y la config de un agente protegido en el runner, y se mantiene fail-closed ante la duda - de modo que un build secuestrado no pueda dejar atrás una instrucción permanente.
¿Te resultó útil?

Protege a los agentes en la pipeline.

PoisonZero evalúa las escrituras a rutas protegidas - también en los runners de CI.

Sign me up