Objectifs pédagogiques¶
- Installer et utiliser Snyk CLI pour scanner des dépendances en local
- Configurer et utiliser la plateforme Snyk SaaS
- Intégrer Snyk dans une pipeline GitLab CI/CD
- Interpréter et gérer les résultats de scan
- Mettre en place des stratégies de remédiation
- Configurer des politiques de sécurité personnalisées
Snyk & Théorie¶
Présentation de Snyk¶
Snyk est une plateforme de sécurité applicative qui permet de :
- Scanner les dépendances open source (SCA)
- Analyser le code source (SAST)
- Scanner les images de conteneurs
- Scanner les configurations Infrastructure as Code (IaC)
Architecture Snyk :
- Snyk CLI : outil en ligne de commande pour l'analyse locale
- Snyk SaaS Platform : plateforme web pour la gestion centralisée
- Snyk API : pour l'intégration et l'automatisation
- Intégrations IDE : plugins pour VSCode, IntelliJ, etc.
- Intégrations CI/CD : GitLab CI, GitHub Actions, Jenkins, etc.
Modèle de licence Snyk¶
Free Tier :
- 200 tests par mois
- Projets open source illimités
- Accès à toutes les fonctionnalités de base
- Idéal pour les tests et petits projets
Plans payants :
- Team, Business, Enterprise
- Tests illimités
- Fonctionnalités avancées (RBAC, SSO, reporting, etc.)
Snyk & Pratique¶
Installation de Snyk CLI¶
MacOS
Linux
# Téléchargement direct
curl https://static.snyk.io/cli/latest/snyk-linux -o snyk
chmod +x snyk
sudo mv snyk /usr/local/bin/
Windows
Principales commandes - Authentification interactive¶
Cette commande :
- Ouvre votre navigateur
- Vous demande de vous connecter à Snyk
- Génère et stocke un token automatiquement
Principales commandes - Scan de base des dépendances¶
Scanner un projet Node.js
Divers :
# Projet Python
snyk test --file=requirements.txt
# Projet Java/Maven
snyk test --file=pom.xml
# Projet Java/Gradle
snyk test --file=build.gradle
# Projet .NET
snyk test --file=packages.config
# Projet Ruby
snyk test --file=Gemfile.lock
# Projet Go
snyk test --file=go.mod
# Projet PHP/Composer
snyk test --file=composer.lock
Principales commandes - Options d'affichage¶
# Format JSON
snyk test --json
# Format JSON avec sortie dans fichier
snyk test --json > snyk-report.json
# Format SARIF (pour GitLab Security Dashboard)
snyk test --sarif
# Afficher uniquement les vulnérabilités high et critical
snyk test --severity-threshold=high
# Afficher des informations détaillées
snyk test --print-deps
Monitoring continu¶
Enregistrer un projet pour monitoring
- Envoie un snapshot des dépendances à Snyk
- Active le monitoring continu
- Vous recevrez des alertes lors de nouvelles vulnérabilités
Options avancées¶
Ignorer des vulnérabilités
Créer un fichier .snyk à la racine du projet :
# .snyk
ignore:
SNYK-JS-BSON-561052:
- mongodb > mongodb-core > bson:
reason: None given
SNYK-JS-BSON-561052:
- '*':
reason: None Given
Lancer un test :
Options avancées¶
Scanner avec des seuils personnalisés
# Échouer uniquement sur critical
snyk test --severity-threshold=critical
# Échouer sur high ou critical
snyk test --severity-threshold=high
Merge Requests automatiques¶
Pour les dépendances vulnérables, Snyk peut ouvrir automatiquement une PR de correction :
- upgrade de version
- remplacement de libraries
- patchs temporaires
Cela fonctionne pour :
- Node.js
- Python
- Go
- Java
- Maven
- Terraform
- Docker
Merge Requests automatiques¶
Configurer les Fix MRs : Settings → Integrations → GitLab → Settings
Stratégies de MR :
- Option A : Single MR
- Une seule MR regroupant toutes les corrections
- Plus facile à reviewer et merger
- Réduit le bruit dans GitLab
- Option B : Separate MRs
- Une MR par dépendance
- Permet des corrections progressives
- Utile si les mises à jour sont risquées
Merge Requests automatiques¶
Workflow de revue des MRs Snyk
- Notification : MR créée automatiquement par Snyk
- Review :
- Vérifier les changements dans package.json/lock
- Consulter les détails des vulnérabilités corrigées
- Vérifier qu'il n'y a pas de breaking changes
- Tests : Pipeline CI/CD se déclenche automatiquement
- Validation :
- Tests passent → Merge
- Tests échouent → Investiguer (possibles breaking changes)
- Merge : Intégrer à la branche principale
Intégration CI/CD (GitLab CI)¶
Préparation : variable secrète
Ajoute dans ton GitLab :
- Settings → CI/CD → Variables
- SNYK_TOKEN = ton token Snyk
Intégration CI/CD (GitLab CI)¶
Exemple de .gitlab-ci.yml :
stages:
- security
snyk_sast:
stage: security
image:
name: snyk/snyk:latest
entrypoint: [""]
script:
- snyk auth $SNYK_TOKEN
- snyk test --severity-threshold=high
- snyk monitor
Avec rapport JSON
Gestion des vulnérabilités¶
Comprendre le Priority Score
Snyk attribue un Priority Score (0-1000) basé sur :
- Sévérité CVSS (Common Vulnerability Scoring System)
- Exploitabilité : existe-t-il un exploit public ?
- Maturité de l'exploit : Mature, Proof of Concept, No Known Exploit
- Accessibilité réseau : exploitable à distance ?
- Présence dans le code : la fonction vulnérable est-elle appelée ?
- Facteurs contextuels : OS, configuration, etc.
Exercice - TP¶
- Etre capable de lancer Snyk en local (test/monitor)
- Etre capable de bien config le SaaS avec un projet
- Etre capable de réalicer une CI (test/monitor)