Skip to main content

Analyse de sécurité de JHipster avec Snyk

Écrit par
Blog illustrations fipster feature

8 octobre 2020

0 minutes de lecture

JHipster est une plateforme open source réputée qui permet de générer, développer et déployer rapidement des applications web modernes et des microservices. Avec la CLI JHipster, vous pouvez choisir les frameworks et les plateformes que vous souhaitez utiliser pour vos applications.

Associez facilement différents frameworks : par exemple, utilisez Java avec Spring Boot pour votre backend, une base de données MongoDB et Angular ou React pour votre frontend. Ajoutez votre framework de test préféré pour générer instantanément une application complète avec tout le code de base nécessaire.

Illustration d’un homme barbu portant des lunettes bleues et un nœud papillon, à côté du mot « Hipster » écrit en lettres cursives

Créer des applications sécurisées dès le départ

Générer une application et utiliser plusieurs écosystèmes simultanément ajoute de nombreuses dépendances issues des écosystèmes choisis. Il est essentiel de surveiller leur état. Vous souhaitez notamment être averti si l’une des nombreuses dépendances que vous utilisez présente un problème de sécurité.


JHipster security scanning with Snyk

Analyser votre projet JHipster en ligne de commande

Nous allons utiliser le scanner de vulnérabilités gratuit de Snyk pour tester les dépendances de l’application. Vous avez déjà utilisé npm pour installer JHipster : il vous suffit donc d’exécuter cette commande pour installer Snyk sur votre machine.

npm i -g snyk

La première étape consiste à vous authentifier. Vous avez besoin d’un compte Snyk gratuit pour utiliser les fonctionnalités d’analyse. Si vous saisissez snyk auth, la CLI ouvre un navigateur web où vous pouvez créer un compte gratuit ou vous connecter. Si vous avez déjà un compte Snyk, vous pouvez également utiliser votre clé API snyk auth <api key> ou la définir comme variable d’environnement SNYK_TOKEN.

Pour analyser votre projet, il vous suffit d’exécuter la commande suivante.

snyk test --all-projects

Il est conseillé d’utiliser l’option all-projects, car votre dossier peut contenir plusieurs projets. Snyk recherchera ainsi plusieurs fichiers manifest dans le répertoire actuel et ses sous-répertoires.

Si vous venez de créer une petite application monolithique avec JHipster, votre dossier peut contenir à la fois un fichier manifest Java pour le backend et un fichier manifest Node.js pour le frontend. Nous voulons analyser les deux.

Les résultats de l’analyse vous indiquent si vous avez inclus des bibliothèques vulnérables et s’il existe une solution simple pour les corriger. Même si aucune mise à niveau directe n’est encore disponible, vous pouvez parfois mettre la bibliothèque à niveau manuellement. Découvrez quelques exemples pour y parvenir avec Maven.

Sortie du terminal répertoriant les vulnérabilités des dépendances Java, notamment la désérialisation de données non fiables et le déni de service, avec des recommandations de mise à niveau.

Analyser vos dépendances dans votre pipeline CI/CD

En exécutant jhipster ci-cd, vous disposez de plusieurs options pour créer un pipeline CI. Il serait également judicieux d’y analyser nos dépendances. Dans cet exemple, nous utiliserons Snyk pour cela. Il vous suffit d’avoir un compte Snyk gratuit afin d’utiliser la clé API.

L’exemple suivant vous montre comment intégrer la CLI aux différents pipelines que JHipster peut créer. Il s’agit de la même CLI que nous avons récemment utilisée sur notre machine locale, et elle produit un résultat similaire.

Vous souhaiterez probablement aussi surveiller vos dépendances après la création du binaire. De nouvelles vulnérabilités peuvent apparaître au fil du temps : il serait donc utile de surveiller vos dépendances en continu. Voici comment utiliser snyk monitor dans votre pipeline.

Jenkins

Si vous choisissez un pipeline Jenkins, un nouveau fichier src/main/docker/jenkins.yml sera généré. Vous pouvez lancer ce conteneur Docker avec docker-compose -f src/main/docker/jenkins.yml up.

Avec Jenkins, vous avez deux options. Vous pouvez installer le plug-in Snyk dans Jenkins via l’interface, puis le configurer pour l’utiliser dans votre pipeline.

Vous pouvez aussi analyser votre application avec le binaire de la CLI Snyk et le déclarer dans le Jenkinsfile généré par le générateur jhipster ci-cd.

Ajoutez les étapes suivantes à ce Jenkinsfile pour télécharger la dernière version de la CLI Snyk et lancer une analyse.

Remarque : vous devez ajouter le jeton API Snyk de votre compte (gratuit) comme variable d’environnement SNYK_TOKEN.

