La vulnérabilité Heartbleed

Qu’est-ce que Heartbleed?

Le bogue Heartbleed est une vulnérabilité découverte par le spécialiste de la sécurité Codenomicon defensics, dans la librairie de cryptographie OpenSSL, de la version 1.0.1 à la version 1.0.1f, et utilisée par de très nombreux serveurs web dans le monde.
Heartbeat est référencée par le code CVE-2014-0160 par Mitre.

Une erreur de programmation classique, l’oubli de vérifier les limites d’une variable, se trouve dans le code qui gère le « battement de cœur » TLS (transport layer security protocols ). Ce signal régulier vise à garder des connexions ouvertes même quand aucune donnée n’est transmise.

Un serveur P(irate) envoie à un serveur V(ictime) des données aléatoires ainsi que la longueur des données utiles transportées L. Le serveur V doit renvoyer exactement les mêmes données au serveur P.
Le serveur V alloue une mémoire tampon de taille L pour préparer sa réponse, et copie les informations envoyées par P dedans.

L’erreur, c’est que le serveur V ne vérifie pas que L correspond bien à la taille des données aléatoires envoyées par A. En envoyant un L plus grand que la taille des données réellement envoyées le serveur P reçoit en retour une partie de la mémoire privée du serveur V. Comme L est une valeur sur 2 octets, le serveur pirate obtient jusqu’à presque 64 Ko de données volées. Et rien ne l’empêche de recourir à plusieurs requêtes pour obtenir des multiples de 64 Ko d’informations.

Malheureusement, c’est dans cette partie de la mémoire vive qu’OpenSSL stocke la clé privée du serveur, les clés de sessions et des données confidentielles comme des mots de passe.
Ces données permettent potentiellement au pirate non seulement de décrypter les sessions TLS en cours, mais aussi des sessions terminées. Qui plus est, il peut se faire passer pour le serveur authentique.

Des informations de sécurité Yahoo dérobées. Source: Mark Loman
Des informations de sécurité Yahoo dérobées. Source: Mark Loman

Que faire ?

Les administrateurs de serveurs peuvent vérifier s’ils sont vulnérables avec les outils suivant:

Heartbleed test

ssltest.py (nécessite Python 2.6 ou supérieur)

Si c’est le cas ils doivent appliquer le correctif d’OpenSSL, ce qui ne pose aucun problème en pratique. L’alternative est de désactivé le heartbeat en recompilant la librairie avec l’option : -DOPENSSL_NO_HEARTBEATS.

Un outil de Codenomicon, SafeGuard, permet de détecter cette vulnérabilité, tout comme celle de GnuTLS dont nous vous avions informé le 5 mars 2014, et le bogue SSL/TLS chez Apple, dont nous vous avions informé le 24 février 2014.

 

Étendue du problème

La vulnérabilité touche notamment les deux serveurs web Unix les plus utilisés: Apache et nginx qui ont une part de marché de 66 %.

Codenomicon defensics a comme il se doit alerté les programmeurs d’OpenSSL en secret pour leur donner le temps de préparer un correctif avant de prévenir le public.

Si la plupart des organisations comme Yahoo appliquent le correctif sans délai, on peut craindre qu’au moins 30 % de serveurs soient toujours vulnérables.

L’utilisateur final comme vous et moi ne peut influencer ce processus. Il peut en revanche modifier les mots de passe des services les plus critiques, comme la banque en ligne. À noter que le changement régulier des mots de passe, qui doivent être forts*, est de toute façon toujours recommandée.

* Un mot de passe fort contient au minimum 8 caractères (15-16 est une longueur acceptée par la plupart des services) mélangeant des minuscules, des majuscules, des caractères « spéciaux » comme #$*%. Il ne doit pas s’agir de dérivées de noms, car ceux-ci sont vulnérables à une attaque par dictionnaire.