Desde 2014 se sabe que los segmentos de ruta contribuyen a Reflected File Download attacks. Supongamos que tenemos una API vulnerables que refleje lo que enviamos a ella (la URL fue real, al parecer, ha sido arreglado):
https://google.com/s?q=rfd%22||calc||
{"results":["q", "rfd\"||calc||","I love rfd"]}
Ahora bien, esto es inofensivo en un navegador, ya que es JSON por lo que no va a ser prestados pero el navegador ofrecerá descargar la respuesta como un archivo. Ahora aquí están los segmentos de trazado venido a ayudar (para el atacante):
https://google.com/s;/setup.bat;?q=rfd%22||calc||
Todo entre punto y coma (;/setup.bat;
) será no enviaron al servicio web, pero en cambio el navegador lo interpretará como el nombre del archivo. .. para guardar la respuesta de la API. Ahora, un archivo llamado setup.bat
se descargará y ejecutará sin preguntar sobre los peligros de ejecutar archivos descargados de Internet (porque contiene la palabra "setup"
en su nombre). El contenido se interpretará como archivo por lotes de Windows y se ejecutará el comando calc.exe
.
Prevención:
- desinfectar la entrada de su API (en este caso sólo deberían permitir caracteres alfanuméricos); escaparse no es suficiente
- agregar
Content-Disposition: attachment; filename="whatever.txt"
en las API que no se van a procesar; Google faltaba la parte filename
que en realidad hizo el ataque más fácil
- añadir
X-Content-Type-Options: nosniff
cabecera a las respuestas del API
En resumen, reservado, pero para nada en particular. Lo usamos para codificar cierta información en consultas RESTful. –
Gracias por el ejemplo, eso realmente ayuda. – Nicole
¿Alguien puede compartir un ejemplo de esto utilizado en servicios web de palabras reales? – Winny