SpookySSL : tout savoir sur CVE-2022-3602 et CVE-2022-3786

CVE OpenSSL 3
Maxime ALAY-EDDINE
novembre 02, 2022

SpookySSL est le nom de code donné aux CVE-2022-3602 et CVE-2022-3786, publiées le 1er novembre 2022 par OpenSSL. Ces vulnérabilités sont d’un niveau de sévérité élevé, mais ne nécessitent pas de déclencher une cellule de crise dédiée en raison d’une exploitation particulièrement difficile pour un attaquant.

Avec cet article, découvrez comment SpookySSL fonctionne, et nos recommandations pour détecter et neutraliser ces vulnérabilités.

SpookySSL (CVE-2022-3602 et CVE-2022-3786) : deux vulnérabilités publiées le 1er novembre 2022 avec une sévérité élevée

Mardi 25 octobre 2022, la liste de diffusion d’OpenSSL a annoncé la sortie d’une nouvelle mise à jour de sécurité pour la branche 3.0 avec OpenSSL version 3.0.7.

Cette mise à jour a été annoncée pour une publication le mardi 1er novembre 2022.

Lors de la publication du 25 octobre, l’équipe OpenSSL a précisé que cette mise à jour concernait des problèmes critiques de sécurité.

Extrait de l'annonce OpenSSL pour SpookySSL CVE-2022-3602 et CVE-2022-3786
Extrait de l’annonce d’OpenSSL sur la liste de diffusion officielle

Le mardi 1er novembre 2022, OpenSSL a ensuite publié une alerte de sécurité avec 2 vulnérabilités publiées dans la base CVE : CVE-2022-3602 et CVE-2022-3786, qui concernent des dépassements de tampon (buffer overflow).

Bien qu’indiquée comme critique dans le message du 25 octobre, le niveau de la CVE-2022-3602 a cependant était revu à la baisse. Ainsi, les CVE-2022-3602 et CVE-2022-3786 n’ont qu’une sévérité élevée.

Ces CVE ont reçu le nom de SpookySSL par le Nationaal Cyber Security Centrum (NCSC-NL).

SpookySSL (CVE-2022-3602 et CVE-2022-3786) est difficile à exploiter sur un système moderne

Le niveau des vulnérabilités SpookySSL (CVE-2022-3602 et CVE-2022-3786) a été revu à la baisse par l’équipe OpenSSL suite à des échanges avec les éditeurs des principaux systèmes d’exploitation du marché. En effet, les systèmes d’exploitation modernes implémentent nativement des mécanismes de protection contre les dépassements de tampon, ce qui réduit fortement le risque d’une attaque fructueuse à base de ces CVE.

Dans ce cadre, OpenSSL a réduit la sévérité de l’alerte de sécurité du 1er novembre 2022 pour la faire passer de « critique » à « élevée ».

De plus, OpenSSL 3 n’est que très peu utilisé : pour la majorité des entreprises, ces vulnérabilités CVE-2022-3602 et CVE-2022-3786 ne concerneront que très peu d’équipements.

Ces vulnérabilités sont donc peu présentes et très difficiles à exploiter dans un système d’information moderne.

Qu’est-ce que OpenSSL ?

OpenSSL est un logiciel développé par la communauté internationale du même nom pour fournir des outils de cryptographie et de communication sécurisée. OpenSSL est un des logiciels les plus utilisés dans le monde : en 2014, deux tiers des sites Internet accessibles utilisaient cette technologie.

OpenSSL fournit notamment un outil en ligne de commande nommé openssl, utilisé pour générer des clés privées et clés publiques, des certificats X.509, et faire des tests sur les protocoles SSL et TLS.

Cette technologie étant très répandue et très connue, chaque vulnérabilité qui l’affecte a tendance à être très fortement relayée par la presse généraliste.

Comment fonctionnent les CVE-2022-3602 et CVE-2022-3786 (SpookySSL) qui affectent OpenSSL 3 ?

Qu’est-ce que Punycode ?

Les vulnérabilités CVE-2022-3602 et CVE-2022-3786 (SpookySSL) sont liées à la compatibilité d’OpenSSL avec ce que l’on appelle le Punycode ou « code chétif ». Le Punycode est un mécanisme qui permet d’encoder certains caractères Unicode via des caractères ASCII. Le Punycode est particulièrement utilisé pour encoder des noms de domaine internationalisés. Par exemple vulnérabilités devient en Punycode vulnrabilits-eebh et le nom de domaine vulnérabilités.fr devient de la même manière xn--vulnrabilits-eebh.fr.

SpookySSL (CVE-2022-3602 et CVE-2022-3786) est liée à l’interprétation de Punycode par OpenSSL lors de la lecture d’un certificat X.509

Les CVE-2022-3602 et CVE-2022-3786 sont liées à l’interprétation de Punycode par OpenSSL. En effet, puisque OpenSSL est utilisé notamment pour faire des échanges avec SSL et TLS, OpenSSL peut être utilisé pour faire des vérifications sur des certificats X.509.

Or, un certificat X.509 comporte des champs nommés « Subject Alternative Name » et « Issuer Alternative Name », qui permettent d’associer à ce certificat des courriels avec un nom de domaine internationalisé (RFC 8398).

L’interprétation de ces courriels internationalisés par OpenSSL peut, dans certaines configurations, entraîner une corruption de la mémoire, et provoquer une exécution de code à distance ou un déni de service.

