Skip to main content

Gestion proactive et continue des vulnérabilités AppSec pour les développeurs et les équipes de sécurité

Écrit par
blog feature snyk code green

2 octobre 2024

0 minutes de lecture

Quels sont les risques croissants de cybersécurité dans le paysage actuel du développement logiciel qui préoccupent les RSSI ?

Les développeurs et les équipes de sécurité font face à un nombre toujours plus important de menaces : des attaques sophistiquées contre la chaîne d’approvisionnement open source et contrôlée par des fournisseurs aux vulnérabilités introduites par le code généré par l’IA, comme l’injection de prompt et les failles de sécurité dans le code de GitHub Copilot. La complexité des applications modernes, qui reposent souvent fortement sur des composants open source (comme ceux disponibles sur npm, PyPI ou RubyGems) et sur des déploiements conteneurisés, ne fait qu’aggraver la situation. 

Face à l’ampleur et à la complexité de ces risques, l’automatisation de la gestion des vulnérabilités est devenue indispensable. Les processus manuels de cybersécurité ne peuvent tout simplement pas suivre le volume et le rythme des vulnérabilités potentielles et du développement logiciel. L’automatisation accélère non seulement la détection et la correction des problèmes de sécurité, mais garantit aussi que ces processus, suivis régulièrement par les équipes de sécurité, sont appliqués de manière cohérente à toutes les étapes du cycle de vie du développement logiciel.

L’importance de la gestion continue des vulnérabilités dans des domaines spécifiques

  • Dépendance croissante aux composants open source : les composants open source sont omniprésents dans le développement logiciel moderne. S’ils accélèrent le développement des applications et contribuent à réduire les coûts, ils introduisent également des risques de sécurité importants. Des attaques très médiatisées contre la chaîne d’approvisionnement, comme la porte dérobée XZ et la fuite de données de SolarWinds, ont mis en évidence les dégâts considérables que peut causer l’exploitation de vulnérabilités dans les dépendances open source et les composants fermés contrôlés par des fournisseurs.

  • Utilisation croissante du code généré par l’IA dans le développement : l’essor de l’IA générative (GenAI) dans le développement logiciel offre de nouvelles possibilités, mais pose aussi des défis. La GenAI peut considérablement accélérer les tâches de programmation, mais elle peut également introduire de nouvelles vulnérabilités. Le code généré par l’IA peut ne pas tenir compte des considérations de sécurité que les développeurs expérimentés intègrent habituellement, créant ainsi des failles potentielles. Par exemple, GitHub Copilot a introduit une faille XSS dans React.

  • Croissance rapide des applications conteneurisées : les applications conteneurisées sont devenues la norme pour déployer des logiciels modernes. Les conteneurs offrent de nombreux avantages, notamment la cohérence entre les environnements et la facilité de mise à l’échelle. Toutefois, ils créent aussi de nouveaux défis de sécurité, en particulier pour la gestion des vulnérabilités dans les images de conteneurs. Les développeurs peuvent donc avoir besoin de conseils pour savoir comment choisir la meilleure image de conteneur et connaître les bonnes pratiques générales en matière de conteneurs, mais l’automatisation de la détection des vulnérabilités dans les images de conteneurs Docker est indispensable.

Examinons ces points plus en détail… Autre exemple d’attaque très médiatisée contre la chaîne d’approvisionnement : l’attaque contre Codecov, au cours de laquelle des attaquants ont accédé à des données sensibles en exploitant des vulnérabilités dans un outil populaire de mesure de la couverture du code. Les développeurs doivent régulièrement gérer les risques liés aux dépendances open source. Celles-ci peuvent introduire des vulnérabilités directes et transitives dans votre base de code. Les vulnérabilités directes se trouvent dans les bibliothèques que vous ajoutez explicitement, tandis que les vulnérabilités transitives se trouvent dans les dépendances de ces bibliothèques. La gestion manuelle de ces risques est ardue : l’automatisation est donc un élément essentiel d’une stratégie de sécurité robuste.

