Failles et vulnérabilités du Web

La faille Heartbleed, disséquée.

Blog Failles et vulnérabilités du Web La faille Heartbleed, disséquée.
0 comments

Heartbleed en 2 mots

C’est énorme.

Heartbleed en un peu plus de mots

Heartbleed prends son nom gentiment parodié du Heartbeat, de là où vient la faille, cette importante faille de sécurité qui a été découverte le 8 avril 2014.

C’est dans le dispositif SSL (utilisé par énormément de sites et de services dans le monde) que se joue cette faille qui permet à un hacker, dans certaines conditions, d’extraire des mots de passe, clés secrètes, et autres informations confidentielles censées rester privées.

Comment fonctionne cette faille

Sans entrer dans un détail profond qui vous pourrait vous permettre de l’exploiter – le but ici est d’informer n’oublions pas – voici simplement comme fonctionne la faille qui utilise un heartbeat.

Le heartbeat ou battement de coeur n’est autre qu’un ping/pong d’une minuscule requête qui demande si nous sommes toujours bien connectés au serveur et non pas en session expiré, ou même serveur hors service.

  • Votre navigateur envoie une requête au serveur : “Serveur, je suis Julio, es-tu là ? Si oui, réponds moi “ACK” (ça fait 3 lettres).”
  • Le serveur reçoit la requête et la traite : [Julio:ID21][Session:31fad3cb1acdbbadbef32efsdecf3b2c1][Demande:status][Status:OK][Clé privée de transation:c3ef5c4a5e5c3b1ce3ef2fa3c3b39e4d][Hash du mot de passe:cc3b1ce3eabcefa9456f2fa3c3b39e4d][Demandé:3 lettres:"ACK"][Envoyé:"ACK"].
  • Le serveur vient de garder en mémoire, une sorte de log de votre requête et de sa réponse, vous n’avez reçu que “ACK”, comme prévu, tout va bien pour vous.

Jusque là, rien de spécial, nous venons de faire 1 battement de coeur, 1 heartbeat. Ajoutons un peu de sang maintenant …

  • Vous vous prenez pour un hacker et indiquez à votre navigateur une nouvelle donnée, il envoie maintenant une autre requête au serveur : “Serveur, je suis Julio, es-tu là ? Si oui, réponds moi “ACK” (ça fait 250 lettres).” (le tricheur, 250 !)
  • Le serveur reçoit la requête et la traite : [Julio:ID21][Session:31fad3cb1acdbbadbef32efsdecf3b2c1][Demande:status][Status:OK][Clé privée de transation:c3ef5c4a5e5c3b1ce3ef2fa3c3b39e4d][Hash du mot de passe:cc3b1ce3eabcefa9456f2fa3c3b39e4d][Demandé:250 lettres:"ACK"][Envoyé:"ACK[Admin:ID1][Session:d3cb1acdbbadbef32efsdecf98ce3b2c1][Demande:status][Status:OK][Clé privée de transation:5c4a5e5c3b1ce3ef2fa3c3b39e498fcd][Hash du mot de passe:b1ce3eabcedfa9456f2fa3c3b398c9e4d][Demandé:3 lettres:"ACK"][Envoyé:"ACK"][Marie:ID84]"].
  • Le serveur a débordé dans sa mémoire, il a lu les logs d’autres requêtes et leur réponse, vous avez reçu “ACK”, suivi de 247 autres caractères.

Vous avez compris ? En demandant plus de lettres qu’on n’en envoie réellement, le serveur nous renvoie tout de même le nombre de caractères demandés, quitte à déborder dans sa mémoire et nous renvoyer d’autres informations confidentielles, venant de tout type de demandes, d’utilisateurs, de sessions, etc

Nous avons donc reçu “ACK” mais aussi le log de la demande précédente, celle de l’utilisateur “ADMIN” et même un morceau de l’utilisateur “MARIE”. La limite de caractères renvoyés semble être de 64000 … largement suffisant.

 

Protégez-moi !

Même avec votre navigateur à jour, nous n’avez de toute façon rien à faire de ça. Votre site web est à jour ? Même chose, rien à faire sur le site. C’est au niveau du serveur que cela se passe.

Vous devez, si vous avez votre propre serveur, mettre à jour la librairie SSL. Si vous êtes sur un mutualisé, c’est à votre hébergeur de s’en occuper.

Ensuite, vous pouvez toujours tester si vous êtes (encore) vulnérable : http://filippo.io/Heartbleed/

0 comments