Notas de lanzamiento de Django 2.2.4

August 1, 2019

Django 2.2.4 soluciona problemas de seguridad y varios errores en 2.2.4.

CVE-2019-14232: Posibilidad de denegación de servicio en django.utils.text.Truncator

Si los métodos chars() y words() de django.utils.text.Truncator se pasaban el argumento html=True, eran extremadamente lentos para evaluar ciertos inputs debido a una vulnerabilidad de backtracking catastrófico en una expresión regular. Los métodos chars() y words() se utilizan para implementar los filtros de plantilla truncatechars_html y truncatewords_html, que estaban así mismo vulnerables.

Las expresiones regulares utilizadas por Truncator han sido simplificadas con el fin de evitar problemas potenciales de backtracking. Como consecuencia, la puntuación final puede incluirse en ocasiones en el resultado truncado.

CVE-2019-14233: Posibilidad de denegación de servicio en strip_tags()

Debido al comportamiento del parser HTMLParser subyacente, django.utils.html.strip_tags() sería extremadamente lento para evaluar ciertos inputs que contengan secuencias grandes de entidades HTML incompletas anidadas. El método strip_tags() se utiliza para implementar el filtro de plantilla correspondiente striptags, que estaba así mismo vulnerable.

strip_tags() ahora evita las llamadas recursivas a HTMLParser cuando se está eliminando progresivamente etiquetas, pero necesariamente entidades HTML incompletas.

Recuerda que NO se proporciona absolutamente ninguna garantía sobre la seguridad de los resultados de strip_tags(). Por lo tanto, NUNCA marques seguro el resultado de una llamada a strip_tags() sin escaparla primero, por ejemplo con django.utils.html.escape().

CVE-2019-14234: Posibilidad de inyección SQL en consultas de búsqueda de clave e índice para JSONField/HStoreField

Búsqueda de clave e índice para django.contrib.postgres.fields.JSONField y búsquedas de clave para HStoreField estaban sujetos a inyección SQL, utilizando un diccionario adecuadamente elaborado, con expansión de diccionario, como los **kwargs pasados a QuerySet.filter().

CVE-2019-14235: Agotamiento potencial de memoria en django.utils.encoding.uri_to_iri()

Si se le pasaban ciertos inputs, django.utils.encoding.uri_to_iri() podría dar lugar a un uso significativo de la memoria debido a una recursividad excesiva cuando re-encodeaba secuencias de octetos UTF-8 inválidas.

uri_to_iri() ahora evita la recursividad al re-encodear secuencias de octetos UTF-8 inválidas.

Bugfixes

  • Se ha corregido una regresión en Django 2.2 cuando se ordena un QuerySet.union(), intersection() o difference() por un tipo de campo presente más de una vez, lo que hace que el ordenamiento utilizado sea incorrecto (#30628).

  • Se ha corregido un crash de migración en PostgreSQL cuando se agrega una restricción de verificación con una búsqueda contains sobre DateRangeField o DateTimeRangeField, si el lado derecho de una expresión es del mismo tipo (#30621).

  • Se ha corregido una regresión en Django 2.2 donde el reloj automático se cae si un camino de archivo contiene caracteres nulos ('\x00') (#30506).

  • Se ha corregido una regresión en Django 2.2 donde el reloj automático se cae si no se puede resolver un directorio de traducciones (#30647).