D-OPEN

Comment securiser son pipeline CI/CD open source contre les attaques supply chain en 8 etapes

Camille Renard

Camille Renard

DevSecOps Lead · 24 mai 2026 · 16 min de lecture

TL;DR

  • Les attaques supply chain sur les pipelines CI/CD ont explose en mai 2026 : 317 packages npm compromis, GitHub pirate via VS Code, Grafana attaque via GitHub Actions. Votre pipeline est une cible de premier ordre.
  • • Ce guide couvre 8 etapes concretes : verrouillage des dependances, audit automatise, permissions minimales GitHub Actions, registre prive, Sigstore/SLSA, Dependabot/Renovate, SBOM, et monitoring comportemental.
  • • Chaque etape inclut des exemples de configuration prets a copier pour GitHub Actions, npm, yarn, et les outils de securite open source.
  • • Applicable immediatement par les equipes de developpement, que vous soyez une startup a Paris, une scale-up a Lyon, ou une ESN a Toulouse.

En mai 2026, l ecosysteme open source a subi une serie d attaques supply chain sans precedent. Les 317 packages npm compromis avec 630+ versions malveillantes, la breach GitHub via l extension VS Code Nx Console, et l attaque contre Grafana via GitHub Actions ont demontre que les pipelines CI/CD sont devenus la cible numero un des attaquants. Un pipeline compromis ne donne pas seulement acces au code source — il donne acces aux tokens de deploiement, aux credentials cloud, et a la capacite de pousser du code malveillant directement en production.

Ce guide presente 8 etapes concretes et actionnables pour securiser votre pipeline CI/CD open source contre les attaques supply chain. Chaque etape inclut des exemples de configuration prets a l emploi pour GitHub Actions, des commandes npm/yarn, et des recommandations d outils open source. Que vous soyez un developpeur freelance ou une equipe DevSecOps dans une entreprise francaise, ces etapes sont applicables immediatement et cumulatives — chaque couche de securite renforce les precedentes.

ARCHITECTURE DE SECURITE PIPELINE CI/CD — 8 COUCHES DE PROTECTIONPIPELINE CI/CD1. CODE SOURCEgit push / PR merge2. INSTALL DEPENDANCESnpm ci / yarn install --frozen3. AUDIT SECURITEnpm audit / Socket.dev4. BUILD + TESTSCompilation, tests unitaires5. SIGNATURE + SBOMSigstore / SLSA / CycloneDX6. DEPLOIEMENTProduction securiseeCOUCHES DE SECURITEE1Fichiers lock verrouillespackage-lock.json / yarn.lockE2npm audit dans CI/CDBloque le build si vulns critiquesE3Permissions minimales ActionsGITHUB_TOKEN scope restreintE4Registre prive (proxy cache)Verdaccio / Artifactory / NexusE5Sigstore + SLSA provenanceSignature et verification cryptoE6Dependabot + RenovateMonitoring automatise des depsE7SBOM (Software BOM)CycloneDX / SPDX inventaireE8Monitoring comportementalSocket.dev / Snyk / AikidoMENACES BLOQUEESVersions malveillantes npmTyposquatting de packagesVol de tokens CI/CDScripts postinstall malveillantsDependances fantomesComptes mainteneur compromisInjection dans le buildExfiltration de secretsINCIDENTS MAI 2026317 packages npm compromisGitHub breach TeamPCPGrafana GitHub ActionsTanStack Shai-HuludLiteLLM PyPI credential stealer8 COUCHES = DEFENSE EN PROFONDEUR CONTRE LES ATTAQUES SUPPLY CHAINChaque couche renforce les precedentes — commencez par les etapes 1 a 3, puis ajoutez les suivantes

Etape 1 : Verrouiller les dependances avec les fichiers lock

La premiere ligne de defense contre les attaques supply chain est le verrouillage strict des versions de dependances. Lors de l attaque des 317 packages npm du 19 mai 2026, les projets qui utilisaient npm ci avec un package-lock.json verrouille n ont pas ete affectes — meme s ils dependaient des packages compromis. Pourquoi ? Parce que npm ci installe exactement les versions specifiees dans le fichier lock, ignorant les nouvelles versions publiees sur le registre.

