CI/CD

Poisoned Pipeline Execution

La vulnérabilité CI/CD la plus dangereuse ne change pas une seule ligne de code applicatif. Elle change le pipeline - et exécute du code arbitraire dans le build, avec ses privilèges et ses secrets.

~8 min de lecture · CI/CD

Ce qu'est le PPE

Le Poisoned Pipeline Execution (OWASP CICD-SEC-4) abuse de l'accès en écriture au système de gestion de code pour que le pipeline CI exécute des commandes malveillantes - avec accès aux secrets, artefacts et réseau interne du runner de build.

  • D-PPE (Direct) : l'attaquant change directement la configuration CI (le fichier de workflow).
  • I-PPE (Indirect) : il change des fichiers référencés par la CI - scripts de build, tests, configs de lint.

Megalodon : le PPE à l'échelle industrielle

Le 18 mai 2026, la campagne Megalodon a injecté des fichiers de workflow malveillants dans plus de 5 561 dépôts GitHub en une seule fenêtre de 6 heures, un d-PPE d'école qui exploitait des dépôts à la protection de branche faible ou absente. Point crucial : l'attaquant n'a jamais touché au code applicatif, seulement aux définitions de pipeline, pratiquement invisibles pour les relecteurs de code.

L'attaque npm TanStack (11 mai 2026) a montré des faiblesses connexes : pull_request_target non sécurisé, empoisonnement de cache et vol de token dans les workflows GitHub Actions.

Le déroulé

Voici comment se déroule une attaque PPE - et où PoisonZero la rompt quand un agent dans le runner détient des chemins protégés :

1 · Accès SCM

Protection de branche absente

Des PR de fork ou des règles faibles permettent l'accès en écriture aux fichiers de pipeline.

2 · D-PPE

Fichier de pipeline empoisonné

Seule la config workflow/CI est changée - le code applicatif reste intact.

3 · Build

Le runner exécute

Avec les privilèges et les secrets du job.

PoisonZero

PoisonZero évalue les écritures dans les chemins protégés d'agent/config du runner.

dangereux → annulation
✕ Bloqué

Exfil de secrets → backdoor

↳ Secrets/tokens récupérés dans le job
↳ Backdoor dans l'artefact signé
↳ Mouvement latéral vers d'autres dépôts
Sans protection, le PPE finit en vol de secrets et artefacts empoisonnés. Avec PoisonZero, les écritures dans les chemins protégés sont évaluées et les dangereuses annulées.

Pourquoi les relectures le manquent

Les relecteurs de code regardent la logique métier. Un fichier de pipeline modifié passe entre les mailles - puis s'exécute avec tous les privilèges. C'est justement cette couche « invisible » qui rend le PPE si efficace.

Comment PoisonZero vous protège ici

De plus en plus souvent, des agents IA tournent dans le pipeline (voir Les agents IA dans le pipeline CI/CD). PoisonZero protège leur mémoire et leur config sur le runner : il vérifie chaque changement de ces chemins protégés avant qu'il prenne effet - une écriture inoffensive passe, une écriture dangereuse est annulée fail-closed avec une piste d'audit complète, une écriture incertaine est mise en attente de révision. Voir aussi : Vers de la supply chain.

Quand cet agent conserve une mémoire persistante, la mémoire elle-même est concernée - OWASP ASI06 (Empoisonnement de mémoire et de contexte) dans le Top 10 OWASP pour les applications agentiques, le pendant côté agent de CICD-SEC-4. Voir empoisonnement de mémoire.

PoisonZero ne relit pas la logique de votre pipeline ; il garde ce qu'un run empoisonné tente d'écrire dans la mémoire et la config d'un agent protégé sur le runner, et reste fail-closed dans le doute - ainsi un build détourné ne peut pas laisser derrière lui une instruction permanente.
Est-ce utile ?

Protégez les agents dans le pipeline.

PoisonZero évalue les écritures dans les chemins protégés - sur les runners CI aussi.

Sign me up