Avec la GenAI, les assistants de programmation comme GitHub Copilot ou ChatGPT peuvent introduire des vulnérabilités bien réelles. La GenAI peut involontairement générer des pratiques de programmation non sécurisées ou ne pas reconnaître des exigences de sécurité propres à un contexte donné. Par exemple, un modèle d’IA peut générer du code vulnérable aux injections SQL ou aux attaques de script intersite (XSS). La surveillance et la sécurisation du code généré par l’IA sont donc essentielles pour préserver la sécurité des applications. 

La difficulté à suivre les nouvelles vulnérabilités des conteneurs n’échappe pas non plus aux équipes de sécurité. Leur rythme d’apparition rapide peut être difficile à gérer. Chaque nouvelle vulnérabilité doit être détectée et corrigée rapidement pour prévenir toute exploitation potentielle. Cette complexité nécessite des solutions automatisées s’appuyant sur une expertise en sécurité pour gérer efficacement la sécurité des conteneurs.

Les vulnérabilités des conteneurs peuvent avoir des conséquences majeures sur la sécurité globale de vos applications. Une seule image de conteneur vulnérable peut compromettre toute la pile applicative. Des outils comme Snyk Container automatisent la détection et la correction des vulnérabilités dans les images de conteneurs. Snyk Container peut suggérer de nouvelles balises d’image de base permettant de réduire le nombre de vulnérabilités et automatiser les Pull Requests pour mettre à jour vos dépôts de code.

Comment atténuer toutes ces menaces de cybersécurité AppSec ?

AppSec proactive et gestion continue des vulnérabilités avec Snyk


Pour atténuer les risques associés au code généré par l’IA, pensez à utiliser des outils comme Snyk Code. Propulsé par Snyk DeepCode AI, cet outil SAST rapide s’intègre directement à l’IDE des développeurs grâce à un plug-in. Il s’appuie sur des données d’entraînement spécifiques à la sécurité pour détecter le code vulnérable et non sécurisé, afin que les problèmes soient identifiés et résolus dès les premières étapes du développement.

La prise en main de Snyk DeepCode AI est simple. Le plug-in prend en charge les IDE populaires comme Visual Studio Code, IntelliJ IDEA, VS Code et PyCharm. 

Guide rapide pour installer et intégrer Snyk DeepCode AI dans Visual Studio Code

1. Installez l’extension Snyk :

  • Ouvrez Visual Studio Code.

  • Accédez à la vue Extensions en cliquant sur l’icône Extensions dans la barre d’activité, sur le côté de la fenêtre.

  • Recherchez « Snyk », puis cliquez sur « Installer » pour l’extension Snyk.

2. Authentifiez-vous auprès de Snyk :

  • Après l’installation, vous serez invité à vous authentifier avec votre compte Snyk.

  • Suivez les instructions à l’écran pour vous connecter ou créer un compte ici.

3. Activez Snyk DeepCode AI :

  • Une fois authentifié, accédez à la vue Snyk dans la barre d’activité.

  • Activez Snyk DeepCode AI pour commencer à analyser votre code à la recherche de vulnérabilités.

Une fois l’installation terminée, le logo Snyk dans la barre latérale affiche les vulnérabilités et les problèmes de sécurité détectés dans vos dépendances open source, votre propre code (ou celui généré par la GenAI) et votre code IaC.

Éditeur de code en thème sombre affichant les vulnérabilités détectées par Snyk à côté du code JavaScript d’une application Express et d’une base de données SQLite.