Mascotte Jenkins portant un smoking et un nœud papillon, tenant un parchemin blanc sur fond de cercle rouge
Jenkinsfile
// Not required if you install the Snyk CLI on your Agent
stage('Download Latest Snyk CLI') {
   sh """
       curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
       chmod +x snyk
   """
}

// Run snyk test to check for vulnerabilities and fail the build if any are found
// Consider using --severity-threshold=<low|medium|high> for more granularity (see snyk help for more info).
stage('Snyk Test using Snyk CLI') {
   sh './snyk test --all-projects'
}

// Run snyk monitor to create a snapshot and let it monitor by Snyk
// Consider using --severity-threshold=<low|medium|high> for more granularity (see snyk help for more info).
stage('Snyk Monitor using Snyk CLI') {
   sh './snyk monitor --all-projects'
}

Le Jenkinsfile contient 3 tâches :

  • télécharger le dernier binaire de la CLI Snyk

  • Snyk Test : analyser votre application et afficher les vulnérabilités

  • Snyk Monitor : créer un instantané de la situation et l’envoyer à Snyk pour une surveillance continue

Pour Snyk Test et Snyk Monitor, vous pouvez ajouter --severity-threshold=<low|medium|high> afin de ne recevoir des alertes que pour les vulnérabilités dépassant un certain niveau de gravité.

GitHub Actions

GitHub Actions est probablement l’une des solutions les plus populaires pour créer un pipeline lorsque votre dépôt est hébergé sur GitHub. Si vous sélectionnez « Github Actions » dans le générateur jhipster ci-cd, JHipster génère pour vous un fichier .github/workflow/github-ci.yml. GitHub détecte les fichiers YAML de ce dossier et les exécute comme une « action » après chaque push.

Icône de workflow GitHub Actions avec des symboles connectés de lecture, de validation et d’état en attente

Vous pouvez intégrer Snyk de plusieurs façons.

Actions GitHub distinctes

Vous pouvez créer des actions GitHub distinctes pour les fonctionnalités de Snyk Test. Vous devez alors créer un fichier YML distinct dans le dossier workflow. L’action s’exécutera en parallèle du pipeline généré par JHipster.

Vous devez ajouter une action spécifique en fonction de l’écosystème. Vous trouverez des exemples d’actions dans ce dépôt.

Intégrer les tests Snyk au pipeline généré

Vous pouvez également intégrer Snyk en tant qu’étape supplémentaire au pipeline généré par JHipster.

Commencez par ajouter votre jeton API Snyk aux variables d’environnement. Vous pouvez l’ajouter dans la section env de votre script.

env:
   ...
   SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

Pour éviter d’exposer votre jeton au monde entier, ajoutez-le à vos secrets en choisissant Settings †’ Secrets †’ New secret.

Page des paramètres du dépôt GitHub affichant la section Secrets avec un secret SNYK_TOKEN existant et les options pour le mettre à jour ou le supprimer.

En ajoutant les étapes ci-dessous, vous allez :

  • le dernier binaire de la CLI

  • tester votre application avec Snyk Test

  • surveiller l’instantané actuel avec Snyk Monitor

    • - name: Install Snyk CLI
       run: |
         curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
         chmod +x snyk
      - name: Snyk Test
       run: ./snyk test --all-projects
      - name: Snyk Monitor
       run: ./snyk test --all-projects

Vous pouvez aussi installer le binaire avec npm. npm doit toutefois être installé dans le pipeline, ce qui est déjà le cas si vous avez choisi un frontend basé sur JavaScript. Dans ce cas, remplacez l’étape Install Snyk CLI par la suivante :

- name: Install Snyk
 run: npm install -g snyk
- name: Snyk Test
 run: snyk test --all-projects
- name: Snyk Monitor
 run: snyk test --all-projects

Pour Snyk Test et Snyk Monitor, vous pouvez ajouter --severity-threshold=<low|medium|high> afin de ne recevoir des alertes que pour les vulnérabilités dépassant un certain niveau de gravité.

Travis CI

JHipster génère un fichier .travis si vous choisissez cette option dans le générateur jipster ci-cd. Vous pouvez facilement intégrer Snyk en ajoutant ce qui suit à la section script :

Ouvrier du bâtiment en dessin animé portant un casque jaune marqué d’un T rouge, des lunettes de protection et une moustache rouge
script:
...
# Dependency scanning with Snyk
# add Snyk API token as environment variable SNYK_TOKEN
- curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
- chmod +x snyk
- ./snyk test --all-projects
- ./snyk monitor --all-projects

…

