
Questo repository si concentra sulla creazione di un container per fornire un ambiente in cui sia facile sfruttare nginx tramite la tecnica Heartbleed, concentrandosi su:

Il problema CVE-2014-0160 si manifesta quando la libreria OpenSSL, che fornisce TLS, implementa la funzionalità heartbeat con una dimensione del buffer di 64KB, causando una lettura fuori dai limiti che provoca la divulgazione di informazioni sensibili dalla memoria del server.
La webapp sta elaborando messaggi sensibili che nginx mette in cache in memoria.
Possiamo sfruttare la vulnerabilità verificando se l'ambiente supporta TLS heartbeat.
openssl s_client -connect : -tlsdebug
Nota: le versioni moderne di OpenSSL potrebbero non supportare più il protocollo TLS heartbeat; utilizza una versione che lo supporti.
Heartbleed è un errore di lettura fuori dai limiti (out-of-bounds read) di natura casuale. Il server restituisce 64KB di memoria contigua.
L'header di un heartbeat (RFC6520) è 18 03 02 00
Usa docker build per creare il laboratorio heartbleed
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
La porta predefinita su cui la webapp è servita è la 8443.
Usa il payload heartbleed.py per testare.
Possiamo osservare che il payload restituisce il risultato sotto forma di hexdump.
Nel dump di esempio possiamo vedere la richiesta appena inviata e celle di memoria principalmente 0x00; poiché il payload è casuale, dobbiamo eseguirlo più volte per riuscire a leakare il risultato desiderato.
Possiamo provare a eseguire memory.py per inviare richieste a nginx e salvarle in memoria, ottenendo poi il risultato leakato come si vede in result.txt.
Poiché sappiamo che l'attaccante userà richieste heartbeat per leakare i messaggi.
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
Utilizza Snort IDS per rilevare le intrusioni.