Skip to main content

Corrigez automatiquement les vulnérabilités de votre code avec l’IA

Écrit par

14 octobre 2024

0 minutes de lecture

L’un des ateliers de sécurité proposés dans la bibliothèque de Snyk se nomme Breaking AI. Il explique comment les assistants basés sur l’IA générative, par exemple copilot et codium, peuvent aider les développeurs à coder plus rapidement. La grande conclusion de cet atelier est que les assistants d’IA sont assimilables à des développeurs juniors tout juste sortis de l’école : ils sont très motivés et utiles, mais vous devez absolument vérifier leur code. Attention, je ne critique pas les juniors, ils sont vraiment super et nous avons besoin d’eux ! Dans cet atelier, nous montrons comment l’association d’assistants basés sur l’IA et de Snyk vous confère un vrai superpouvoir, celui de coder rapidement et en toute sécurité.

Snyk a vraiment changé le game avec sa fonctionnalité Deep Code AI Fix. Snyk Code a toujours donné de bons conseils de correction après avoir détecté une faille de sécurité. Il fournissait même trois références valables de projets open source ayant rencontré la même et montrait comment ils l’ont corrigée. Grâce à des données sélectionnées avec soin par l’équipe de recherche en sécurité de Snyk, nous disposons désormais d’un modèle d’IA hybride combinant la puissance de l’IA générative et symbolique à des modèles de machine learning qui permet de corriger automatiquement de nombreuses failles de sécurité directement depuis votre IDE préféré.

Dans cet article, je vais vous montrer comment profiter au maximum de Deep Code AI Fix (DCAIF) avec un exemple de projet Java que nous utilisons dans nos ateliers. Vous en trouverez le code source ici. REMARQUE : ce projet contient à dessein plusieurs vulnérabilités et ne doit en aucun cas être utilisé dans un environnement de production.

Projet de programmation de conférence

Si vous avez déjà assisté à une conférence technologique ou y avez participé en qualité d’intervenant, vous savez que l’un des points les plus complexes de ce type d’événement réside dans la création et la communication de son programme.

Notre application de référence a pour but de gérer cet aspect (comme vous allez le voir, je suis un très mauvais développeur front-end). Elle va nous permettre de voir comment un code peut être fonctionnel tout en étant vulnérable.

Il s’agit d’une application Spring Boot qui utilise le moteur de modèle Thymeleaf. Lors de son démarrage, elle génère une liste aléatoire d’intervenants, de titres de sessions et de descriptions de ces sessions en s’appuyant sur faker, une bibliothèque bien connue. Les titres et descriptions des sessions proviennent tous du livre Le Guide du voyageur galactique. REMARQUE : les titres et les descriptions ne sont peut-être pas tous adaptés à un environnement professionnel. Je vous aurai prévenus !

Chaque intervenant dispose aussi d’une page dédiée sur laquelle vous pouvez voir la liste de ses sessions. C’est sur cette partie de l’application que nous allons nous concentrer.

Pour compiler et exécuter l’application, utilisez la commande suivante :

mvn clean install
mvn spring-boot:run

En plus de la bannière de Spring Boot et des autres sorties, vous verrez ceci lors de l’exécution.

Access talks for heath.davis at: http://localhost:8081/talks?username=heath.davis
Access talks for russell.bernier at: http://localhost:8081/talks?username=russell.bernier
Access talks for kenyetta.jones at: http://localhost:8081/talks?username=kenyetta.jones
Access talks for howard.bailey at: http://localhost:8081/talks?username=howard.bailey
Access talks for buddy.jast at: http://localhost:8081/talks?username=buddy.jast
Access talks for jeanice.kertzmann at: http://localhost:8081/talks?username=jeanice.kertzmann
Access talks for deborah.hamill at: http://localhost:8081/talks?username=deborah.hamill
Access talks for horacio.renner at: http://localhost:8081/talks?username=horacio.renner
Access talks for winfred.schuster at: http://localhost:8081/talks?username=winfred.schuster
Access talks for tommie.hane at: http://localhost:8081/talks?username=tommie.hane
Access talks for micah at: http://localhost:8081/talks?username=micah

REMARQUE : les informations affichées ne seront pas exactement les mêmes, car les intervenants et leurs sessions sont générés de manière aléatoire à chaque démarrage de l’application.