Avantages des outils SAST pour aider les développeurs à repérer les modèles de code non sécurisé directement dans leur IDE

  1. Commentaires en temps réel : pendant que vous écrivez du code, Snyk DeepCode AI l’analyse en temps réel et vous signale immédiatement les problèmes de sécurité potentiels. Les développeurs peuvent ainsi corriger les vulnérabilités avant qu’elles ne s’ancrent dans la base de code.

  2. Analyses pilotées par l’IA : le modèle d’IA est entraîné sur un vaste ensemble de données propres à la sécurité, ce qui lui permet de reconnaître les modèles de code non sécurisé, y compris ceux introduits par la GenAI ou par de mauvaises pratiques de programmation.

  3. Intégration fluide : en s’intégrant directement à l’IDE, Snyk DeepCode AI s’inscrit naturellement dans le flux de travail des développeurs, en réduisant les interruptions et en favorisant la productivité.

Voyons un exemple d’atténuation des vulnérabilités introduites par la GenAI. Dans ce projet, j’ai utilisé GitHub Copilot pour compléter automatiquement le code qui crée une route de point de terminaison POST Express pour interroger l’API OpenAI, puis j’ai utilisé res.send() pour envoyer la réponse au navigateur.

Mais que se passerait-il si la réponse contenue dans cette charge utile était affichée directement dans le navigateur ? Si l’en-tête Content-Type par défaut text/html était utilisé pour envoyer cette requête, une vulnérabilité de script intersite affecterait l’application en cours d’exécution. Que pouvons-nous faire ?

Éditeur de code affichant un point de terminaison de complétion de chat OpenAI avec une vulnérabilité de type Cross-site scripting (XSS) mise en évidence

Comme vous pouvez le voir dans l’annotation au-dessus de la ligne 31, Snyk propose de corriger ce problème de sécurité. J’ai cliqué dessus et, en quelques secondes, l’extension Snyk DeepCode AI a proposé une mesure d’atténuation qui remplace res.send() par res.json, comme suit :

res.json(response.choices[0].message.content);

Avec cette modification, l’application Express définit le content-type de la réponse sur application/json, un type de contenu textuel générique qui permet d’envoyer du texte tel que <script>alert()</script>.

En utilisant Snyk dans leur IDE, les développeurs peuvent détecter et atténuer les vulnérabilités de manière proactive grâce au moteur Snyk DeepCode AI, afin de sécuriser leur code dès le départ. Cette approche proactive de la sécurité des applications est essentielle aujourd’hui, alors que les risques associés aux chaînes d’approvisionnement open source et au code généré par la GenAI sont omniprésents.

Automatisez la gestion des dépendances avec Snyk Open Source

Snyk Open Source est un outil puissant qui aide les développeurs et les équipes de sécurité à gérer les risques liés aux dépendances open source. Alors que les bibliothèques open source sont de plus en plus utilisées, une gestion robuste et automatisée des dépendances est plus essentielle que jamais. Snyk Open Source offre des fonctionnalités complètes d’analyse et de correction des vulnérabilités pour garantir la sécurité et la conformité de vos projets.

Dans mon application Node.js précédente, j’utilise également une dépendance SQLite, pour laquelle Snyk m’a signalé un problème de sécurité comme suit :

L’éditeur de code signale une dépendance sqlite3 vulnérable, accompagnée d’un rapport détaillé sur la vulnérabilité « Libération manquante d’une ressource après sa durée de vie utile ».

Ces informations sur les vulnérabilités permettent de comprendre quelle dépendance transitive présente un risque de sécurité et comment l’atténuer, si possible. Dans ce cas, la dépendance transitive inflight présente une vulnérabilité de gravité moyenne.

Snyk détecte que mon fichier de verrouillage et ma dépendance sont potentiellement obsolètes et ne peut donc pas trouver de solution de correction. Voyons cependant l’automatisation à l’œuvre lorsque nous importons le dépôt de code GitHub dans Snyk. Voici les informations affichées dans l’application Snyk :

Tableau de bord de sécurité répertoriant les projets d’analyse de code, avec les dates d’importation et de test ainsi que le nombre de problèmes par niveau de gravité

