Notas de lanzamiento de Django 5.2.2

julio 4, 2025

Django 5.2.2 soluciona un problema de seguridad con severidad «baja» y varios errores en la versión 5.2.1.

CVE-2025-48432: Inyección potencial de registro a través de ruta de solicitud no escapada.

El registro de respuestas HTTP internas utiliza directamente request.path, lo que permite caracteres de control (por ejemplo, saltos de línea o secuencias de escape ANSI) ser escritos sin escapar en los registros. Esto podría permitir la inyección de log o falsificación, permitiendo a los atacantes manipular la apariencia o estructura de los registros, especialmente en los registros procesados por sistemas externos o visualizados en terminales.

Aunque esto no afecta directamente al modelo de seguridad de Django, plantea riesgos cuando los registros son consumidos o interpretados por otras herramientas. Para solucionar este problema, la función interna django.utils.log.log_response() ahora escapa todos los argumentos de formato posicional utilizando un codificado seguro.

Bugfixes

  • Se ha corregido una falla cuando se utiliza select_related contra un ForeignObject que proviene de un modelo con un CompositePrimaryKey (#36373).

  • Se ha solucionado un error en Django 5.2 donde las subconsultas utilizando "pk" para referenciar modelos con un CompositePrimaryKey no lanzaban ValueError cuando se seleccionaban demasiadas o pocas columnas (#36392).

  • Se ha solucionado una regresión en Django 5.2 que causaba una falla cuando no se pasaban argumentos a QuerySet.union() (#36388).

  • Se ha solucionado una regresión en Django 5.2 donde las clases de subclase de RemoteUserMiddleware que habían sobrescrito process_request() ya no estaban soportadas (#36390).

  • Se ha solucionado una regresión en Django 5.2 que causaba una falla cuando se utilizaba OuterRef en el argumento filter de una expresión Aggregate (#36404).

  • Se ha solucionado una regresión en Django 5.2 que causaba una falla cuando se utilizaba OuterRef en las funciones agregadas de PostgreSQL ArrayAgg, StringAgg y JSONBAgg (#36405).

  • Se ha solucionado una regresión en Django 5.2 donde los botones filter_horizontal del administrador carecían de type="button", lo que causaba que interceptaran la presentación de formulario cuando se presionaba la tecla Enter (#36423).

  • Se ha solucionado un error en Django 5.2 donde llamar a QuerySet.in_bulk() con un argumento id_list en modelos con un CompositePrimaryKey no observaban los límites de parámetros de la base de datos (#36416).

  • Se ha solucionado un error en Django 5.2 donde HttpRequest.get_preferred_type() no tenía en cuenta los parámetros de tipo de medios en las cabeceras Accept, reduciendo la especificidad en la negociación de contenido (#36411).

  • Se han encontrado los siguientes problemas en Django 5.2 que se han corregido: