In effetti, si , i clienti sono vulnerabili. Finora l'attenzione si è concentrata sui server poiché sono molto più aperti allo sfruttamento. (Quasi) tutti possono connettersi a un server HTTP / SMTP / ... pubblico.
Questo blog descrive come funziona il bug (menziona dtls_process_heartbeat()
, ma tls_process_heartbeat()
è influenzato allo stesso modo). Questa funzione è utilizzata sia per client che per applicazioni server, quindi anche i client dovrebbero essere vulnerabili.
Secondo RFC 6520, i battiti del cuore non dovrebbero essere inviati durante le strette di mano. In pratica, OpenSSL accetta i battiti cardiaci subito dopo l'invio di un ServerHello (questo è ciò che fa ssltest.py di Jared Stafford). Dopo ulteriori test, ho scoperto che i server possono abusare dei client inviando un Heartbeat a destra dopo inviando anche ServerHello. Attiva lo stesso bug.
Un proof of concept può essere trovato nel mio repository all'indirizzo link . Dal suo README:
The following clients have been tested against 1.0.1f and leaked
memory before the handshake:
- MariaDB 5.5.36
- wget 1.15 (leaks memory of earlier connections and own state)
- curl 7.36.0 (https, FTP/IMAP/POP3/SMTP with --ftp-ssl)
- git 1.9.1 (tested clone / push, leaks not much)
- nginx 1.4.7 (in proxy mode, leaks memory of previous requests)
- links 2.8 (leaks contents of previous visits!)
- KDE 4.12.4 (kioclient, Dolphin, tested https and ftps with kde4-ftps-kio)
- Exim 4.82 (outgoing SMTP)
È stato dimostrato che 64 KiB di memoria (65535 byte) possono effettivamente essere restituiti. È stato anche dimostrato che i client ( wget
, KDE Dolphin, ...) possono perdere dati come richieste precedenti contenenti eventualmente password.