Heartbleed es una de las peores vulnerabilidades a las que se ha enfrentado Internet. Descubierto en abril de 2014, este fallo de seguridad en OpenSSL permitía a cualquier usuario conseguir volcados de memoria de cualquier servidor, volcados en los que podía haber todo tipo de información personal, como, por ejemplo, contraseñas. La magnitud de este fallo de seguridad fue tal que, a día de hoy, aunque está más o menos controlado, sigue habiendo miles de servidores vulnerables conectados a Internet. Ahora, una nueva vulnerabilidad similar (en cierto modo), llamada Optionsbleed, vuelve a amenazar Internet, esta vez, por culpa del servidor web Apache.
Las conexiones HTTP pueden hacer llamadas a varios métodos (como GET y POST, los métodos más utilizados), pudiendo recurrir al método OPTIONS para ver una lista completa con los métodos que tenemos disponibles y podemos utilizar.
Tal como dice Hanno Bock en The Fuzzing Project, al enviar una petición OPTIONS a las webs más visitadas a nivel mundial según el ranking Alexa, la respuesta, en la mayoría de los casos, viene con un parámetro “Allow” y repetición de “HEAD”. Esto puede ser fruto de un desbordamiento de búfer, igual a como ocurría en una primera instancia con OpenSSL y que, finalmente, dio lugar a Heartbleed.
El experto de seguridad que ha dado con esta vulnerabilidad, se ha puesto en contacto con la mayoría de las compañías potencialmente vulnerables a este fallo, y tan solo una ha devuelto el correo, siendo, además, bastante reacia a colaborar en la investigación
Dentro del Alexa Top 1 Million, tan solo 466 webs se han encontrado como vulnerables a este fallo, aunque al no ser un fallo determinista, puede haber muchos más servidores vulnerables en la lista.
La vulnerabilidad ya ha sido registrada con el código CVE-2017-9798, aunque, de momento, se encuentra en fase de análisis por parte del NIST.
Si utilizamos Apache 2.2, este experto de seguridad nos facilita un parche temporal hasta que se analice la vulnerabilidad, se acepte y llegue un parche oficial de la mano de Apache.
Aunque la vulnerabilidad es similar en la técnica a Heartbleed, en realidad no es tan grave como esta, y es que, además de afectar a un pequeño número de hosts en todo el mundo, los volcados de memoria que devuelve son mucho menores a los que devolvía Heartbleed. Pero es un fallo real, un fallo del que hay que preocuparse e intentar solucionar cuanto antes, y es que, al final, los grandes ataques informáticos siempre vienen a través de estas pequeñas vulnerabilidades.
¿Cómo probarlo?
Simplemente con…
curl -D - -X OPTIONS http://localhost
Returns:
HTTP/1.1 200 OK
Date: Thu, 22 Jun 2017 08:40:07 GMT
Server: Apache
Allow: GET,HEAD,POST,OPTIONS,HEAD,HEAD
Content-Length: 0
Content-Type: httpd/unix-directory
Esto debería devolver UN solo “Allow: HEAD”.
Otro ejemplo:
for i in {1..100};
do curl -sI -X OPTIONS https://www.google.com/ | grep -i "allow:";
done
O con esta PoC script en Python.
Actualizaciones de productos
- Gentoo: Commit (2.2.34 / 2.4.27-r1 fixed), Bug
- NetBSD/pkgsrc: Commit
- Guix: Commit
- Arch Linux: Commit (2.4.27-2 fixed)
- Slackware: Advisory
- NixOS: Commit
- Debian: unfixed, Security Tracker
- NIST
- MITRE