Qu'est-ce que la vulnérabilité Heartbleed, son fonctionnement et sa correction ?

Qu'est-ce que la vulnérabilité Heartbleed, comment fonctionne-t-il et comment a-t-il été corrigé ?

Elsa T.
Calendar picto
3/2/2022
Clock picto
7 min

L'erreur à l'origine de la vulnérabilité Heartbleed remonte à une seule ligne de code dans OpenSSL, une bibliothèque de code source ouverte. Heartbleed est une vulnérabilité qui a été découverte en avril 2014; elle permettait aux attaquants d'avoir un accès sans précédent à des informations sensibles, et elle était présente sur des milliers de serveurs web, y compris ceux qui gèrent des sites majeurs comme Yahoo. Cet article détaille tout ce que vous devez savoir sur la vulnérabilité Heartbleed.

Qu’est ce que le bug Heartbleed ? 

Le bug Heartbleed est une grave vulnérabilité dans la bibliothèque logicielle cryptographique populaire OpenSSL. Cette faiblesse permet de voler les informations protégées, dans des conditions normales, par le cryptage SSL/TLS utilisé pour sécuriser l'Internet. SSL/TLS assure la sécurité et la confidentialité des communications sur l'internet pour des applications telles que le web, le courrier électronique, la messagerie instantanée (IM) et certains réseaux privés virtuels (VPN).


Le bug Heartbleed permet à quiconque sur Internet de lire la mémoire des systèmes protégés par les versions vulnérables du logiciel OpenSSL. Cela compromet les clés secrètes utilisées pour identifier les fournisseurs de services et pour crypter le trafic, les noms et mots de passe des utilisateurs et le contenu proprement dit. Les attaquants peuvent ainsi écouter les communications, voler des données directement auprès des services et des utilisateurs et se faire passer pour des services et des utilisateurs.


Comment fonctionne Heartbleed ?

Pour comprendre comment fonctionne la vulnérabilité Heartbleed (CVE-2014-0160), il faut connaître un peu le fonctionnement des protocoles TLS/SSL et la façon dont les ordinateurs stockent les informations en mémoire.


Un élément important des protocoles TLS/SSL est ce que l'on appelle un battement de cœur. Il s'agit essentiellement de la façon dont les deux ordinateurs communiquant l'un avec l'autre se font savoir qu'ils sont toujours connectés, même si l'utilisateur n'est pas en train de télécharger ou d'envoyer quoi que ce soit pour le moment. De temps en temps, l'un des ordinateurs envoie à l'autre un élément de données crypté, appelé "heartbeat request". Le second ordinateur répondra en envoyant exactement les mêmes données cryptées, prouvant ainsi que la connexion est toujours en place. La demande de battement de cœur contient des informations sur sa propre longueur.