Un attaquant peut donc créer un certificat X.509 avec un courriel internationalisé spécifiquement créé pour provoquer l’exploitation de ces vulnérabilités

L’exploitation de ces vulnérabilités CVE-2022-3602 et CVE-2022-3786 passe par la création de certificats dont le Subject Alternative Name (champ subjectAltName) ou dont le champ nameConstraint utilise une adresse email internationalisée avec une syntaxe spécifiquement conçue pour provoquer un dépassement de tampon sur OpenSSL.

La société DataDog a réussi à reproduire cette situation dans un environnement contrôlé, et a pu provoquer un crash sur Windows avec OpenSSL 3.0.6.

Les CVE SpookySSL (CVE-2022-3602 et CVE-2022-3786) affectent aussi bien les serveurs que les clients qui utilisent OpenSSL 3

Cette interprétation du Punycode peut se produire aussi bien sur un serveur que sur un client : en effet, dans une communication utilisant un certificat X.509, ce certificat peut être présenté par un client et être vérifié par le serveur, ou présenté par un serveur et être vérifié par le client.

Néanmoins, l’authentification d’un client par certificat X.509 est plus rarement utilisée sur le marché, et le scénario le plus probable ici porte donc sur un serveur qui présente un certificat X.509 préparé par un attaquant, et exposé à des clients qui rencontreront le dépassement de tampon lors des appels au serveur malveillant.

Ces CVE sur OpenSSL 3 sont liées au fichier crypto/punycode.c du projet OpenSSL

Les correctifs publiés par la communauté du projet OpenSSL montrent qu’un seul fichier a été modifié : crypto/punycode.c.

Extrait du correctif apporté pour CVE-2022-3786 SpookySSL
Extrait du correctif apporté pour CVE-2022-3786 (commit 680e65b94c916af259bfdc2e25f1ab6e0c7a97d6)
Extrait du correctif apporté pour CVE-2022-3602 SpookySSL
Extrait du correctif apporté pour CVE-2022-3602 (commit 3b421ebc64c7b52f1b9feb3812bdc7781c784332)

L’analyse de ces correctifs montre aussi la difficulté de gérer de manière sécurisée la mémoire pour les projets reposant sur du code bas niveau comme le C ou le C++, même pour des projets aussi importants et reconnus comme OpenSSL.

Quels sont les systèmes affectés par SpookySSL (CVE-2022-3602 et CVE-2022-3786) ?

Les CVE OpenSSL 3 référencées sous le nom SpookySSL ou CVE-2022-3602 et CVE-2022-3786 affectent les versions 3.0.0 à 3.0.6 incluses d’OpenSSL

Les versions d’OpenSSL affectées sont les versions 3.0.0 à 3.0.6 incluses. Les branches 1.1.1 et 1.0.2, qui sont aujourd’hui les plus utilisées sur le marché, ne sont pas affectées.

L’Agence Nationale de la Sécurité des Systèmes d’Information (ANSSI) a publié un avis sur le sujet référencé sur le code CERTFR-2022-AVI-985.

Existe-t-il une liste complète des produits affectés par SpookySSL (CVE-2022-3602 et CVE-2022-3786) ?

Le NCSC-NL maintient un dépôt GitHub avec la liste des produits vulnérables. Le NCSC-NL fournit également des scripts de recherche des bibliothèques OpenSSL potentiellement vulnérables. Néanmoins, gare aux faux-positifs avec cette méthode : Ubuntu 22.04 par exemple propose un micropatch 3.0.2-0ubuntu1.7 qui est donc bien en version 3.0.2, mais qui corrige SpookySSL (CVE-2022-3602 et CVE-2022-3786).

Cyberwatch recommande ainsi de surtout se rapprocher des avis de chaque éditeur pour vérifier si le produit étudié est vulnérable ou non, sachant que beaucoup de produits utilisent plutôt OpenSSL en branche 1.1.X ou 1.0.X et ne sont donc pas affectés par SpookySSL.

Cyberwatch fournit la liste des différents avis des principales distributions du marché dans son encyclopédie des vulnérabilités, et en donne un extrait ci-dessous :

De plus, Cyberwatch Vulnerability Manager détecte ces vulnérabilités sur vos machines depuis la date de publication des différents avis de sécurité, soit le 1er novembre 2022. Aucune action n’est requise de la part de nos clients.

Détecter SpookySSL CVE-2022-3602 et CVE-2022-3786 avec Cyberwatch Vulnerability Manager
Détection automatique de SpookySSL par Cyberwatch Vulnerability Manager

Comment neutraliser les CVE-2022-3602 et CVE-2022-3786 ?

Si vous disposez d’une version d’OpenSSL affectée, Cyberwatch vous recommande d’installer les mises à jour de sécurité disponibles.

Cyberwatch Vulnerability Manager vous permet également de déployer les correctifs nativement depuis son interface.

Corriger SpookySSL CVE-2022-3602 et CVE-2022-3786 avec Cyberwatch Vulnerability Manager
Déploiement des correctifs de sécurité disponibles depuis l’interface de Cyberwatch Vulnerability Manager

N’hésitez pas à nous demander une démonstration via le formulaire dédié !

Vous avez des questions ?

Vous souhaitez une démonstration ?

Contactez-nous et nos experts reviendront vers vous sous 24h.

Votre demande