# Heartbleed

Heartbleed is de populaire naam van een lek in de cryptografische programmeerbibliotheek OpenSSL, die veelvuldig wordt gebruikt voor de implementatie van het Transport Laag Beveiligingsprotocol (EN: Transport Layer Security of TLS) voor onder meer webwinkels en routers. De bug werd geïntroduceerd in de software in 2012 en is opgenomen in de Common Vulnerabilities and Exposures databank onder de naam CVE-2014-0160. De oorzaak was een ontbrekende grenscontrole in het heartbeat-protocol die de verstuurder van een heartbeat-request toeliet data te stelen van de bevraagde partij via diens heartbeat-respons. In Nederland maakt onder andere de iDEAL-betaalmethode gebruik van de defecte softwarebibliotheek. Op 7 april 2014 werd de vondst van het lek gepubliceerd en werd een gecorrigeerde versie van de software beschikbaar gemaakt.

## Ontstaan

Het gat werd op 31 december 2011 geïntroduceerd door een programmeerfout van een van de bijdragers aan het project. Ook de reviewer miste deze fout en de nieuwe code kwam met fout en al in versie 1.0.1 (14 maart 2012) van de bibliotheek terecht.

## Werking
### Heartbeat protocol

Het heartbeat-protocol is het periodisch versturen van signalen gegenereerd door hardware of software met de bedoeling de normale werking van het systeem te indiceren, of voor het synchroniseren van bepaalde systeem onderdelen. Denk bijvoorbeeld aan een computer die periodiek controleert of de over wifi gekoppelde printer nog online is. Standaard zal een partij periodiek (ordergrote seconden) een heartbeat-request (verzoek) sturen naar de resource (bijvoorbeeld de router), na welke deze een heartbeat-respons (antwoord) zal sturen. Onder de OpenSSL bibliotheek bevatte zulk een verzoek-bericht een payload (typisch willekeurige data), en een indicator voor de lengte van die payload, genaamd payload-length (een 16-bit integer). De bedoeling is dat de ontvanger van het verzoek de payload in zijn geheel terugstuurt naar de verzoekende partij.

### Bug

Daar de payload-length specificeert wat de lengte is van de ingelezen payload, baseert het programma zich op dit getal om te bepalen hoeveel data van het geheugen wordt gelezen en in het antwoord wordt teruggestuurd. De werkelijke payload werd bij ontvangen van het bericht ingeschreven bovenaan in het geheugen. Indien echter het verzoek door derde geconstrueerd is en er een grotere payload-lengte wordt geïndiceerd dan werkelijk het geval is, zal het programma na het inlezen van de werkelijk bezorgde payload (aldus bovenaan in het geheugen, het geheugen wordt gelezen van boven naar onder) verder blijven lezen tot het net zoveel data heeft ingelezen als gedicteerd door de payload-length. Hierdoor wordt recente data uit het programma geheugen ingelezen en verstuurd naar de vragende partij via het heartbeat-antwoord. Algemeen zal de gelekte data geen nuttige informatie bevatten, maar het geheugen kan ook gebruikersnamen en wachtwoorden bevatten, en zelfs private keys van beveiligingscertificaten. Dit laatste maakt bijvoorbeeld man-in-the-middle-aanvallen mogelijk, waarbij een kwaadwillende website zich kan uitgeven voor een officiële website zonder dat de gebruiker dit merkt, of kan al het dataverkeer tussen twee partijen onderschept en ontcijferd worden..

## Ontdekking en nasleep

Het lek werd ontdekt door Neel Mehta van Google Security en op 7 april 2014 bekendgemaakt door het OpenSSL Project nadat een selecte groep grote organisaties, onder andere Google, Yahoo!, Facebook en Microsoft, eerder een kans had gekregen het lek op hun servers te dichten. Op 7 april is versie 1.0.1g van OpenSSL uitgebracht, waarin deze fout niet meer voorkomt. Veel populaire websites moesten daarna hun gebruikers adviseren hun wachtwoorden te veranderen.