Probando la detección de la vulnerabilidad OpenSSL CCS Injection Attack (CVE-2014-0224)
Para los que nos dedicamos a realizar proyectos de Ethical Hacking , es bastante común usar algún software de análisis de vulnerabilidades , en mi caso, mi preferido es Nessus , sin embargo como cualquier software automatizado, este puede generar a lo que se denomina falsos positivos, es por ello que la labor del pentester es poder validar cada una de las vulnerabilidades que la herramienta nos reporta.
Dicho esto, entremos al tema, desde la aparición de Heartbleed este año, muchas marcas, fabricantes, desarrollos independientes, aplicaron y en algunos casos sacaron en un corto plazo las actualizaciones emitidas recomendadas por Openssl y reportadas en el CVE-2014-0160 , la cual se explota de la siguiente forma :
Han pasado varios meses, y lo que ha pasado desapercibido, es que existen nuevas vulnerabilidades descubiertas a partir de ello, llamémoslas “variantes” como las reportadas , CVE-2014-0224 , CVE-2010-5298 , CVE-2014-0076 , CVE-2014-0195 , CVE-2014-0198 , CVE-2014-0221 , CVE-2014-3470 , cada una un poco diferente que la otra pero todas involucradas con Openssl.
El hecho es que durante mis últimos proyectos de pentesing , he estado encontrando de manera muy recurrente en la vulnerabilidad , que Nessus reporta como “OpenSSL ‘ChangeCpherSpec’ MiTM”
Luego del bonito reporte de Nessus , viene la hora de hacer el trabajo real y realizar la prueba manual, así que tome la vulnerabilidad CVE-2014-0224 y me puse a investigar si existía una prueba de concepto.
Encontré mucha información teórica en donde indica que la vulnerabilidad, sin entrar mucho en detalle. radica en que al enviar un paquete CSS o “ChangeCipherSpec” antes de iniciar la session SSL o intercambio de llaves SSL (handshake) la llave que se genera, es una llave débil y puede ser fácil de adivinar, por tanto susceptible a ataques de hombre en el medio.
Hay muchas entradas de blog , documentación y discusiones sobre esto, pero aquí me gustaría enfocarme en la forma de detectar la vuln, en la implementación OpenSSL.
Encontré dos formas de probar la detección , una vía un script para NMAP publicada aquí : https://gist.github.com/rcvalle
Y otra un script desarrollado por Craig Young la cual es un script en python que permite la detección de la vulnerabilidad CVE-2014-0224. La cual es posible descargar desde aquí: https://github.com/Tripwire/OpenSSL-CCS-Inject-Test
El funcionamiento es muy sencillo , básicamente es ejecutarlo de la siguiente forma :
#python OSSL_CCS_InjectTest2.py nombrededominio
Script por defecto viene para validar servicios en HTTPS (443) como es normal , sin embargo sabemos que existen implementaciones de SSL en otros servicios como POPS , IMAPS , FTPS por citar ejemploS, así que haciendo unas modificaciones , para el puerto 995 , quedaria de la siguiente forma:
Una vez modificado , si el resultado es positivo , tendremos lo siguiente :
Como vemos la herramienta nos muestra que el objetivo es vulnerable , en TLS1 y SSLv3, Para solucionar esto es recomendable realizar las siguientes actualización dependiendo la versión de OpenSSL
OpenSSL 0.9.8 SSL/TLS actualizar a 0.9.8za.
OpenSSL 1.0.0 SSL/TLS actualizar a 1.0.0m.
OpenSSL 1.0.1 SSL/TLS actualizar a 1.0.1h.
Es claro que no todo se ha acabado con Heartbleed y su parche , así que será necesario estar atento a lo nuevo que se viene alrededor de Openssl.
Eso es todo, espero les sirva
Juan Oliva
No conocía el script de Craig Young, me ha sido útil en un pentest. Muchas gracias 🙂