Notas de lanzamiento de Django 1.4.2

17 de octubre de 2012

Este es el segundo lanzamiento de seguridad en la serie Django 1.4.

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.

Cambios incompatibles hacia atrás

  • Los argumentos del constructor de la clase GenericIPAddressField han sido adaptados para coincidir con los de todos los demás campos de modelo. Los dos primeros argumentos de palabra clave ahora son verbose_name y name.

Otros correcciones de errores y cambios

  • Sobreescribir solo el parser HTML para las versiones adecuadas de Python (#18239).

  • Se han agregado argumentos de lote a qs.bulk_create() (#17788).

  • Se ha corregido una pequeña regresión en los filtros administrativos donde las fechas mal formateadas pasadas como parámetros de URL causaban un ValidationError no gestionado (#18530).

  • Se ha corregido un bug de bucle infinito cuando se accede a permisos en plantillas (#18979)

  • Se han solucionado algunas compatibilidades con Python 2.5

  • Se ha corregido un problema con nombres de archivo citados en el encabezado Content-Disposition (#19006)

  • Se ha hecho que la opción de contexto en las etiquetas trans y blocktrans acepte literales envueltos en comillas simples (#18881).

  • Numerosas mejoras y correcciones en la documentación.