Catégorie :
VulnérabilitéCe que nous allons voir dans cet article :
- Qu’est-ce qu’une CVE ?
- Qu’est-ce qu’un CVSS ?
- Comment calcule-t-on un CVSS ?
- Différences entre CVSS v2 et CVSS v3
La CVE
Une CVE c’est quoi ?
Une CVE (Common Vulnerabilities and Exposures) est une liste de toutes les vulnérabilités publiques connues liées à la cybersécurité. Cette liste est tenue par l’organisation publique américaine MITRE.
Toutes les CVE ont la même forme : CVE-AAAA-NNNN (où les A représentent l’année de publication et les N sont l’identifiant de la vulnérabilité).
Au moment de l’écriture de cet article (27 juin 2020), 138 016 CVE ont été répertoriées sur le site de MITRE.
Tout au long de cet article on va se baser sur une CVE spécifique pour que vous puissiez vous aussi expérimenter en même temps.
La CVE est la suivante : CVE-2013-4454
Pour rechercher les détails d’une CVE il suffit de chercher directement sa référence sur Google ou bien passer par un site qui répertorie la liste des CVE existantes (par exemple depuis le site de MITRE on peut rechercher la vulnérabilité. Cependant on ne nous donne pas beaucoup d’informations. En effet, on ne voit pas son score par exemple. Il y a tout de même un lien qui nous redirige vers le site de NIST qui lui propose des informations plus complètes).
Exemple d’une recherche google pour la CVE-2013-4454 :
Détails de la CVE pour la version 2 du CVSS :
Le CVSS
Le CVSS c’est quoi ?
Le CVSS est un système qui permet d’attribuer un score à une vulnérabilité.
Le score est une métrique allant de 0 à 10. Un score de 0 étant une vulnérabilité “inofensive” tandis qu’un score de 10 correspond à une vulnérabilité critique.
Attention le score d’une CVE est basée sur le score base que l’on verra par la suite. On précise bien que toute cette partie se repose sur la version 2 du CVSS. Il existe une version améliorée appelée CVSS v3 mais on ne s’attardera pas dessus puisque son fonctionnement est le même. Un CVSS n’est basé que sur une seule vulnérabilité. Le score ne pend pas en compte l’intervention d’autres vulnérabilités par rapport à celle étudiée (du moins pour la v2).
L’évaluation est basée sur 3 grands groupes de métriques.
Chaque groupe est lui même composé de sous-métriques.
Et chaque sous métrique peut prendre différentes valeurs en fonction de la criticité.
Rassurez-vous, ça paraît compliqué au premier abord mais c’est super simple.
1) Métrique de base
Elle représente les caractéristiques fondamentales d’une vulnérabilité, elles sont constantes dans le temps et invariables à l’environnement utilisé.
- Vecteur d’accès : Informe sur les prérequis pour exploiter la vulnérabilité. Quel accès faut-il avoir pour exploiter la faille ?
- Complexité d’accès : Quel est le niveau de difficulté pour exploiter la vulnérabilité ?
- Prérequis d’authentification : Combien de fois l’attaquant doit s’authentifier pour exploiter la vulnérabilité ? On commence à prendre en compte l’authentification une fois que l’attaquant a accès au système.
Ces trois premières sous-métriquent représentent la métrique d’exploitation.
- Impact sur la confidentialité : Quel est l’impact sur la confidentialité des données ? La confidentialité est “le fait de s’assurer que l’information n’est accessible qu’à ceux dont l’accès est autorisé”. Un attaquant capable de récupérer certaines données sensibles impacte la confidentialité.
- Impact sur l’intégrité : Quel est l’impact sur l’intégrité des données ? Pour que l’intégrité des données soit respectée il ne faut pas que celles-ci ne soient pas altérées ou détruites lors de leur traitement, de leur conservation ou de leur transmission. Un attaquant qui arrive par exemple à supprimer une partie d’une trame émise vers un système impacte l’intégrité.
- Impact sur la disponibilité : Quel est l’impact sur la disponibilité des données ? La disponibilité d’un équipement ou d’un système correspond au temps durant lequel il est opérationnel divisé par le temps total. Pour avoir une grande disponibilité il faut donc que l’équipement ou le système soit le plus opérationnel possible. Par exemple, un déni de service impacte la disponibilité.
Une fois que toutes les valeurs (on en parlera plus loin dans l’article) ont été remplies il nous suffit d’appliquer les fonctions suivantes pour calculer le score pour la métrique de base de la version 2 :
2) Métrique temporelle
Cette métrique représente les caractéristiques d’une vulnérabilité qui change au cours du temps mais pas en fonction de l’environnement.
- Critère d’exploitabilité : Est-ce qu’il existe une preuve de concept (PoC) ou un code automatisé pour l’exploitation de cette vulnérabilité ?
- Niveau de correction : Des contre-mesures existent-elles pour cette vulnérabilité ?
- Rapport de confiance : A-t-on connaissance de l’existence de la vulnérabilité ?
Voici la fonction qui permet de calculer le score pour la métrique temporelle de la version 2 :
3) Métrique environnementale
Cette métrique représente les caractéristiques d’une vulnérabilité qui sont pertinentes dans un environnement particulier mais peuvent changer dans d’autres.
- Dommages collatéraux potentiels : Quels sont les dommages collatéraux concernant de potentielles pertes (par exemple d’équipements ou financières) dans l’organisation si l’attaque est menée à bien ?
- Distribution de la cible : Quel est la proportion de systèmes vulnérables dans l’environnement ?
- Modificateur d’impact de sous-métrique : Quel est le niveau d’exigence en terme de confidentialité, intégrité et disponibilité ?
On retrouve le même type de fonction pour calculer le score de la métrique environnementale :
Pour chaque vulnérabilité on peut représenter leurs valeurs de façon textuelle et compressée. On appelle ça un vecteur de vulnérabilité et voici à quoi il ressemble si on prend pour exemple la CVE-2013-4454 :
Vector : (AV:N/AC:L/Au:N/C:P/I:P/A:N)
Voici comment il faut le lire :
- AV:N correspond au vecteur d’accès (AV / Access Vector) avec la valeur égale à Network (N) qui correspond à un score de 1.0
- AC:L correspond à la complexité de l’attaque (AC / Attack Complexity) avec la valeur égale à Low (L) qui correspond à un score de 0.71
Et ainsi de suite. On voit bien ici que le vecteur ne contient que les informations nécessaires pour calculer le score base.
C’est sur celui-ci qu’on va se baser pour calculer le CVSS.
Vous pouvez retrouver toute la documentation avec des informations plus détaillées ici.
Calcul du CVSS
Il est possible d’utiliser un outil mis à disposition par la NIST pour calculer de façon automatique le score d’une CVE.
Mais parce qu’on veut s’amuser, on va tout calculer à la main et on pourra vérifier à la fin avec leur outil.
Si on reprend le vecteur de vulnérabilité donné pour la CVE-2013-4454 ainsi que les fonctions précédentes pour calculer le CVSS v2 et qu’on remplacer chaque terme par les valeurs présentes dans le vecteur voici ce qu’on obtient :
Rappel de la valeur du vecteur : (AV:N/AC:L/Au:N/C:P/I:P/A:N)
De la fonction à utiliser :
Les valeurs peuvent être trouvées directement sur Wikipedia ou sur le site du NIST
Exploitability = 20 x 1.0 x 0.71 x 0.704 = 9.9968
Impact = 10.41 x (1 - (1 - 0.275) x (1 - 0.275) x (1 - 0)) = 4.93824375
f(Impact) = 1.176 puisque Impact n’est pas = 0
BaseScore = roundTo1Decimal(((0.6 x 4.93824375) + (0.4 x 9,9968) - 1.5) x 1.176) =
BaseScore = (2.96294625 + 3.99872 - 1.5 ) x 1.176 = 6.42291951
On arrondi à 6.4 car on ne veut qu’une décimale après la virgule et on obtient notre score base. On peut maintenant vérifier avec l’outil du NIST :
Notre calcul était correct. Nous venons donc de calculer notre premier CVSS !
On est d’accord que recalculer le CVSS d’une CVE déjà existante ne sert à rien en soit. Mais si jamais un jour il vous arrive de trouver une vulnérabilité qui n’est pas encore listée vous pourrez avoir une idée de la criticité de celle-ci. Il est également toujours intéressant de connaître la façon dont les CVE sont référencées, classées et comment elles sont notées.
Voici comment est définie la sévérité d’une vulnérabilité en fonction de son Score Base :
Avec ce tableau on peut donc définir que la CVE-2013-4454 (avec un score de 6.4) a une sévérité moyenne lorsqu’on utilise la version 2 de CVSS.
Si on regarde maintenant le score de la version 3 la différence est impressionnante et on passe d’une vulnérabilité moyennement dangereuse à une vulnérabilité critique :
Comment cela est-il possible ?
Différences entre version 2 et version 3
La version 3 implémente de nouvelles sous-métriques. Certaines ont été supprimées, d’autres modifiées, etc …
De ce fait, ces modifications reflètent mieux la réalité et donc le score de base est plus précis sur la v3.
Par exemple concernant le score de base, pour la sous-métrique Attack Vector (AV) une nouvelle valeur est ajoutée : Physical. Celle-ci correspond à une attaque physique qui n’était pas présente dans la v2.
De même la sous-métrique User Interaction (UI) a été ajoutée. Elle prend en compte le fait que l’utilisateur doit avoir une interaction pour que la compromission soit effective (par exemple en cliquant sur un lien).
On peut comparer les deux versions en regardant ici et ici.
Pour finir, vous pouvez également retrouver ici la liste des potentielles futures améliorations pour la version 4 de CVSS.
Sources :
https://fr.wikipedia.org/wiki/Common_Vulnerability_Scoring_System
https://fr.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures
https://fr.wikipedia.org/wiki/Confidentialit%C3%A9
https://fr.wikipedia.org/wiki/Int%C3%A9grit%C3%A9_(cryptographie)
https://fr.wikipedia.org/wiki/Disponibilit%C3%A9
https://nvd.nist.gov/vuln-metrics/cvss/v2-calculator
https://nvd.nist.gov/vuln-metrics/cvss
https://www.acunetix.com/blog/articles/whats-new-in-cvss-version-3/