Une vulnérabilité "oracle de remplissage" sur OpenSSL

Date de publication :

Les chercheurs Juraj Somorovsky, Robert Merget et Nimrod Aviram, aidés par l’investigation des développeurs Steven Collison et Andrew Hourselt, ont communiqué le 10 décembre 2018 une vulnérabilité concernant OpenSSL. Cette vulnérabilité a fait l’objet d’un bulletin de la part d’OpenSSL publié le 26 février 2019 qui la considère comme modérée. Un attaquant pourrait l’exploiter afin de déchiffrer les données protégées par les protocoles SSL/TLS. Cette attaque à distance serait assez compliquée à mettre en œuvre, mais nécessite un niveau d’authentification faible sur l’application cible. L’impact estimé sur la confidentialité et l’intégrité des données est élevé en cas d’exploitation de la vulnérabilité.

OpenSSL est logiciel fournissant des outils de chiffrement pour sécuriser les communications informatiques contre les écoutes. Il est composé principalement de deux bibliothèques ; « libcrypto » qui fournit les algorithmes cryptographiques et « libssl » qui implémente le protocole de communication Transport Layer Security (TLS) ainsi que son prédécesseur (SSL). Le logiciel est utilisable principalement à l’aide d’une interface en ligne de commande openssl.

Les produits affectés sont tous ceux qui utilisent les protocoles SSL et TLS implémentés par OpenSSL avec les versions antérieures à 1.0.2r et pouvant avoir des dysfonctionnements au niveau de certains appels. Cependant, cette vulnérabilité n’affecte pas les versions 1.1.1 et 1.1.0.

Détails techniques :

En cryptographie, les messages texte en clair de longueur variable doivent souvent être étendus pour être compatibles avec la primitive cryptographique sous-jacente. L’attaque repose sur la présence d’un « oracle de remplissage » (padding oracle). qui répond librement aux questions sur le fait qu’un message est correctement rempli ou non.

CVE-2019-1559 [CVSS v3 5.9] : La vulnérabilité provient d’une erreur de format lors de la réponse d’OpenSSL à une application. Cette erreur de format peut ensuite être utilisée pour déchiffrer les données. En effet, lorsqu’une application rencontre une erreur dans un protocole qu’elle utilise et qu’elle effectue ensuite 2 fois la requête SSL_shutdown (pour fermer la connexion TLS/SSL et être notifiée) alors OpenSSL peut avoir différentes réponses en fonction du rembourrage (padding).

Ainsi, si l’application reçoit un enregistrement de 0 octet avec un rembourrage invalide et qu’elle le compare à un enregistrement de 0 octet cette fois-ci avec une adresse MAC invalide alors un attaquant peut effectuer une attaque d’oracle de remplissage et trouver la clé de chiffrement.

Des correctifs ont été publiés par OpenSSL et sont disponibles au téléchargement. Du fait de leur criticité, les utilisateurs sont invités à appliquer les mises à jour le plus rapidement possible. 

Informations

La faille est activement exploitée :

Un correctif existe :

Une mesure de contournement existe :

Risques

Risques

  • Atteinte à la confidentialité des données

Criticité

  • Score CVSS : 5.90 (Score de la vulnérabilité la plus critique)

Existence d’un code d’exploitation de la vulnérabilité

  • Il n’existe pas de code d’exploitation de la vulnérabilité.

Composants & versions vulnérables

  • La vulnérabilité affecte les versions antérieur à OpenSSL 1.0.2r mais n’affecte pas les versions 1.1.1 et 1.1.0

CVE

  • CVE-2019-1559

Solutions ou recommandations

Mise en place de correctif de sécurité

  • La vulnérabilité est corrigée dans la version OpenSSL 1.0.2r

Solution de contournement

  • Pour que la vulnérabilité soit exploitable, il est nécessaire que le chiffrement soit « non authentifiés ». En effet, pour contourner le problème il est possible d’utiliser un chiffrement authentifié avec données associées (ou AEAD pour authenticated encryption with associated data). Une autre condition est que l’application doit appeler SSL_shutdown 2 fois, ce qui n’est normalement pas autorisé.