El Blind Directory Listing que no le importa a Starbucks

servlet
Imagen 1. Starbucks

Hace una semana y media he empezado en la plataforma Hackerone, que para quien no la conozca es una plataforma en la que diversos sitios webs lanzan un programa de ‘Bug Bounty’, encuentras un ‘bug’ en su sitio web, lo reportas, y te pagan, aunque esto último a veces no pasa.

Como primer sitio web elegí Starbucks, y estuve 4 días en los cuales detecte 3 fallos, uno de ellos fue este que vengo a comentar: un Blind Directory Listing basado en una mala gestión de errores de .NET, usando el método OPTIONS de HTTP.

Hace mucho tiempo se detectó un fallo/característica en IIS en el cual haciendo uso de la expresión regular: *~1*/.aspx, en una web con framework ASP.NET, si los administradores no estaban gestionando correctamente los errores mostrados a los usuarios, se podía acabar sacando si un archivo estaba disponible en el servidor o no; por ejemplo, se hacia una petición al servidor como la siguiente:

http://www.webvulnerable.com/a*~1*/.aspx

Esto devolvía un error, si era un 404 Not Found, un archivo que empezaba por la letra existía en el servidor, si el error era diferente, 200 o 302, por ejemplo, el archivo no existía. Esto era así debido a que los servidores Windows hacían uso de una antigua característica denominada Short filename 8:3 por la cual se podía acceder a los ficheros por su nombre acortado en 6 caracteres. Si se iban probando diferentes peticiones, a base de los errores podías concluir el nombre de los ficheros. Al final, un Directory Listing, pero a ciegas.

Este fallo surgió por allá en el 2012, y tiempo después fue corregido, aunque no del todo, y por eso a día de hoy en servidores como los de Starbucks que usan IIS 7.5 y .NET 4.0 aun es posible explotar este fallo, pero realizando peticiones al servidor con el método OPTIONS, por ejemplo:

OPTIONS /Login/d*~1*/.aspx HTTP/1.1
 HOST: www.starbucks.com

Si existe un fichero que empiece por D, nos devolverá un 404 Not found, si no existe nos devolverá un 200. Luego podemos seguir probando:

OPTIONS /Login/de*~1*/.aspx HTTP/1.1
 HOST: www.starbucks.com

Que nos devolverá un 404 Not Found, indicándonos que un fichero que empieza por “de” existe en el servidor.

Después de unas cuantas pruebas, llegamos a que en el servidor existe un fichero llamado defaul~ (recordad que solo podemos saber los primeros seis caracteres), y no hay que ser muy listo, para entender que el fichero se llama default.aspx. Si se envían las peticiones HTTP a mano, puede ser una labor tediosa, pero con la ayuda de Python, por ejemplo, se puede automatizar este proceso fácilmente, y acabar sacando todos los ficheros existentes en el servidor.

starbuscks
Imagen 2. Fichero default.aspx encontrado gracias al Blind Directory Listing.

Después de reportar este fallo a Starbucks, lo primero que me dijeron fue: “Hey David, esto esta: “Out of Scope“, por lo tanto cerraremos tu reporte como No Aplicable. ” Sus razones fueron que en sus exclusiones había una linea que decía: ” OPTIONS / TRACE HTTP method enabled“, cuando mi reporte no se limitaba a eso, si no a que debido a una mala gestión de los mensajes de error y a tener activada la característica Short Filename 8.3 en sus servidores era posible hacer el Blind Directory Listing.  

Al final, acabé hablando con un conocido que está por hackerone y me comento que en algún caso también dijeron aquello de “Out of scope” para no pagar un SQL injection. Increíble.

Si tienes un servidor IIS, desactiva la característica Short Filename 8.3, estableciendo la siguiente clave del registro con el valor ‘1’:

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation

A no ser de que, como a Starbucks, no te importe que te hagan un Blind Directory Listing.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s