Skip to main content

Snyk fix : correction automatique des vulnérabilités depuis la CLI Snyk

Écrit par

7 octobre 2021

0 minutes de lecture

Nous sommes ravis d’annoncer la bêta ouverte d’une toute nouvelle commande de la CLI Snyk qui facilite encore davantage la détection et la correction des vulnérabilités : la commande snyk fix !

La CLI Snyk est déjà un outil extrêmement polyvalent et puissant, utilisé par les développeurs pour détecter et corriger les vulnérabilités de leurs projets, manuellement dans leur environnement de développement local ou automatiquement dans le cadre d’un pipeline CI/CD.

Avec snyk test, les utilisateurs de Snyk peuvent analyser leur projet et obtenir la liste de toutes les vulnérabilités détectées. Si une mise à niveau d’une dépendance permet de corriger une vulnérabilité, la CLI Snyk présente ses recommandations ainsi que toutes les informations nécessaires sur cette mise à niveau et la correction de la vulnérabilité.

La nouvelle commande snyk fix va plus loin en appliquant automatiquement ces recommandations. Elle est particulièrement utile aux développeurs qui souhaitent appliquer rapidement les correctifs dans le cadre de leur workflow de développement local, ou à ceux qui veulent automatiser les corrections dans leur pipeline CI/CD.

Avant d’examiner cette commande de plus près, voici quelques informations sur sa disponibilité et les écosystèmes pris en charge :

  • La commande snyk fix est en bêta ouverte. Il est donc possible que vous rencontriez des problèmes lors de son utilisation.

  • Pour le moment, seuls les projets Python utilisant Pip, Pipenv et Poetry sont pris en charge. Pour en savoir plus, consultez la snyk fix.

C’est parti !

Configurer la CLI Snyk

Tout d’abord, vérifiez que la CLI Snyk est installée. Si vous connaissez déjà la CLI Snyk et l’avez installée, assurez-vous d’utiliser la version v1.715.0 ou une version ultérieure.

La configuration de la CLI Snyk est simple. Vous pouvez l’installer rapidement avec npm ou Homebrew. Il vous suffit ensuite de vous authentifier avec votre compte Snyk (si ce n’est pas déjà fait, inscrivez-vous gratuitement ici) :

npm install -g snyk
snyk auth

Votre navigateur s’ouvrira et vous invitera à authentifier la CLI. Il ne vous reste plus qu’à le faire ! Vous pouvez maintenant utiliser la CLI Snyk pour analyser vos projets et détecter les vulnérabilités.

Commençons par exécuter la CLI Snyk et lancer un test. Pour cet exemple, j’utiliserai ce fork du projet PyGoat :

pip install -r requirements.txt
snyk test
Terminal exécutant `snyk test` sur un projet PyGoat, affichant huit vulnérabilités dans les dépendances, des recommandations de mise à niveau et un problème de licence.

Comme le montrent les résultats du test ci-dessus, la CLI Snyk a détecté 8 vulnérabilités et propose des mises à niveau pour les corriger.

Et maintenant ? Au bas des résultats du test, la CLI Snyk nous recommande d’activer la toute nouvelle commande snyk fix. Passons à l’étape suivante !

Activer snyk fix

Comme indiqué au début, la nouvelle commande snyk fix est actuellement en bêta ouverte. Pour l’utiliser, vous devez d’abord activer cette fonctionnalité. Pour cela, rendez-vous dans Snyk Preview, un espace dédié dans l’interface Snyk qui donne accès aux nouvelles fonctionnalités en cours de développement.

Dans Snyk, accédez à Settings, puis à Snyk Preview. Sous « Automatically apply recommended remediation in CLI », activez snyk fix (1), puis cliquez sur le bouton Save changes (2) pour appliquer la modification.

Page des paramètres de Snyk Preview affichant l’option de correction activée et le bouton « Enregistrer les modifications » mis en évidence.

Corriger les vulnérabilités dans votre environnement local

La nouvelle commande est maintenant activée. Il est temps de l’essayer. Dans la CLI, saisissez :

snyk fix 

La CLI Snyk applique automatiquement, dans la mesure du possible, les mises à niveau recommandées nécessaires pour corriger les vulnérabilités détectées, puis affiche un récapitulatif des résultats :

Terminal affichant la commande Snyk fix, qui met à niveau les dépendances Python dans requirements.txt et corrige six problèmes avec succès.

Dans notre application PyGoat, 6 des 8 vulnérabilités ont été corrigées. Une nouvelle analyse révèle qu’il reste deux problèmes : une vulnérabilité de gravité moyenne dans le package Jinja2 et une licence LGPLv3.0 dans le package psycopg2.

Ensuite, vous pouvez demander à la CLI Snyk de surveiller le projet en continu et de vous avertir lorsqu’un correctif sera disponible pour la vulnérabilité restante, ou lorsque de nouvelles vulnérabilités seront détectées dans ces dépendances. Pour cela, utilisez :

