Pour agir, un pipeline a besoin d'identités et de secrets : pousser une image, déployer, appeler une API cloud. Le piège est d'y laisser des jetons statiques ou de longue durée : volés une fois, ils donnent un accès durable à toute la chaîne. Cette famille remplace le secret stocké par une identité fédérée courte (OIDC) et des secrets injectés juste-à-temps, qui ne valent plus rien une fois le job terminé.
En pratique, la famille bannit les jetons d'enregistrement statiques posés sur les runners (volés, ils enrôlent un runner pirate) au profit de jetons courts (JIT) ; elle remplace les secrets de longue durée par une fédération OIDC scopée au strict nécessaire (un dépôt, une branche, un environnement), pour qu'un workflow non autorisé ne décroche aucun accès cloud ; et elle injecte les secrets juste-à-temps, jamais stockés en clair sur la plateforme, pour qu'il n'y ait rien à récolter en mémoire pendant un job.
Concrètement, ces exigences parent plusieurs menaces : le vol d'un jeton d'enregistrement (qui permet d'enrôler un runner pirate), la récupération de secrets en mémoire pendant un job, le vol et la réutilisation d'identifiants de longue durée, et l'abus d'une fédération OIDC trop permissive où un workflow non autorisé décroche des accès cloud.
Un jeton statique ou de longue durée volé donne un accès durable à la chaîne.
Les pièges à éviter
Section intitulée « Les pièges à éviter »Les erreurs les plus fréquentes sur ce périmètre :
Exigences
Section intitulée « Exigences »enregistrement via jeton à durée de vie courte (JIT) ; aucun jeton statique ni codé en dur.#
Un jeton d'enregistrement statique posé sur un runner ou dans un script est un secret durable : volé, il permet d'enrôler un runner pirate sur votre plateforme. Le jeton court (JIT) ne vaut plus rien une fois l'enregistrement fait, donc plus rien à voler ensuite.
- Preuve attendue
- Configuration d'enregistrement par jeton JIT ; absence de jeton statique dans scripts ou secrets.
- Outillage
- Legitify
Correspondances & menaces parées 4 standards · 2 menaces
Pendant un job, l'attaquant lit en mémoire le jeton OIDC court ou les identifiants fédérés pour s'authentifier auprès de services en aval. L'éphémérité du jeton ne protège pas si le job lui-même est compromis CICD-SEC-6. Une fédération OIDC trop permissive (conditions de confiance larges, sujet non contraint) permet à un dépôt ou workflow non autorisé d'obtenir des identifiants cloud. L'identité courte censée remplacer les secrets devient elle-même un chemin d'accès CICD-SEC-6.
accès aux ressources via identité fédérée courte (OIDC) ; aucun credential de longue durée sur le runner.#
Stocker un credential de longue durée sur le runner, c'est offrir un accès permanent à qui compromet un job (cas Codecov, qui a exfiltré les secrets de milliers de pipelines). L'identité fédérée OIDC délivre un jeton éphémère à la volée : plus de secret durable à voler.
- Preuve attendue
- Configuration OIDC ; inspection : aucun credential de longue durée stocké sur le runner.
- Outillage
- Legitify
Correspondances & menaces parées 3 standards · 3 menaces
Pendant un job, l'attaquant lit en mémoire le jeton OIDC court ou les identifiants fédérés pour s'authentifier auprès de services en aval. L'éphémérité du jeton ne protège pas si le job lui-même est compromis CICD-SEC-6. Un jeton d'accès de longue durée est volé et réutilisé tant qu'il n'est pas révoqué, sans nouvelle authentification. La durée de vie sans rotation maximise la valeur du vol CICD-SEC-6. Une fédération OIDC trop permissive (conditions de confiance larges, sujet non contraint) permet à un dépôt ou workflow non autorisé d'obtenir des identifiants cloud. L'identité courte censée remplacer les secrets devient elle-même un chemin d'accès CICD-SEC-6.
secrets injectés juste-à-temps depuis un coffre ; aucun secret au repos.#
Un secret écrit en variable de pipeline persiste et fuit au premier job compromis. Injecté juste-à-temps depuis un coffre (OpenBao/Vault), il ne vit qu'en mémoire le temps du job, puis disparaît avec le runner éphémère.
- Preuve attendue
- Politiques du coffre (OpenBao/Vault) ; inspection d'environnement sans secret au repos.
- Outillage
- Legitify
Correspondances & menaces parées 3 standards · 1 menace
Un job compromis balaie la mémoire ou l'environnement du runner pour récolter les secrets d'autres étapes ou pipelines. Le partage de runner sans isolation expose les secrets transverses CICD-SEC-6.
jetons délivrés au job scopés au strict nécessaire, expirant en fin de job.#
Un jeton qui peut tout faire, partout, indéfiniment transforme une compromission mineure en désastre. Scoper le jeton au strict nécessaire et le faire expirer en fin de job borne les dégâts : même volé, il ne donne qu'un accès étroit et déjà périmé.
- Preuve attendue
- Définition du scope des jetons de job + TTL ; preuve d'expiration en fin de job.
- Outillage
- Legitify
Correspondances & menaces parées 3 standards · 1 menace
Une fédération OIDC trop permissive (conditions de confiance larges, sujet non contraint) permet à un dépôt ou workflow non autorisé d'obtenir des identifiants cloud. L'identité courte censée remplacer les secrets devient elle-même un chemin d'accès CICD-SEC-6.