Analyse de sécurité de JHipster avec Snyk
8 octobre 2020
0 minutes de lectureJHipster 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.

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é.

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.
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.
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.

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.

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.

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.
Pour éviter d’exposer votre jeton au monde entier, ajoutez-le à vos secrets en choisissant Settings Secrets New secret.

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
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 :
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 :

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.

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.

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.



