Supply chain : SLSA & Sigstore

DevOps 🔴 Senior

Définition

Deux briques de sécurité de la chaîne d'approvisionnement logicielle. SLSA (« salsa », spécification v1.1 approuvée en avril 2025) définit des niveaux Build L1 à L3 : L1 une provenance existe, L2 le build tourne sur une plateforme hébergée qui signe la provenance, L3 la plateforme est isolée et durcie. Sigstore fournit l'outillage : Cosign signe images et artefacts, Fulcio délivre des certificats éphémères liés à une identité OIDC (signature « sans clé »), Rekor journalise chaque signature dans un registre public infalsifiable.

Analogie

SLSA est la norme qui dit ce qu'un bon tampon de traçabilité doit prouver ; Sigstore est le tampon lui-même, avec le registre public où chaque coup de tampon est consigné.

Exemple de code

# GitHub Actions : signer l'image sans clé (identité OIDC du workflow)
permissions:
  id-token: write      # jeton OIDC → certificat Fulcio
  packages: write
steps:
  - uses: sigstore/cosign-installer@v3
  - run: docker build -t ghcr.io/acme/api@${DIGEST} . && docker push ...
  - run: cosign sign --yes ghcr.io/acme/api@${DIGEST}
  # Vérification côté déploiement :
  # cosign verify ghcr.io/acme/api@${DIGEST} \
  #   --certificate-identity-regexp 'github.com/acme/.*' \
  #   --certificate-oidc-issuer https://token.actions.githubusercontent.com

Cas d'usage

Prouver qu'une image déployée en production a bien été construite par votre CI depuis votre dépôt, et bloquer tout artefact non signé à l'admission.

Anti-pattern

Signer avec une clé privée longue durée stockée dans un secret CI : sa fuite compromet toutes les signatures passées, ce que le mode sans clé évite.
#devops#security#supply-chain

Dans l'actu

  • 22/09 L'attaque supply chain « GHAPPIER » est rendue publique : le 9 septembre, en 105 minutes, un attaquant a compromis un compte mainteneur, réécrit un workflow de release et publié le paquet npm @dforge-core/dforge-mcp 0.2.21 empoisonné (loader en 4 étapes auto-effaçant), touchant 65 dépôts GitHub sur 22 comptes. Semaine 39 · 21 – 27 septembre 2026 →

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre