Notas de lanzamiento de Django 3.1.1

1 de septiembre de 2020

Django 3.1.1 resuelve dos problemas de seguridad y varios errores en 3.1.

CVE-2020-24583: Permisos incorrectos en directorios de nivel intermedio en Python 3.7+

En Python 3.7+, el modo FILE_UPLOAD_DIRECTORY_PERMISSIONS no se aplicaba a los directorios de nivel intermedio creados en el proceso de subida de archivos y a los directorios de colección estática de nivel intermedio cuando se utilizaba la orden de comando de administración collectstatic.

Debes revisar y corregir manualmente los permisos en los directorios de nivel intermedio existentes.

CVE-2020-24584: Escalada de privilegios en directorios de nivel intermedio del caché del sistema de archivos en Python 3.7+

En Python 3.7+, los directorios de nivel intermedio del caché del sistema de archivos tenían la máscara de grupo y otros del sistema estándar en lugar de 0o077 (sin permisos de grupo ni otros).

Bugfixes

  • Se corrigió el envoltorio de etiquetas de acciones traducidas en la barra lateral de navegación del panel de administración para idiomas asiáticos orientales (#31853).

  • Se corrigió el envoltorio de nombres de modelos largos en la barra lateral de navegación del panel de administración (#31854).

  • Se corrigió la codificación de datos de sesión al actualizar varias instancias del mismo proyecto a Django 3.1 (#31864).

  • Se ajustó el template de barra lateral de navegación del panel de administración para reducir el registro de depuración al renderizar (#31865).

  • Se corrigió una posibilidad de pérdida de datos en el método select_for_update(). Al utilizar campos relacionados que apuntan a un modelo proxy en la argumento of, no se bloqueaba el modelo correspondiente (#31866).

  • Se corrigió una posibilidad de pérdida de datos, siguiendo una regresión en Django 2.0, al copiar instancias de modelos con un valor de campo cacheado (#31863).

  • Se corrigió una regresión en Django 3.1 que causaba un error cuando se decodificaban datos de sesión inválidos (#31895).

  • Se revertió la deprecación en Django 3.1 que causaba un error al pasar argumentos de palabra clave obsoletos a una consulta en TemplateView.get_context_data() (#31877).

  • Se hizo cumplir la sensibilidad de hilo del hook MiddlewareMixin.process_request() y process_response() cuando se encuentra en un contexto asíncrono (#31905).

  • Fixed __in búsqueda en transformaciones de clave para JSONField con MariaDB, MySQL, Oracle y SQLite (#31936).

  • Se ha corregido una regresión en Django 3.1 que causaba errores de permiso en CommonPasswordValidator y settings.py generados por el comando startproject, cuando el usuario no tenía permisos para todos los directorios intermedios en un camino de instalación de Django (#31912).

  • Se ha corregido la detección de una función callable get_response asíncrona en varios middlewares builtin (#31928).

  • Se ha corregido el crash de QuerySet.order_by() en PostgreSQL cuando se ordenaba y agrupaba por JSONField con un decodificador personalizado decoder (#31956). Como consecuencia, la recuperación de un campo JSON mediante SQL raw ahora devuelve una cadena en lugar de datos pre cargados. Deberás llamar explícitamente a json.loads() en tales casos.

  • Se ha corregido el crash de QuerySet.delete() en MySQL, siguiendo una regresión de rendimiento en Django 3.1 en MariaDB 10.3.2+, cuando se filtraba contra una función agregada (#31965).

  • Se ha corregido el crash de django.contrib.admin.EmptyFieldListFilter cuando se utilizaba en relaciones reversas (#31952).

  • Se ha evitado que el contenido se desbordara en la vista de cambio del administrador cuando el panel de navegación lateral está habilitado (#31901).