À partir de là, Snyk ouvre automatiquement de nouvelles Pull Requests pour suggérer des mises à niveau des dépendances lorsque des vulnérabilités de sécurité sont détectées dans le manifeste de mes packages.

La gestion des dépendances ne concerne pas uniquement les bibliothèques que vous incluez directement dans votre projet. Les dépendances transitives, c’est-à-dire celles introduites par vos dépendances directes, peuvent également présenter des vulnérabilités. Snyk excelle dans la détection et la correction des vulnérabilités des dépendances directes comme transitives.

Prenons le scénario suivant :

{
  "dependencies": {
    "express": "^4.17.1",
    "lodash": "^4.17.20"
  }
}

Dans cet exemple, express et lodash sont des dépendances directes. Cependant, express peut avoir son propre ensemble de dépendances, qui peuvent à leur tour avoir leurs propres dépendances. Snyk parcourt l’ensemble de cet arbre de dépendances, en détectant et en corrigeant les vulnérabilités à chaque niveau.

Pour gérer les vulnérabilités des conteneurs, Snyk Container vous aide à maintenir à jour les balises des images de base et leurs correctifs de sécurité.

Snyk Container est une solution complète conçue pour aider les développeurs et les équipes de sécurité à gérer efficacement les vulnérabilités des conteneurs. Les applications conteneurisées sont très répandues dans les grandes entreprises, qui doivent également sécuriser ces environnements. Snyk Container s’intègre parfaitement à votre pipeline CI/CD et assure une surveillance continue ainsi que la correction proactive des vulnérabilités dans vos images de conteneurs.

L’une des fonctionnalités phares de Snyk Container est sa capacité à automatiser la création de Pull Requests pour corriger les vulnérabilités dans vos images de conteneurs. Cette automatisation change la donne pour les développeurs comme pour les équipes de sécurité, car elle réduit considérablement les efforts manuels nécessaires pour sécuriser les images de conteneurs.

Voici un exemple montrant comment Snyk Container peut automatiser une PR pour mettre à jour un package vulnérable dans un Dockerfile :

FROM node:14.1.0
RUN npm install express
COPY . /app
CMD ["node", "/app/index.js"]

Lorsque Snyk Container détecte une vulnérabilité, il génère automatiquement une PR contenant les modifications nécessaires pour corriger le problème. Il peut s’agir de mettre à jour un package vulnérable ou d’appliquer un correctif de sécurité. En automatisant ce processus, Snyk Container permet de traiter rapidement les vulnérabilités et de réduire la période d’exposition.

Tableau comparant les images de base Node.js actuelles et celles issues d’une mise à niveau mineure, selon le nombre et la gravité des vulnérabilités.

En utilisant ces images de base recommandées, vous pouvez réduire considérablement le nombre de vulnérabilités dans vos images de conteneur et renforcer ainsi la sécurité globale de vos applications.

Écran de PR de correction affichant la mise à niveau de l’image de base d’un Dockerfile de node:14.1.0 vers node:14.21.0

Snyk Container a détecté plusieurs vulnérabilités dans cette image de base et généré automatiquement des PR pour mettre à jour l’image et les dépendances associées. L’équipe a pu examiner et fusionner rapidement ces PR, réduisant de plus de 30 % le nombre de vulnérabilités en quelques secondes. Après la fusion de la Pull Request, les tests du pipeline CI/CD se sont déroulés sans accroc.

Demande de pull GitHub pour mettre à niveau un nœud de sécurité Snyk de la version 14.1.0 à la version 14.21.0, avec les détails des vulnérabilités et leurs niveaux de gravité

Cette approche proactive a non seulement renforcé la posture de sécurité de leurs applications, mais a aussi libéré un temps précieux pour que les développeurs se consacrent à la création de nouvelles fonctionnalités plutôt qu’à la gestion des vulnérabilités.

Sécurisez votre code pendant le développement

Snyk analyse votre code pour détecter les problèmes de qualité et de sécurité, et vous conseille sur leur correction directement dans votre IDE.