Notas de lanzamiento de Django 1.10.3

1 de noviembre de 2016

Django 1.10.3 resuelve dos problemas de seguridad y varios errores en la versión 1.10.2.

Usuario con contraseña hardcoded creado cuando se ejecutan pruebas en Oracle

Cuando se ejecutan pruebas con una base de datos Oracle, Django crea un usuario temporal de la base de datos. En versiones anteriores, si no se especifica manualmente la contraseña en el diccionario de configuración TEST de la base de datos, se utiliza una contraseña hardcoded. Esto podría permitir a un atacante con acceso a la red al servidor de bases de datos que conecte.

Este usuario suele eliminarse después de completar el conjunto de pruebas, pero no cuando se usa la opción manage.py test --keepdb o si el usuario tiene una sesión activa (como la conexión de un atacante).

Un password aleatorio se utiliza ahora para cada ejecución de pruebas.

Vulnerabilidad de reencaminamiento DNS cuando DEBUG=True

Las versiones antiguas de Django no validan el encabezado Host contra settings.ALLOWED_HOSTS cuando settings.DEBUG=True. Esto las hace vulnerables a un ataque de reencaminamiento DNS.

Si bien Django no envía un módulo que permite la ejecución de código remoto, esto al menos es un vector de scripting entre sitios, lo cual podría ser bastante grave si los desarrolladores cargan una copia de la base de datos de producción en desarrollo o conectan a algunos servicios de producción para los cuales no hay instancia de desarrollo, por ejemplo. Si un proyecto utiliza un paquete como django-debug-toolbar, entonces el atacante podría ejecutar SQL arbitrario, lo cual podría ser especialmente malo si los desarrolladores se conectan a la base de datos con una cuenta superusuario.

Ahora se valida settings.ALLOWED_HOSTS sin importar DEBUG. Para conveniencia, si ALLOWED_HOSTS está vacío y DEBUG=True, entonces las siguientes variaciones de localhost están permitidas: ['localhost', '127.0.0.1', '::1']. Si tu archivo de configuración local tiene el valor de producción de ALLOWED_HOSTS, debes omitirlo para obtener esos valores por defecto.

Bugfixes

  • Se permitió la prueba de membresía en set para las propiedades User.is_authenticated y User.is_anonymous (#27309).

  • Se corrigió una regresión de rendimiento cuando se ejecuta migrate en proyectos con operaciones RenameModel (#27279).

  • Se agregó model_name a las llamadas a allow_migrate() en makemigrations (#27200).

  • Se hizo que la vista JavaScriptCatalog respete el argumento packages; anteriormente era ignorado (#27374).

  • Se corrigió QuerySet.bulk_create() en PostgreSQL cuando el número de objetos es un múltiplo más uno de batch_size (#27385).

  • Previnimos que i18n_patterns() utilice demasiado de la URL como el idioma para solucionar un caso de uso para prefix_default_language=False (#27063).

  • Reemplazamos una posible redirección incorrecta desde SessionMiddleware cuando una sesión se destruye en una solicitud concurrente con una SuspiciousOperation para indicar que la solicitud no puede completarse (#27363).