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.
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.jsonouyarn.lockdans votre depot Git — ne les ajoutez jamais dans.gitignore. - Utilisez
npm ciau lieu denpm installdans tous vos pipelines CI/CD. - Pour Yarn, utilisez
yarn install --frozen-lockfile(Yarn 1) ouyarn 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 testEtape 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.jsonPour 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 :
| Outil | Type | Ideal pour | Scan securite | Cout |
|---|---|---|---|---|
| Verdaccio | Proxy npm leger | Petites equipes, startups | Basique (via plugins) | Gratuit (open source) |
| JFrog Artifactory | Repository universel | Moyennes et grandes equipes | Avance (JFrog Xray) | Freemium / Payant |
| Sonatype Nexus | Repository manager | Entreprises, conformite | Avance (Nexus IQ) | OSS gratuit / Pro payant |
| GitHub Packages | Registre integre GitHub | Equipes deja sur GitHub | Via Dependabot | Inclus 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/verdaccioBesoin 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 contacterEtape 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 SigstorePour 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.jsonEtape 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.
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 testEn 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
- Verrouiller les dependances — Commiter les fichiers lock, utiliser
npm ci, preferer les versions exactes. - Audit automatise —
npm audit --audit-level=highcomme etape bloquante dans CI/CD. - Permissions minimales — Restreindre
GITHUB_TOKEN, separer build et publish, pinner les actions par SHA. - Registre prive — Deployer Verdaccio, Artifactory ou Nexus comme proxy cache avec scan integre.
- Sigstore + SLSA — Signer les artefacts, publier avec
--provenance, verifier avecnpm audit signatures. - Dependabot + Renovate — Monitoring quotidien des dependances, merge auto des patches critiques.
- SBOM — Generer un inventaire CycloneDX ou SPDX a chaque build pour la tracabilite.
- 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 securiteArticles lies :
- 317 packages npm compromis : supply chain attack massive en mai 2026
- Securiser GitHub Actions contre les attaques supply chain en 6 etapes
- Securiser les pipelines npm contre les attaques supply chain en 7 etapes
- Configurer Dependabot et Renovate pour l audit de securite des dependances
- Configurer un pipeline CI/CD securise pour un projet open source en 6 etapes
Sources : OpenSSF, Sigstore, SLSA, StepSecurity, Socket.dev, Snyk