Ainsi, par exemple, si vous lisez votre courrier Yahoo mais que vous n'avez rien fait depuis un certain temps pour charger plus d'informations, votre navigateur web peut envoyer un signal aux serveurs de Yahoo disant, en substance, "Vous allez recevoir un message de 40 Ko. Répète-moi tout ça". (Lorsque les serveurs de Yahoo reçoivent ce message, ils allouent une mémoire tampon - une région de la mémoire physique dans laquelle ils peuvent stocker des informations - d'une longueur de 40 Ko, en fonction de la longueur signalée de la requête Heartbeat. Ensuite, ils stockent les données cryptées de la demande dans cette mémoire tampon, puis les relisent et les renvoient à votre navigateur web.


La vulnérabilité Heartbleed est apparue parce que l'implémentation de la fonctionnalité Heartbeat d'OpenSSL manquait une protection cruciale : l'ordinateur qui recevait la demande Heartbeat ne vérifiait jamais que la demande était réellement aussi longue qu'elle le prétendait. Ainsi, si une demande indiquait une longueur de 40 Ko mais n'était en réalité que de 20 Ko, l'ordinateur récepteur mettait de côté 40 Ko de mémoire tampon, puis stockait les 20 Ko qu'il avait réellement reçus, puis renvoyait ces 20 Ko plus ce qui se trouvait dans les 20 Ko de mémoire suivants. Ces 20 Ko de données supplémentaires étaient des informations que l'attaquant avait extraites du serveur Web.


C'est la partie cruciale de l'opération. Même lorsqu'un ordinateur en a fini avec les informations, celles-ci persistent dans les tampons de mémoire jusqu'à ce que quelque chose d'autre vienne les écraser. Si vous êtes l'attaquant, vous n'avez aucun moyen de savoir à l'avance ce qui peut se cacher dans les 20 Ko que vous venez d'arracher au serveur, mais il existe un certain nombre de possibilités. Il peut s'agir de charabia ou de données inutiles. Vous pourriez obtenir des clés privées SSL, qui permettent de décrypter une communication sécurisée avec un serveur. Plus couramment, vous pourriez récupérer les noms d'utilisateur et les mots de passe qui ont été soumis aux applications et aux services fonctionnant sur le serveur, ce qui vous permettrait de vous connecter et d'obtenir un accès.



Quel est le Code à l’origine d’Heartbleed ?

L'erreur de codage à l'origine de Heartbleed peut être attribuée à une seule ligne de code :


memcpy(bp, pl, payload);


memcpy() est la commande qui copie les données. bp est l'endroit où elles sont copiées, pl est l'endroit d'où elles sont copiées et payload est la longueur des données copiées. Le problème est qu'il n'y a jamais de tentative de vérifier si la quantité de données dans pl est égale à la valeur donnée de payload.


Le plus ironique ici est qu'OpenSSL est un logiciel open source. N'importe qui pouvait consulter le code, et des centaines l'ont sans doute fait, mais personne n'a remarqué cette erreur de codage relativement élémentaire.


Quelle a été l’exploitation de Heartbleed ?

Il n'est pas certain qu'une exploitation réelle de la vulnérabilité Heartbeat ait eu lieu avant qu'elle ne soit largement médiatisée. Il est possible que certaines tentatives d'attaques détectées par des sociétés de sécurité dès 2013 aient cherché à exploiter la vulnérabilité - et certains pensent que les attaquants étaient des agences de sécurité gouvernementales.


Après avril 2014, lorsque la vulnérabilité a été rendue publique, les entreprises se sont empressées de mettre à jour leurs systèmes, mais les pirates ont réussi à l'exploiter dans plusieurs cas. Une attaque contre Community Health Systems, qui a volé des données de patients, a été attribuée à Heartbleed, tout comme le vol de centaines de numéros d'identification sociale à l'Agence du revenu du Canada.


Quels sont les correctifs déployés pour Heartbleed ?

Des correctifs ont été déployés pour OpenSSL dès l'annonce de la vulnérabilité et, selon toute vraisemblance, la plupart des serveurs anciennement vulnérables ont été mis à jour à ce stade. Cependant,  il peut être intéressant d’effectuer un test si vous n'êtes pas sûr de vous - il est toujours possible qu'un serveur important fonctionne depuis des années sans avoir été correctement mis à jour. 


  • Pour corriger la vulnérabilité Heartbleed, il faut passer à la dernière version d'OpenSSL. Des liens vers le code le plus récent existent sur le site Web d'OpenSSL.
  • Si un individu découvre qu'un serveur a été laissé vulnérable pendant un certain temps, il y a plus à faire qu'une simple mise à jour du code OpenSSL. Par exemple, il convient de changer les certificats SSL utilisés par les serveurs, car ils peuvent avoir été compromis sans laisser de trace. 
  • Enfin, plus basique mais toujours aussi important : les utilisateurs qui ont des comptes sur le système devraient changer leurs mots de passe.


Aujourd'hui, des années après la divulgation de la vulnérabilité Heartbleed, celle-ci est toujours présente dans de nombreux serveurs et systèmes. Les versions actuelles d'OpenSSL ont, bien entendu, été corrigées. Cependant, les systèmes qui n'ont pas (ou n'ont pas pu) effectuer la mise à niveau vers la version corrigée d'OpenSSL sont toujours affectés par la vulnérabilité et peuvent être attaqués.

Pour les attaquants, trouver la vulnérabilité Heartbleed est une récompense, plus facile à obtenir en automatisant le travail de recherche. Une fois que l'attaquant a trouvé un système vulnérable, il est relativement simple d'exploiter la vulnérabilité. Il peut alors accéder à des informations et/ou à des informations d'identification qu'il pourra utiliser pour lancer d'autres attaques.