Actions concretes :

  • Toujours commiter vos fichiers package-lock.json ou yarn.lock dans votre depot Git — ne les ajoutez jamais dans .gitignore.
  • Utilisez npm ci au lieu de npm install dans tous vos pipelines CI/CD.
  • Pour Yarn, utilisez yarn install --frozen-lockfile (Yarn 1) ou yarn install --immutable (Yarn 2+).
  • Preferez les versions exactes dans package.json ("react": "18.3.1") plutot que les ranges ("react": "^18.3.1"). Les equipes de la communaute tech de Paris ont largement adopte cette pratique apres les incidents de 2025.

Exemple de configuration GitHub Actions avec npm ci :

# .github/workflows/ci.yml
name: CI Pipeline Securise
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      # npm ci echoue si package-lock.json
      # est absent ou incoherent
      - run: npm ci
      - run: npm run build
      - run: npm test

Etape 2 : Integrer npm audit et yarn audit dans le pipeline

L audit de securite des dependances doit etre une etape bloquante de votre pipeline CI/CD. Si npm audit detecte des vulnerabilites critiques ou elevees, le build doit echouer et le deploiement doit etre bloque. C est une approche que les equipes DevSecOps de Lyon et Toulouse ont massivement adoptee apres les attaques de debut 2026. L objectif n est pas d avoir zero vulnerabilites — c est d avoir un processus qui detecte et bloque les versions malveillantes avant qu elles n atteignent la production.

# Ajouter apres npm ci dans votre workflow
- name: Audit de securite des dependances
  run: npm audit --audit-level=high
  # Echoue si vulns high ou critical

# Alternative avec yarn
- name: Audit Yarn
  run: yarn audit --level high

# Pour un rapport detaille sans bloquer
- name: Audit rapport complet
  run: npm audit --json > audit-report.json
  continue-on-error: true

- name: Upload audit report
  uses: actions/upload-artifact@v4
  with:
    name: security-audit
    path: audit-report.json

Pour aller au-dela de npm audit, integrez Socket.dev dans votre pipeline. Socket.dev ne se contente pas de verifier les CVE connues — il analyse le comportement des packages en detectant les scripts postinstall suspects, les acces reseau inattendus, et les lectures de fichiers de credentials. C est exactement le type d analyse qui aurait detecte les payloads malveillants des 317 packages npm compromis avant que le registre npm ne publie ses advisories. Notre guide pour configurer Dependabot et Renovate pour l audit de securite couvre cette integration en detail.

Etape 3 : Permissions minimales pour GitHub Actions

Par defaut, le GITHUB_TOKEN genere automatiquement par GitHub Actions a des permissions bien trop larges pour la plupart des workflows. Dans l attaque contre Grafana via GitHub Actions, les attaquants ont exploite un token avec des permissions excessives pour acceder au code source. La regle est simple : chaque workflow ne doit avoir que les permissions strictement necessaires a son execution.

# .github/workflows/ci.yml
name: CI Pipeline Securise
on: [push, pull_request]

# Permissions minimales au niveau du workflow
permissions:
  contents: read    # Lecture seule du code
  # Pas de write, pas de packages, pas de deployments

jobs:
  build:
    runs-on: ubuntu-latest
    # Surcharge possible par job si necessaire
    permissions:
      contents: read
      checks: write  # Seulement si publication de resultats
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: npm audit --audit-level=high
      - run: npm test

  # Job de publication separe avec permissions dediees
  publish:
    needs: build
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write  # Publication uniquement ici
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm publish
    env:
      NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

Points cles pour securiser vos workflows GitHub Actions, comme nous le recommandons egalement dans notre guide pour securiser GitHub Actions contre les attaques supply chain : Pinnez les versions des actions par hash SHA plutot que par tag (ex: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 au lieu de actions/checkout@v4). Separez les jobs de build et de publication avec des permissions distinctes. Utilisez des environments GitHub avec approbation obligatoire pour les deploiements en production. Activez la protection des branches pour empecher les push directs sur main.

Etape 4 : Deployer un registre prive comme proxy cache

Un registre npm prive agissant comme proxy cache entre vos projets et le registre npm public est l une des protections les plus efficaces contre les attaques supply chain. Au lieu que vos pipelines CI/CD telechargent directement depuis registry.npmjs.org, ils telechargent depuis votre registre interne qui met en cache les versions approuvees et peut bloquer les versions malveillantes avant qu elles n atteignent vos machines. Plusieurs entreprises de la communaute tech de Paris et Lyon utilisent deja cette approche en production.