Si vous cliquez sur les liens ou si vous les copiez/collez, vous arriverez sur une page présentant la liste des sessions de l’intervenant :

À la recherche de la vulnérabilité perdue

Penchons-nous sur TalkController.java. C’est ce code qui permet de rendre la page d’un intervenant. Avez-vous repéré la vulnérabilité ?

Nous voulons vous éviter de devoir scruter chaque ligne à la loupe ! Nous voulons que les développeurs puissent coder rapidement ET en toute sécurité.

J’utilise IntelliJ Idea pour écrire mes applications Java. J’utilise aussi l’extension Snyk pour les IDE. La bonne nouvelle, c’est qu’il existe des extensions Snyk pour tous les IDE les plus utilisés, avec à la clé de nombreux langages de programmation pris en charge.

Si vous voulez suivre cette démonstration sur votre ordinateur et que vous n’avez pas de compte Snyk, vous pouvez en créer un gratuitement ici.

Est-ce que je vous ai dit que cette application déborde de vulnérabilités ? Nous l’avons créée exprès pour nos ateliers. La vulnérabilité qui m’intéresse se trouve dans TalkController.java :

  1. Détection d’une vulnérabilité de type cross-site scripting (XSS)

  2. Fichier diff tiré de l’un des trois projets open source présentant la même vulnérabilité Présentation de la correction (en vert)

  3. La ligne ondulée rouge indique où se trouve la vulnérabilité dans le code.

Toutes ces informations sont très utiles pour résoudre le problème. Vous remarquerez la petite icône d’éclair (⚡️) sur la gauche de la première vulnérabilité. Elle indique que cette vulnérabilité peut être corrigée automatiquement.

Si vous passez la souris sur la ligne ondulée rouge, on vous propose de corriger le problème :

Avant de passer au résultat généré par Deep Code AI Fix, voyons ce que nous propose copilot.

Voici le prompt que j’ai fourni à copilote en ligne 42 et le code qu’il injecte :

// guard against XSS
username = username.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

Cette solution peut fonctionner contre des attaques peu sophistiquées, mais est-ce que cela sera efficace contre tous les types d’attaques XSS ? J’en doute. D’ailleurs, si je relance l’analyse Snyk, je vois que la vulnérabilité est toujours là.

Voyons maintenant la correction proposée par Snyk :

String usernameStr = "<h1>" + HtmlUtils.htmlEscape(username) + "'s talks<h1>";

C’est beaucoup mieux. La solution proposée utilise une approche logique et attendue avec une bibliothèque Spring Boot intégrée : HtmlUtils. Je pense que cela permettra de nettoyer correctement l’entrée username. Une nouvelle analyse Snyk indique que la vulnérabilité a maintenant disparu.

Bien joué ! La correction automatique de Snyk a non seulement fonctionné, mais elle a aussi respecté le framework que nous utilisons, ici Spring boot.

DCAIF ne ralentira pas votre développement

Dans cet article, je vous ai montré que la solution Deep Code AI Fix de Snyk va au-delà des simples conseils pour créer automatiquement une correction. Vous pouvez aussi confirmer l’efficacité de la correction en vous assurant que la faille de sécurité d’origine a bien disparu.

Chez Snyk, nous adorons les assistants de codage par l’IA, mais nous avons bien conscience qu’ils ne sont pas doués pour la sécurité. Nos recherches montrent que les IA génératives tendent à créer du code vulnérable à la même fréquence que les humains, soit environ 40 % du code produit. C’est d’ailleurs tout à fait logique, car les solutions d’IA générative comme Copilot s’appuient sur des modèles entraînés principalement sur du code existant. L’approche hybride de Snyk, qui allie IA symbolique, IA générative, machine learning et entraînement sur des données sélectionnées par notre équipe de sécurité permet de sécuriser votre code.

Sécurisez votre code généré par l’IA

Créez un compte Snyk gratuitement pour sécuriser votre code généré par l’IA en quelques minutes. Vous pouvez également demander une démonstration avec un expert pour déterminer comment Snyk peut répondre à vos besoins en matière de sécurité des développeurs.

Best practices for AI in the SDLC

Download this cheat sheet today to learn best practices for how to leverage AI in your SDLC, securely.