Notas de lanzamiento de Django 1.3.4

17 de octubre de 2012

Este es el cuarto lanzamiento en la serie de Django 1.3.

Envenenamiento del encabezado Host

Algunas partes de Django – independientes de las aplicaciones escritas por los usuarios finales – utilizan URLs completas, incluyendo el nombre de dominio, que se generan a partir del encabezado HTTP Host. Algunos ataques contra esto están más allá del control de Django y requieren que el servidor web esté correctamente configurado; la documentación de Django ha contenido notas sobre tal configuración durante algún tiempo.

Sin embargo, la propia interpretación de Django de los encabezados Host sigue siendo vulnerable, como se informó recientemente. La interpretación del encabezado Host en Django 1.3.3 y Django 1.4.1 – específicamente, django.http.HttpRequest.get_host() – estaba manejo incorrectamente la información de usuario/contraaseña en el encabezado. Por lo tanto, por ejemplo, el siguiente encabezado Host sería aceptado por Django cuando se ejecutara en validsite.com:

Host: validsite.com:random@evilsite.com

Con esto, un atacante puede causar que partes de Django – particularmente la mecánica de restablecimiento de contraseña – generen y muestren URLs arbitrarias a los usuarios.

Para remediar esto, se está modificando la interpretación en HttpRequest.get_host(); los encabezados Host que contienen contenido potencialmente peligroso (como pares usuario/contraaseña) ahora levantan la excepción django.core.exceptions.SuspiciousOperation.

Los detalles de este problema se publicaron inicialmente en línea como un avisado de seguridad.