Trois options open source populaires :

OutilTypeIdeal pourScan securiteCout
VerdaccioProxy npm legerPetites equipes, startupsBasique (via plugins)Gratuit (open source)
JFrog ArtifactoryRepository universelMoyennes et grandes equipesAvance (JFrog Xray)Freemium / Payant
Sonatype NexusRepository managerEntreprises, conformiteAvance (Nexus IQ)OSS gratuit / Pro payant
GitHub PackagesRegistre integre GitHubEquipes deja sur GitHubVia DependabotInclus dans GitHub
# Configurer npm pour utiliser votre registre prive
# .npmrc (a la racine du projet)
registry=https://npm.votre-entreprise.fr/
# Ou pour un scope specifique :
@votre-scope:registry=https://npm.votre-entreprise.fr/

# Verdaccio en Docker (demarrage rapide)
docker run -d -p 4873:4873 \
  --name verdaccio \
  -v verdaccio-storage:/verdaccio/storage \
  -v verdaccio-conf:/verdaccio/conf \
  verdaccio/verdaccio

Besoin d aide pour securiser votre pipeline CI/CD ?

Audit de pipeline, mise en place de registre prive, configuration Dependabot/Renovate, integration Sigstore/SLSA, formation DevSecOps — notre equipe vous accompagne de A a Z.

Nous contacter

Etape 5 : Implementer Sigstore et SLSA pour la provenance

Sigstore est un projet open source de la Linux Foundation qui fournit une infrastructure de signature cryptographique pour les artefacts logiciels. SLSA (Supply-chain Levels for Software Artifacts, prononce "salsa") est un framework qui definit des niveaux de garantie pour la supply chain. Ensemble, ils permettent de verifier mathematiquement qu un package a ete construit a partir du code source attendu, par un pipeline autorise, sans modification. C est la protection ultime contre les attaques comme celle des 317 packages npm — meme si un attaquant compromet un compte mainteneur, il ne peut pas produire un artefact avec une provenance SLSA valide sans controler egalement le pipeline de build.

# Workflow SLSA pour npm (provenance niveau 3)
# .github/workflows/publish-slsa.yml
name: Publish with SLSA Provenance
on:
  release:
    types: [published]

permissions:
  contents: read
  id-token: write  # Requis pour Sigstore

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          registry-url: 'https://registry.npmjs.org'
      - run: npm ci
      - run: npm test
      # Publication avec provenance SLSA
      - run: npm publish --provenance
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
# La provenance est automatiquement generee
# et publiee sur le registre npm via Sigstore

Pour les consommateurs de packages, vous pouvez verifier la provenance avec npm audit signatures. Cette commande verifie que les packages installes ont ete publies avec une signature Sigstore valide. npm a commence a supporter la provenance SLSA nativement, ce qui signifie que la verification est transparente pour les developpeurs. Si un package est publie sans provenance alors que les versions precedentes en avaient une, c est un signal d alarme qui merite investigation.

Etape 6 : Configurer Dependabot et Renovate pour le monitoring

Dependabot (integre a GitHub) et Renovate (open source, multi-plateforme) sont des outils essentiels pour le monitoring continu de vos dependances. Ils creent automatiquement des pull requests quand de nouvelles versions sont disponibles, avec des informations sur les changements et les vulnerabilites corrigees. Pour les equipes DevSecOps, c est la difference entre decouvrir une vulnerabilite des sa publication et la decouvrir lors du prochain audit — potentiellement des semaines plus tard.

# .github/dependabot.yml
version: 2
updates:
  # Dependances npm
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"
    open-pull-requests-limit: 10
    labels:
      - "dependencies"
      - "security"
    # Grouper les mises a jour mineures
    groups:
      minor-and-patch:
        update-types:
          - "minor"
          - "patch"
    # Alertes de securite immediates
    security-updates:
      enabled: true

  # GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    labels:
      - "ci"
      - "security"

