Vulnérabilité ou faiblesse : comprendre les principales différences en sécurité des applications
17 novembre 2023
0 minutes de lectureBien comprendre les vulnérabilités et les faiblesses est essentiel pour garantir la sécurité de vos systèmes et de vos données. Souvent dissimulées dans les logiciels et les technologies, les vulnérabilités peuvent présenter des risques importants. Elles constituent des points d’entrée potentiels pour les acteurs malveillants. Mais que sont les vulnérabilités, et en quoi diffèrent-elles des faiblesses ?
Imaginez une application Web qui utilise des algorithmes de chiffrement robustes pour protéger les données sensibles des utilisateurs. Cependant, à cause d’une erreur de programmation, la clé de chiffrement est inscrite en dur dans le code source de l’application. Elle est alors facilement accessible à quiconque examine le code.
Autre exemple : une application similaire utilise un algorithme de chiffrement faible, comme le MD5 non sécurisé, aujourd’hui obsolète. Un acteur malveillant pourrait alors finir par déchiffrer les mots de passe protégés par MD5, exposant le système à davantage de compromissions liées aux mots de passe.
Ces deux scénarios présentent des problèmes de sécurité. Pourtant, le premier relève d’une vulnérabilité, en raison d’une faille immédiatement exploitable dans le code (indice : scénario 1). Le second est une faiblesse liée à l’utilisation d’un algorithme de chiffrement non sécurisé, qui rend le système plus vulnérable aux attaques futures (indice : scénario 2).
Distinguer les vulnérabilités des faiblesses est essentiel pour la sécurité des applications. En comprenant cette distinction, les développeurs peuvent identifier les faiblesses avant leur exploitation et ainsi prévenir les vulnérabilités, pour renforcer la sécurité des applications. À l’inverse, comprendre les vulnérabilités permet aux développeurs de corriger les problèmes connus de manière réactive et d’éviter de futures exploitations.
Comprendre les vulnérabilités
Une vulnérabilité de sécurité est une faille dans le code logiciel ou une mauvaise configuration du système, comme Log4Shell, qui permet aux attaquants d’obtenir directement un accès non autorisé à un système ou à un réseau.
Les vulnérabilités sont des défauts ou des faiblesses dans la conception, l’implémentation, le fonctionnement ou les contrôles internes d’un système, susceptibles d’être exploités pour enfreindre sa politique de sécurité. Dans le développement logiciel, elles résultent généralement d’erreurs ou d’omissions de programmation qu’un acteur malveillant peut exploiter.
Par exemple, les injections SQL sont une vulnérabilité courante des applications Web. Elles se produisent lorsqu’une application insère des données utilisateur dans des requêtes SQL sans les valider ni les échapper correctement, ce qui permet à un attaquant de manipuler la requête.
Dans l’extrait de code Python ci-dessus, un attaquant pourrait insérer des commandes SQL dans la variable `userName`, ce qui pourrait entraîner un accès non autorisé ou une perte de données.
Comment les vulnérabilités sont-elles exploitées ?
Les acteurs malveillants peuvent exploiter les vulnérabilités de différentes façons.
Par exemple, une méthode courante consiste à injecter du code : les attaquants insèrent du code malveillant dans un système qui ne valide pas ou ne filtre pas correctement les entrées utilisateur. Cela peut entraîner des attaques par injection SQL, des débordements de mémoire tampon ou des attaques par script intersites (XSS), qui permettent à l’attaquant de manipuler ou de compromettre les fonctionnalités ou les données du système.
Les attaquants peuvent également exploiter des identifiants faibles ou par défaut, des logiciels qui n’ont pas été corrigés ou des techniques d’ingénierie sociale pour obtenir un accès non autorisé aux systèmes.
Comprendre ces tactiques est essentiel pour renforcer les systèmes face aux tentatives d’exploitation de vulnérabilités.
Préparez-vous aux vulnérabilités zero-day avec Snyk
Découvrez comment Snyk aide vos développeurs à corriger plus rapidement les vulnérabilités zero-day afin de réduire votre exposition et vos risques.
Vulnérabilités et sécurité des applications
Dans le domaine de la sécurité des applications, les vulnérabilités jouent un rôle essentiel pour comprendre les risques et les menaces auxquels les applications logicielles peuvent être exposées. Sous différentes formes, elles offrent aux attaquants des points d’entrée pour compromettre la sécurité, l’intégrité et la confidentialité des données de l’application. Pour mieux protéger les applications, il est essentiel d’identifier les vulnérabilités courantes exploitées par les attaquants et de s’en prémunir.
Chez Snyk, nous pensons que tous les développeurs soucieux de sécurité doivent connaître l’OWASP Top 10. Nous les avons présentés en détail sur Snyk Learn pour aider les développeurs à protéger leurs applications contre les acteurs malveillants. Pour accompagner les développeurs attentifs à la sécurité, nous avons publié le Top 10 des vulnérabilités open source de Snyk.
(*À noter que nous nous intéressons à des types de vulnérabilités spécifiques, sans les regrouper comme le fait l’OWASP.)
Déni de service : | Les attaques par déni de service (DoS) visent à bloquer l’accès à un réseau ou à un serveur en le submergeant de requêtes, au point qu’il ne puisse plus traiter la charge. Google et AWS ont tous deux subi des attaques DoS de grande ampleur, mais ce type d’attaque ne vise pas uniquement les grands fournisseurs de services cloud. |
Exécution de code à distance : | Ces attaques se produisent lorsqu’un acteur malveillant peut exécuter des commandes depuis un système distant auquel il ne devrait pas avoir accès. Les attaques RCE peuvent se produire de différentes manières, notamment par l’intermédiaire de logiciels malveillants ou en exploitant une bibliothèque vulnérable qui n’a pas été corrigée. Cette vulnérabilité permet aux attaquants de compromettre un serveur ou une application en y exécutant leur propre code. |
Désérialisation de données non fiables : | Cela se produit lorsqu’une application désérialise des données non fiables sans vérifier suffisamment que les données obtenues seront valides, ce qui permet à l’attaquant de contrôler l’état ou le déroulement de l’exécution. Une vulnérabilité de désérialisation Java survient lorsqu’un utilisateur malveillant tente d’insérer dans le système un objet sérialisé modifié afin de compromettre le système ou ses données. |
Injection SQL : | Il s’agit d’un type de vulnérabilité qui survient lorsqu’une application transmet à la base de données les données fournies par l’utilisateur, sans les valider, pour qu’elles soient traitées. Un attaquant peut ainsi ajouter des données non fiables à une requête de base de données. Par exemple, dans un formulaire Web, une injection SQL pourrait lui permettre de créer une entrée utilisateur pour voler des données précieuses, contourner l’authentification ou corrompre des enregistrements. |
Pollution de prototype : | Cette vulnérabilité touche JavaScript et désigne la possibilité d’injecter des propriétés dans les prototypes des constructions du langage JavaScript, comme les objets. JavaScript permet de modifier tous les attributs des objets. Un attaquant manipule ces attributs pour remplacer les propriétés du prototype de l’objet de base et polluer un objet d’application JavaScript en y injectant d’autres valeurs. |
Fichier temporaire non sécurisé | Les fichiers temporaires non sécurisés portent bien leur nom. Dans ce type de vulnérabilité, des fichiers temporaires contenant des informations sensibles sont créés avec des autorisations incorrectes ou dans des dossiers mal protégés. Cette vulnérabilité relève de la catégorie que l’OWASP appelle « contrôle d’accès défaillant ». |
Parcours de répertoires/chemins | Une attaque par parcours de répertoires (ou de chemins) vise à accéder à des fichiers et à des répertoires stockés en dehors du dossier prévu. En manipulant les chemins à l’aide de séquences « point-point-barre oblique (../) » et de leurs variantes, ou en utilisant des chemins de fichiers absolus, il peut être possible d’accéder à des fichiers et répertoires arbitraires du système de fichiers, notamment au code source de l’application, à sa configuration et à d’autres fichiers système essentiels. |
Déni de service par expression régulière (ReDoS) : | Les vulnérabilités de type déni de service par expression régulière (ReDoS) sont une forme d’attaque DoS. Les expressions régulières (regex) sont extrêmement puissantes, mais peu intuitives, ce qui peut permettre aux attaquants de rendre votre site indisponible. L’attaque vise à surcharger le serveur cible en l’obligeant à traiter une expression régulière volumineuse et invalide. |
Élévation de privilèges : | L’élévation de privilèges est une vulnérabilité liée à un contrôle d’accès défaillant. Dans ce cas, un attaquant contourne les contrôles d’accès pour obtenir des autorisations plus étendues sur une ressource. |
Déréférencement de pointeur NULL : | Enfin, le déréférencement de pointeur nul était la dixième vulnérabilité de gravité élevée ou critique la plus fréquemment détectée lors des analyses Snyk. C’était également la principale vulnérabilité de gravité élevée ou critique dans Go, et l’une des plus courantes en C et C++. Elle se produit lorsqu’une application tente de déréférencer un pointeur qu’elle suppose valide, mais qui contient en réalité une valeur nulle, ce qui provoque un plantage. Ce plantage entraîne alors une faille de déni de service. |
En comprenant ces vulnérabilités courantes et leur fréquence dans le développement logiciel, les développeurs et les organisations peuvent appliquer de manière proactive des mesures de sécurité et des bonnes pratiques pour mieux protéger leurs applications contre les vulnérabilités et les menaces potentielles.
Comprendre les faiblesses
Les faiblesses désignent des problèmes spécifiques qui réduisent la sécurité d’un système, même lorsqu’aucune exploitation n’a été identifiée. En bref, les faiblesses représentent des vulnérabilités potentielles.
L’utilisation d’algorithmes cryptographiques faibles ou non sécurisés pour protéger les mots de passe est un exemple classique de faiblesse. Même si elle ne mène pas directement à une exploitation, elle rend l’application plus vulnérable aux attaques par force brute ou de cassage de mots de passe.
Dans le code Java ci-dessus, l’utilisation de MD5 pour hacher les mots de passe est considérée comme une faiblesse, car MD5 est un algorithme de hachage faible et obsolète qui peut être facilement cassé.
Comment les faiblesses sont-elles exploitées ?
Bien que les vulnérabilités et les faiblesses soient des notions différentes, elles sont étroitement liées, car elles peuvent être exploitées. Une faiblesse peut exister dans un système sans être considérée comme une vulnérabilité. Mais dès qu’un attaquant trouve un moyen de l’exploiter, elle devient une vulnérabilité.
Faiblesses et sécurité des applications
La sécurité des applications est un élément essentiel du développement logiciel. Elle consiste à protéger les applications et les données qu’elles traitent contre différentes menaces et vulnérabilités. Comprendre les faiblesses potentielles est essentiel pour améliorer les mesures de sécurité.
Réaliser une évaluation de la sécurité des applications est essentiel pour fournir des logiciels et des applications sécurisés. Sans connaître le niveau de sécurité actuel de vos applications, il est difficile de savoir où votre organisation présente des faiblesses ou pourrait être exposée à de futures attaques.
Vulnérabilités ou faiblesses : quelle différence ?
Les faiblesses comme les vulnérabilités sont des états qui indiquent la présence de risques de sécurité.
Une faiblesse dans une application est une erreur ou un bogue susceptible d’entraîner une vulnérabilité pouvant être exploitée à des fins malveillantes. La différence entre une faiblesse et une vulnérabilité tient à la présence d’une charge utile spécifique qui permet son exploitation. Une fois l’exploitation identifiée, il s’agit d’une vulnérabilité avérée, qui représente un risque accru pour la sécurité de l’application. Il est recommandé de corriger les faiblesses avant qu’elles ne deviennent des vulnérabilités urgentes.
Identifier et corriger les vulnérabilités et les faiblesses
Face au grand nombre de vulnérabilités à suivre et à leur apparition constante, les organisations doivent mettre en place des procédures et des processus adaptés pour les traiter avant que la situation ne leur échappe. L’évaluation des vulnérabilités fait partie intégrante de cette démarche.
L’évaluation des vulnérabilités consiste à examiner en continu les faiblesses et les défauts de sécurité de vos systèmes. Ce processus vise à repérer les faiblesses, les vulnérabilités connues potentielles, leur pertinence et leur impact possible sur vos systèmes et vos environnements.
Par exemple :
Le test statique de sécurité des applications (SAST), une méthode de test en boîte blanche qui analyse le code source au repos, peut aider à détecter les faiblesses susceptibles d’entraîner une vulnérabilité et à générer un rapport.
Les tests d’intrusion consistent à pénétrer de manière éthique dans des systèmes depuis l’extérieur afin d’identifier les faiblesses et les vulnérabilités de sécurité, en simulant les tentatives d’un attaquant pour compromettre un système ou une entité.
Les revues de code sécurisées sont des outils automatisés qui vérifient les erreurs d’espacement ou de nommage dans le code et le comparent aux fonctions standard connues. Les revues manuelles évaluent le style, l’intention et le résultat fonctionnel du code. Les revues de code de sécurité vérifient la robustesse du code des développeurs. Une revue de code sécurisée peut repérer des faiblesses avant qu’elles ne deviennent des vulnérabilités.
Bonne nouvelle : les outils existants de test statique de sécurité des applications (SAST), comme Snyk Code, peuvent détecter les faiblesses et les vulnérabilités avant la revue de code.
Gardez une longueur d’avance sur les vulnérabilités et les faiblesses avec Snyk
L’évaluation continue des vulnérabilités est essentielle pour créer des produits sécurisés.
Les outils d’évaluation des vulnérabilités facilitent le processus d’évaluation et permettent de corriger les vulnérabilités dans votre code. Choisir les bons outils vous aide à garder une longueur d’avance sur les acteurs malveillants.
Trouvez, hiérarchisez et corrigez automatiquement les vulnérabilités dans votre code et vos dépendances open source tout au long du cycle de développement avec Snyk.
Ou, si vous êtes développeur et souhaitez en savoir plus, consultez Snyk Learn, où les développeurs découvrent comment rester en sécurité grâce à des leçons interactives qui explorent les vulnérabilités dans différents langages et écosystèmes.
Par exemple, consultez nos modules de formation sur les sujets suivants :
La sécurité des applications qui accélère le développement
Découvrez la solution AppSec de Snyk ou consultez notre guide d’achat des outils de sécurité pour les développeurs.