Hoy que me han dejado algo de tiempo para leer y ponerme al día, he estado leyendo entre otras cosas, este magnífico paper de la presentación de Robert Hansen y Josh Sokol en Blackhat, sobre cómo HTTPS no es bastante para garantizar la confidencialidad de la información de un sitio web. En el paper, y después en este post, se menciona un detalle que llama la atención: es posible hacer una denegación de servicio, no a un sitio web entero, sino a una porción del mismo nada más.
¿Cómo?. Inyectando una cookie demasiado grande en el navegador del usuario. En el caso de que un sitio web reciba una cookie demasiado grande... ¿qué puede pasar?. Algunas opciones posibles para que se dé este DoS son:
- el valor de la cookie malformada, una vez recibido por el servidor de web, es almacenada en una o más variables en el aplicativo web correspondiente. Podría darse el caso de que esta variable tenga un límite de tamaño, y por tanto que fuera posible realizar un overflow. Y por tanto, ser posible una denegación de servicio. Esta posibilidad depende, por supuesto, de cómo se haga la gestión de memoria a nivel de sistema y en el entorno de ejecución correspondiente. Aquí va un ejemplo (extraído de la guía Owasp Testing) , en que se usa esta posibilidad sobre un aplicativo web CGI (o sea, tecnológicamente más viejo que la tos)
- en tecnologías más modernas, podría ocurrir que la cookie de marras, al tener un valor malformado, no fuera tratada adecuadamente por la lógica del programa y se disparara una excepción no controlada (el resto os lo podéis imaginar)
- el servidor de web recibe una petición HTTP más grande de lo que puede tratar, y la rechaza
La idea, entonces, es inyectar una cookie en el navegador del usuario (con un xss, por ejemplo), lo suficientemente grande como para que se rechace la petición HTTP, asignándole como ruta una parte determinada del sitio web atacado (/logout.aspx, por ejemplo). ¿Cuál es el tamaño máximo que puede tener una cookie, en un navegador web?. ¿Cuántas cookies puedo tener por dominio?. El RFC 2965 dice que un navegador debería ("should") permitir al menos 20 cookies por dominio, con un tamaño máximo garantizado para cada una de 4 KB al menos. Internet Explorer parece que cumple de sobra, de acuerdo a este post de IEBlog de 2007.
Con lo cual, pues parece que este tipo de DoS es perfectamente posible, aunque cantará muchísimo en los logs del servidor de web, proxies, IDS, etc. No he contado nada que no se supiera ya, pero espero que la información de este post sirva: yo mismo no me sabía los detalles de los tamaños, etc, y me ha costado lo mío buscarlos. Cualquier aportación (particularmente si hay erratas), es bienvenida. Slds!
Si te gustó esta entrada, quizás quieras suscribirte al blog por RSS...