Corrigez automatiquement les vulnérabilités du code grâce à l’IA
14 octobre 2024
0 minutes de lectureDans la série d’ateliers SecRel de Snyk destinés à ses clients, nous en proposons un intitulé Breaking AI. Cet atelier explique comment les assistants d’IA générative, comme copilot et codium, peuvent aider les développeurs à écrire du code plus rapidement. L’idée principale de l’atelier, c’est que les assistants d’IA ressemblent à des développeurs juniors qui viennent de terminer leur bootcamp de programmation : ils sont très enthousiastes et serviables, mais vous devez vraiment vérifier leur code (sans vouloir dénigrer les développeurs juniors : nous avons besoin d’eux, et ils sont formidables !). Pendant l’atelier, nous montrons comment associer les assistants d’IA à Snyk pour obtenir un superpouvoir : écrire du code rapidement et en toute sécurité.
Pour reprendre les mots d’un célèbre chef, Snyk vient de « passer à la vitesse supérieure » avec sa fonctionnalité Deep Code AI Fix. Snyk Code a toujours fourni de bonnes recommandations de correction lorsqu’il détecte une vulnérabilité. Il vous proposait même trois exemples pertinents d’autres projets open source présentant la même vulnérabilité, et vous montrait comment ces projets l’avaient corrigée. Désormais, grâce aux données soigneusement sélectionnées par l’équipe de recherche en sécurité de Snyk et à un modèle d’IA hybride qui associe la puissance de l’IA générative et symbolique ainsi que des modèles de machine learning, Snyk peut corriger automatiquement de nombreuses vulnérabilités courantes directement dans votre IDE préféré.
Dans cet article, je vais vous montrer comment tirer le meilleur parti de Deep Code AI Fix (DCAIF) dans un exemple de projet Java que nous utilisons lors de nos ateliers. Vous trouverez le code source ici. REMARQUE : ce projet contient volontairement plusieurs vulnérabilités et ne convient pas à un environnement de production.
Amusons-nous avec une application de planification de conférences
Si vous avez déjà participé à une conférence technologique ou pris la parole lors d’un tel événement, vous savez que créer et présenter le programme est l’un des aspects les plus difficiles.
L’application de référence en est une version assez catastrophique (je ne suis PAS un bon développeur front-end !), mais elle permet de montrer comment du code peut fonctionner sur le plan technique tout en étant vulnérable.
C’est une application Spring Boot qui utilise le moteur de templates Thymeleaf. Au démarrage, elle génère des données aléatoires sur les intervenants, les titres des présentations et leur description à l’aide de la bibliothèque populaire faker. Les titres et les descriptions des présentations sont tous tirés du livre Le Guide du voyageur galactique. REMARQUE : les titres et descriptions ne sont pas tous forcément adaptés au milieu professionnel. Vous voilà prévenus !
Chaque intervenant généré pour l’événement dispose également d’une page dédiée où figure la liste de ses présentations à la conférence. Nous allons nous concentrer sur cette partie de l’application.
Pour compiler et exécuter l’application, lancez la commande suivante :
Lorsque vous exécutez l’application, vous voyez, en plus de la bannière Spring Boot habituelle et des autres messages, quelque chose comme ceci :
REMARQUE : le résultat ne sera pas exactement identique, car les intervenants et leurs présentations sont générés aléatoirement à chaque démarrage de l’application.
Si vous cliquez sur l’un des liens ou le copiez-collez, vous verrez la page d’un intervenant avec la liste de ses présentations :

À vous de jouer : trouvez la vulnérabilité
Examinez TalkController.java. C’est ainsi que la page d’un intervenant est générée. Saurez-vous repérer la vulnérabilité ?
Nous ne voulons pas vous obliger à vous fier à vos yeux ! Nous voulons que les développeurs puissent avancer vite ET écrire du code sécurisé.
J’utilise IntelliJ Idea pour développer mes applications Java. J’utilise aussi l’extension IDE de Snyk. Bonne nouvelle : Snyk propose des extensions pour les IDE les plus populaires, avec la prise en charge d’un large éventail de langages de programmation.
Si vous souhaitez suivre les étapes et que vous n’avez pas de compte Snyk, vous pouvez en créer un gratuitement ici.
Ai-je précisé que cette application contient de nombreuses vulnérabilités ? C’est parce que nous l’utilisons dans nos ateliers. Je veux me concentrer sur celle qui se trouve dans TalkController.java :

Indique qu’une vulnérabilité de type cross-site scripting (XSS) a été détectée
Affiche un diff provenant de l’un des trois projets open source présentant la même vulnérabilité. Il montre comment celle-ci a été corrigée (la partie verte).
Le soulignement rouge ondulé indique l’emplacement de la vulnérabilité dans le code.
Toutes ces informations sont très utiles pour résoudre le problème. Remarquez toutefois le petit éclair (⚡️) situé à gauche de la vulnérabilité n° 1. Il indique que cette vulnérabilité peut être corrigée automatiquement.
Si vous placez le pointeur de la souris sur le soulignement rouge ondulé, l’option Corriger ce problème s’affiche :

Avant d’examiner le résultat de Deep Code AI Fix, voyons ce que copilot ferait à notre place.
Voici l’invite que j’ai donnée à copilot à la ligne 42, ainsi que le code qu’il insère :
Cela pourrait fonctionner contre des attaques naïves, mais est-ce que cela résisterait à tous les types d’attaques XSS ? J’en doute. En fait, lorsque je relance l’analyse Snyk, la vulnérabilité XSS est toujours présente.
Voyons la correction proposée par Snyk :
Là, ça, j’aime. La solution adopte une approche idiomatique et attendue, à l’aide d’une bibliothèque intégrée à Spring Boot : HtmlUtils. Je suis convaincu qu’elle assainira complètement la valeur saisie : username. Une nouvelle analyse Snyk confirme que la vulnérabilité a disparu.

On applaudit ! Non seulement la correction automatique de Snyk a éliminé la vulnérabilité, mais elle l’a fait en respectant le framework utilisé, Spring Boot dans ce cas.
DCAIF ne vous ralentira pas
Dans cet article, je vous ai montré comment Deep Code AI Fix de Snyk va au-delà des simples recommandations de correction et peut effectuer une correction à votre place. Vous pouvez également en vérifier l’efficacité en constatant que la vulnérabilité initiale a disparu.
Chez Snyk, nous apprécions les assistants d’IA, mais ils ne sont pas très performants en matière de sécurité. Nos recherches montrent que les IA génératives actuelles produisent du code non sécurisé à peu près aussi souvent que les humains, soit environ 40 % du temps. C’est logique : les solutions purement génératives comme Copilot entraînent leurs modèles principalement sur du code existant. L’approche hybride de Snyk, qui combine IA symbolique, IA générative, machine learning et données d’entraînement sélectionnées par notre équipe de sécurité, privilégie la sécurité.
Commencez à sécuriser le code généré par l’IA
Créez gratuitement votre compte Snyk pour commencer à sécuriser le code généré par l’IA en quelques minutes. Vous pouvez aussi réserver une démonstration avec un expert pour découvrir comment Snyk répond à vos besoins en sécurité des développeurs.