Pour un controle plus fin, Renovate offre des fonctionnalites avancees : merge automatique des patches de securite (apres passage des tests), regroupement intelligent des mises a jour, et support de multiples registres et ecosystemes. La configuration detaillee est couverte dans notre guide pour configurer Dependabot et Renovate pour l audit de securite des dependances open source. Les meetups DevSecOps de Toulouse et Nantes recommandent systematiquement cette double configuration Dependabot + Renovate pour une couverture maximale.

Etape 7 : Generer un SBOM (Software Bill of Materials)

Un SBOM (Software Bill of Materials) est un inventaire exhaustif de tous les composants logiciels utilises dans votre projet — y compris les dependances transitives. C est l equivalent d une liste d ingredients pour un logiciel. Quand une attaque comme celle des 317 packages npm survient, le SBOM permet de repondre instantanement a la question : "sommes-nous affectes ?" Sans SBOM, cette question peut prendre des heures ou des jours a resoudre dans une organisation avec des dizaines de projets. Le Cyber Resilience Act europeen et la directive NIS2 vont rendre la generation de SBOM obligatoire pour les logiciels deployes en Europe.

# Generer un SBOM au format CycloneDX
# Installation
npm install -g @cyclonedx/cyclonedx-npm

# Generation du SBOM
cyclonedx-npm --output-file sbom.json

# Dans GitHub Actions
- name: Generate SBOM
  run: npx @cyclonedx/cyclonedx-npm --output-file sbom.json

- name: Upload SBOM
  uses: actions/upload-artifact@v4
  with:
    name: sbom
    path: sbom.json

# Alternative : SPDX
npx spdx-sbom-generator -o sbom-spdx.json

Etape 8 : Monitoring comportemental et detection en temps reel

La derniere couche de defense est le monitoring comportemental — la detection en temps reel de comportements suspects dans les packages et les pipelines. Contrairement a npm audit qui verifie les CVE connues, le monitoring comportemental detecte les anomalies : un package qui commence soudainement a lire des fichiers de credentials, une dependance qui etablit des connexions reseau inattendues, ou un script postinstall qui execute du code obfusque. C est cette approche qui aurait detecte le payload malveillant des 317 packages npm avant que les advisories officiels ne soient publies.

MODELE DE MENACES — PIPELINE CI/CD ET OUTILS DE DETECTIONSURFACE D ATTAQUEOUTILS DE DETECTIONREGISTRE NPMVersions malveillantes, typosquatting, compte compromisSocket.dev + npm auditAnalyse comportementale + CVE connuesSCRIPTS POSTINSTALLExecution de code a l installation, exfiltrationnpm --ignore-scripts + Socket.devBloquer scripts + analyser avant executionGITHUB ACTIONS COMPROMISActions tierces malveillantes, injection de workflowPin SHA + StepSecurity Harden RunnerVersionnage strict + monitoring reseau CI/CDSECRETS / TOKENS EXPOSESCredentials en clair dans logs, env vars, configsGitHub Secret Scanning + VaultDetection automatique + gestion centraliseeDEPENDANCES TRANSITIVESVulnerabilites dans les deps de deps (profondeur N)SBOM + Snyk + DependabotInventaire complet + monitoring continuRECOMMANDATION : combiner au moins 3 outils pour une couverture maximale

Pour implementer le monitoring comportemental dans votre pipeline, StepSecurity Harden Runner est un outil open source qui s integre directement dans GitHub Actions. Il surveille les connexions reseau, les acces au systeme de fichiers, et les processus executes pendant le build — et bloque les comportements anormaux. C est exactement le type d outil qui aurait detecte le payload des 317 packages npm tentant d envoyer des credentials vers un serveur externe.

# Integration StepSecurity Harden Runner
# Ajouter en premiere etape de chaque job
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Harden Runner
        uses: step-security/harden-runner@v2
        with:
          egress-policy: audit
          # En mode strict, bloquer les connexions
          # non autorisees :
          # egress-policy: block
          # allowed-endpoints: >
          #   registry.npmjs.org:443
          #   github.com:443

      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm audit --audit-level=high
      - run: npm test

En mode audit, Harden Runner enregistre toutes les connexions sortantes sans les bloquer — utile pour decouvrir les endpoints legitimement necessaires avant de passer en mode block. En mode block, seules les connexions vers les endpoints autorises sont permises — toute tentative d exfiltration vers un serveur C2 est immediatement bloquee et reportee. C est la defense la plus efficace contre les payloads de type credential stealer dans les pipelines CI/CD. Pour une approche complementaire cote pipeline Python, consultez notre guide pour proteger les pipelines Python contre les attaques supply chain.

