De hecho, sí , los clientes son vulnerables. Hasta ahora, la atención se ha centrado en los servidores, ya que están mucho más abiertos a la explotación. (Casi) todos pueden conectarse a un servidor HTTP / SMTP / ... público.
Este blog describe cómo funciona realmente el error (menciona dtls_process_heartbeat()
, pero tls_process_heartbeat()
se ve afectado de la misma manera). Esta función se usa tanto para clientes como para aplicaciones de servidor, por lo que, de hecho, los clientes también deberían ser vulnerables
.
De acuerdo con RFC 6520, los latidos no deben enviarse durante los apretones de manos. En la práctica, OpenSSL acepta latidos del corazón justo después de enviar ServerHello (esto es lo que hace ssltest.py de Jared Stafford). Tras realizar más pruebas, descubrí que los servidores pueden abusar de los clientes enviando un Heartbeat justo después de también enviando el ServerHello. Dispara el mismo error.
Puede encontrar una prueba de concepto en mi repositorio en enlace . Desde su README:
Los siguientes clientes han sido probados contra 1.0.1f y se han filtrado
Memoria antes del apretón de manos:
- MariaDB 5.5.36
- wget 1.15 (pierde memoria de conexiones anteriores y estado propio)
- curl 7.36.0 (https, FTP / IMAP / POP3 / SMTP con --ftp-ssl)
- git 1.9.1 (clone / push probado, fugas no mucho)
- nginx 1.4.7 (en modo proxy, pierde memoria de solicitudes anteriores)
- enlaces 2.8 (¡se filtran contenidos de visitas anteriores!)
- KDE 4.12.4 (kioclient, Dolphin, https y ftps probados con kde4-ftps-kio)
- Exim 4.82 (SMTP saliente)
Se ha demostrado que se pueden devolver 64 KiB de memoria (65535 bytes). También se ha demostrado que los clientes ( wget
, KDE Dolphin, ...) pueden filtrar datos, como las solicitudes anteriores que posiblemente contengan contraseñas.