Vous devez ajouter votre clé API Snyk comme variable d’environnement SNYK_TOKEN. Pour Snyk Test et Snyk Monitor, vous pouvez ajouter --severity-threshold=<low|medium|high> afin de ne recevoir des alertes que pour les vulnérabilités dépassant un certain niveau de gravité.

CircleCI

Avec CircleCI, vous avez deux options. Vous pouvez configurer votre instance CircleCI pour utiliser Snyk Orb, comme indiqué dans la documentation d’intégration. Vous pouvez aussi analyser avec la dernière version de la CLI en ajoutant ce qui suit au fichier config.yml créé pour vous par JHipster ci-cd.

Logo de CircleCI en noir et blanc
       steps:
...
# Dependency scanning with Snyk.
# add Snyk API token as environment variable SNYK_TOKEN
 - run:
     name: install-snyk
     command: |
       curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
       chmod +x snyk
 - run: # run snyk test
     name: snyk test
     command: './snyk test --all-projects'
 - run: # run snyk monitor
     name: snyk monitor
     command: './snyk monitor --all-projects'
...

Vous devez ajouter votre clé API Snyk comme variable d’environnement SNYK_TOKEN. Pour Snyk Test et Snyk Monitor, vous pouvez ajouter --severity-threshold=<low|medium|high> afin de ne recevoir des alertes que pour les vulnérabilités dépassant un certain niveau de gravité.

GitLab CI

Avec GitLab CI, vous pouvez également intégrer la CLI Snyk pour analyser vos projets dans votre pipeline CI. Dans le fichier .gitlab-ci.yml généré par JHipster ci-cd, ajoutez l’exemple suivant à la fin pour analyser et surveiller vos projets.

Logo de GitLab CI avec l’icône de renard orange et le texte « GitLab CI » gris
# Dependency scanning with Snyk
# add Snyk API token as environment variable SNYK_TOKEN
dependency_scanning:
 stage: release
 script:
   # Download latest CLI version
   - curl -Lo ./snyk $(curl -s https://api.github.com/repos/snyk/snyk/releases/latest | grep "browser_download_url.*snyk-linux"" | cut -d ':' -f 2,3 | tr -d " | tr -d ' ')
   - chmod +x snyk
   # SNYK_TOKEN environment variable should be present and containing the api key
   # run snyk test to break build if needed and snyk monitor to monitor this snapshot
   - ./snyk test --all-projects
   - ./snyk monitor --all-projects

Là encore, vous devez ajouter votre clé API Snyk comme variable d’environnement SNYK_TOKEN. Pour Snyk Test et Snyk Monitor, vous pouvez ajouter --severity-threshold=<low|medium|high> afin de ne recevoir des alertes que pour les vulnérabilités dépassant un certain niveau de gravité.

Conclusion

Il est évidemment essentiel de vérifier que vos bibliothèques tierces ne présentent aucun problème de sécurité. Les exemples de situations graves dues au maintien d’une bibliothèque vulnérable au lieu de la remplacer par une version corrigée ne manquent pas. L’analyse avec Snyk vous aide à éviter ce problème, aussi bien sur votre machine locale pendant le développement que dans votre pipeline CI.

Comme vous pouvez le constater, l’analyse des dépendances de votre projet JHipster est très simple. Pour consulter les exemples de code des pipelines CI présentés dans cet article, découvrez ce projet exemple JHipster. Développez rapidement avec JHipster tout en restant sécurisé avec Snyk.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis de capture du drapeau en regardant à la demande notre atelier virtuel d’initiation.

Lire la suite

blog feature snyk container custom base recommendations
Blog

Découvrez Evo Agentic AppSec : une sécurité au rythme du développement de l’IA

Le développement piloté par l’IA dépasse les workflows de sécurité traditionnels. L’AppSec agentique de Snyk s’appuie sur des agents de sécurité pour détecter, corriger et vérifier les vulnérabilités en continu, tandis que les équipes définissent les exigences.

blog feature ai violet
Blog

VulnBump : les agents IA peuvent-ils corriger les dépendances vulnérables sans casser le build ?

VulnBump évalue des agents IA sur 307 mises à niveau de dépendances réelles. Une correction n’est comptabilisée que si la vulnérabilité disparaît et que la compilation et les tests restent au vert.

Blog

Les modèles de pointe ont trouvé les vulnérabilités. Seul l’attaquant a trouvé les chaînes d’exploitation.

L’analyse statique a détecté les failles, mais seuls des tests d’attaque en conditions réelles ont prouvé comment elles pouvaient être enchaînées pour provoquer des compromissions. Comparaison d’Evo COS, de Claude Security et de Claude Code Security.