Checklist recapitulatif : les 8 etapes en un coup d oeil

  1. Verrouiller les dependances — Commiter les fichiers lock, utiliser npm ci, preferer les versions exactes.
  2. Audit automatisenpm audit --audit-level=high comme etape bloquante dans CI/CD.
  3. Permissions minimales — Restreindre GITHUB_TOKEN, separer build et publish, pinner les actions par SHA.
  4. Registre prive — Deployer Verdaccio, Artifactory ou Nexus comme proxy cache avec scan integre.
  5. Sigstore + SLSA — Signer les artefacts, publier avec --provenance, verifier avec npm audit signatures.
  6. Dependabot + Renovate — Monitoring quotidien des dependances, merge auto des patches critiques.
  7. SBOM — Generer un inventaire CycloneDX ou SPDX a chaque build pour la tracabilite.
  8. Monitoring comportemental — StepSecurity Harden Runner + Socket.dev pour la detection en temps reel.

Par ou commencer ? Si vous partez de zero, implementez les etapes 1 a 3 immediatement — elles prennent moins d une heure et bloquent la majorite des attaques supply chain classiques. Ajoutez ensuite les etapes 4 a 6 dans la semaine suivante. Les etapes 7 et 8 sont pour les equipes qui veulent une posture de securite de niveau entreprise, conforme aux exigences NIS2 et DORA. Pour les equipes qui utilisent egalement des dependances Python, completez avec notre guide pour auditer les dependances Python contre les attaques supply chain.

FAQ

Pourquoi securiser son pipeline CI/CD est-il devenu critique en 2026 ?

En mai 2026, plusieurs attaques supply chain majeures ont cible les pipelines CI/CD : 317 packages npm compromis avec 630+ versions malveillantes, GitHub pirate via une extension VS Code, Grafana attaque via GitHub Actions. Les pipelines CI/CD contiennent des tokens de deploiement, des credentials cloud, et des acces aux registres de packages. Un pipeline compromis permet de deployer du code malveillant en production. La securisation est devenue un imperatif reglementaire (NIS2, DORA, CRA) et operationnel.

Quelle est la difference entre npm install et npm ci pour la securite ?

npm install lit le fichier package.json et peut resoudre des versions differentes de celles prevues si le package-lock.json n est pas a jour ou absent. npm ci (clean install) installe exactement les versions specifiees dans le package-lock.json et echoue si le fichier lock est absent ou incoherent. En CI/CD, utilisez toujours npm ci pour garantir des builds reproductibles et empecher l installation de versions malveillantes publiees entre le moment du commit et le moment du build.

Qu est-ce que Sigstore et SLSA et pourquoi les utiliser ?

Sigstore est un projet open source de la Linux Foundation pour la signature cryptographique des artefacts logiciels. SLSA (Supply-chain Levels for Software Artifacts) est un framework de securite definissant des niveaux de garantie pour la supply chain, du niveau 1 (provenance basique) au niveau 4 (build hermetique et reproductible). Ensemble, ils permettent de verifier qu un package a ete construit a partir du code source attendu, par un pipeline autorise, sans modification. npm supporte nativement la provenance SLSA via l option --provenance.

Comment configurer Dependabot pour la securite supply chain ?

Configurez Dependabot dans .github/dependabot.yml : definissez l intervalle a daily pour les projets critiques, limitez les PR ouvertes a 5-10, configurez les groupes pour regrouper les mises a jour mineures, ajoutez des labels automatiques, activez les security-updates, et configurez les ecosystemes npm et github-actions. Completez avec Renovate pour un controle plus fin et des politiques de merge automatique sur les patches de securite.

Securisez votre pipeline CI/CD des maintenant

Audit de pipeline, mise en place de registre prive, configuration Dependabot/Renovate, integration Sigstore/SLSA, SBOM, monitoring StepSecurity, formation DevSecOps — notre equipe vous accompagne de bout en bout.

Demander un audit de securite

Articles lies :

Sources : OpenSSF, Sigstore, SLSA, StepSecurity, Socket.dev, Snyk