snyk monitor

Corriger les vulnérabilités dans votre pipeline CI/CD

La nouvelle commande snyk fix peut également automatiser les corrections dans vos pipelines CI/CD. Voyons un exemple avec GitHub Actions.

GitHub a lancé GitHub Actions pour aider les développeurs à automatiser leurs workflows d’intégration continue. Les actions GitHub de Snyk vous permettent d’intégrer facilement Snyk à ces workflows et d’analyser vos projets à la recherche de vulnérabilités, le tout dans le cadre de votre workflow CI/CD automatisé et directement depuis GitHub. Vous pouvez maintenant également corriger les vulnérabilités dans le cadre de ce workflow.

Plus précisément, nous allons utiliser cette action, qui exécute le workflow suivant :

  • Init - Pour éviter les mises à niveau incrémentielles, le workflow commence par vérifier le message du dernier commit et ne relance pas snyk fix si celui-ci correspond déjà à une correction automatisée.

  • Security - Le workflow exécute snyk fix pour rechercher les vulnérabilités et ouvrir une PR si une mise à niveau permettant de les corriger est identifiée.

L’utilisation de cette action est simple.

Les actions GitHub de Snyk utilisent une variable d’environnement appelée SNYK_TOKEN. Il s’agit de votre jeton API Snyk. Vous devez le récupérer avant de configurer l’action GitHub. Vous le trouverez dans l’interface Snyk, sur la page Settings.

Page des paramètres du compte Snyk affichant la section Jeton d’API avec un jeton flouté, une date de création et le bouton Révoquer et régénérer

Une fois le jeton récupéré, définissez-le comme secret dans les paramètres de votre dépôt, sous Settings | Secrets :

Formulaire de secret GitHub Actions affichant le nom « SNYK_TOKEN » et un champ de valeur flouté.

Vous pouvez maintenant configurer l’action Snyk. Dans votre dépôt GitHub, ouvrez l’onglet Actions, puis cliquez sur le bouton New workflow en haut à gauche.

GitHub vous propose plusieurs actions modèles en fonction du langage de programmation utilisé dans le dépôt. Pour configurer l’action GitHub de Snyk, cliquez sur set up a workflow yourself en haut de la page :

Page de configuration GitHub Actions avec une flèche pointant vers le lien « créer un workflow vous-même ».

Remplacez l’exemple de code par celui-ci (veillez à indiquer le nom de vos branches dans les espaces de noms correspondants de la configuration) :

name: Example workflow using Snyk fix
on: pull_request
jobs:
    init:
      runs-on: ubuntu-latest
      outputs:
        skip: ${{ steps.ci-skip-step.outputs.ci-skip }}
        skip-not: ${{ steps.ci-skip-step.outputs.ci-skip-not }}
      steps:
        - uses: actions/checkout@v2
          with:
            fetch-depth: 0
        - id: ci-skip-step
          uses: mstachniuk/ci-skip@master
          with:
            commit-filter: 'Merge pull request'
    security:
      runs-on: ubuntu-latest
      needs: init
      if: ${{ needs.init.outputs.skip == 'false' }}
      steps:
        - uses: actions/checkout@master
        - name: Run Snyk to check for vulnerabilities
          uses: snyk/actions/python-3.8@master
          env:
            SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
          with: 
            command: fix # adding this option to run snyk fix
            base: master    
        - name: create a PR
          uses: peter-evans/create-pull-request@v3
          with:
            base: main
        - name: get PR info
          run: |
            echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
            echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"      
        - name: Run a multi-line script
          run: |
            echo Add other actions to build,
            echo test, and deploy your project.

Et voilà. Lorsque vous validez le nouveau fichier, une nouvelle PR est ouverte et déclenche le workflow, qui simule l’automatisation des corrections avec la commande snyk fix. Découvrez ce workflow qui illustre toutes les étapes :

Tâche de sécurité GitHub Actions montrant un workflow d’analyse des vulnérabilités Snyk réussi, avec toutes les étapes terminées.

Comme défini dans le workflow, une nouvelle PR est ouverte avec les correctifs recommandés :

Demande de pull GitHub affichant les mises à jour des versions des dépendances dans un fichier requirements.txt

Essayez snyk fix !

Nous avons notamment créé Snyk Preview pour donner aux utilisateurs un accès anticipé aux fonctionnalités en cours de développement et en version bêta. snyk fix est un excellent exemple de fonctionnalité pour laquelle nous aimerions beaucoup recueillir les commentaires de la communauté avant sa mise à disposition générale. Essayez-la et dites-nous ce que vous en pensez à l’adresse suivante : snyk-fix-feedback@snyk.io

Pour en savoir plus sur l’utilisation de la nouvelle commande, ainsi que sur les éléments pris en charge ou non, consultez notre snyk fix.

Bonne correction !

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.