Примечания к выпуску Django 2.2.4

1 августа 2019 года

Django 2.2.4 исправляет проблемы безопасности и несколько ошибок в 2.2.3.

CVE-2019-14232: Возможность отказа в обслуживании в django.utils.text.Truncator

Если методам django.utils.text.Truncator chars() и words() передавался аргумент html=True, они крайне медленно оценивали определенные входные данные из-за катастрофической уязвимости обратного хода в регулярном выражении. Методы chars() и words() используются для реализации фильтров шаблонов truncatechars_html и truncatewords_html, которые, таким образом, были уязвимы.

Регулярные выражения, используемые Truncator, были упрощены, чтобы избежать потенциальных проблем с обратным ходом. Как следствие, в усеченном выводе теперь иногда может присутствовать пропущенная пунктуация.

CVE-2019-14233: Возможность отказа в обслуживании в strip_tags()

Из-за поведения базового HTMLParser, django.utils.html.strip_tags() будет крайне медленно оценивать определенные входные данные, содержащие большие последовательности вложенных неполных HTML-сущностей. Метод strip_tags() используется для реализации соответствующего фильтра шаблонов striptags, который, таким образом, также был уязвим.

strip_tags() теперь позволяет избежать рекурсивных вызовов HTMLParser, когда прогресс удаления тегов, но обязательно неполных сущностей HTML, прекращается.

Помните, что нет абсолютно никакой гарантии того, что результаты strip_tags() будут безопасны для HTML. Поэтому НИКОГДА не помечайте безопасным результат вызова strip_tags(), не экранировав его сначала, например, с помощью django.utils.html.escape().

CVE-2019-14234: Возможность SQL-инъекции при поиске ключей и индексов для JSONField/HStoreField

Key and index lookups для django.contrib.postgres.fields.JSONField и key lookups для HStoreField были подвержены SQL-инъекции, используя соответствующим образом составленный словарь с расширением словаря в качестве **kwargs, передаваемого в QuerySet.filter().

CVE-2019-14235: Потенциальное исчерпание памяти в django.utils.encoding.uri_to_iri()

Если передать определенные входные данные, django.utils.encoding.uri_to_iri() может привести к значительному расходу памяти из-за чрезмерной рекурсии при повторном кодировании недопустимых последовательностей октетов UTF-8.

uri_to_iri() теперь позволяет избежать рекурсии при повторном кодировании недопустимых последовательностей октетов UTF-8.

Исправления

  • Исправлена регрессия в Django 2.2, когда упорядочивание QuerySet.union(), intersection() или difference() по типу поля, присутствующему более одного раза, приводило к использованию неправильного порядка (#30628).
  • Исправлена ошибка миграции на PostgreSQL при добавлении проверочного ограничения с поиском contains на DateRangeField или DateTimeRangeField, если правая часть выражения имеет тот же тип (#30621).
  • Исправлена регрессия в Django 2.2, при которой автозагрузка аварийно завершалась, если путь к файлу содержал нулевые символы ('\x00') (#30506).
  • Исправлена регрессия в Django 2.2, при которой автозагрузка аварийно завершалась, если каталог переводов не может быть разрешен (#30647).
Вернуться на верх