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

4 октября 2023

В Django 4.2.6 исправлена проблема безопасности со степенью серьезности «умеренная» и несколько ошибок в 4.2.5.

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

После исправления CVE-2019-14232 были пересмотрены и улучшены регулярные выражения, используемые в реализации методов django.utils.text.Truncator chars() и words()html=True). Однако эти регулярные выражения по-прежнему демонстрировали линейную сложность обратного хода, поэтому при передаче очень длинного, потенциально деформированного HTML-ввода оценка все равно происходила медленно, что приводило к потенциальной уязвимости отказа в обслуживании.

Методы chars() и words() используются для реализации шаблонных фильтров truncatechars_html и truncatewords_html, которые, таким образом, также были уязвимы.

Ввод, обрабатываемый Truncator при работе в режиме HTML, был ограничен первыми пятью миллионами символов, чтобы избежать потенциальных проблем с производительностью и памятью.

Исправления

  • Исправлена регрессия в Django 4.2.5, когда переопределение устаревших параметров DEFAULT_FILE_STORAGE и STATICFILES_STORAGE в тестах приводило к мутации главного STORAGES (#34821).

  • Исправлена регрессия в Django 4.2, которая приводила к ненужному приведению строковых полей (CharField, EmailField, TextField, CICharField, CIEmailField и CITextField), используемых при поиске __isnull на PostgreSQL. Как следствие, индексы, использующие выражение __isnull или условие, созданные до версии Django 4.2, не использовались планировщиком запросов, что приводило к снижению производительности (#34840).

    Возможно, вам придется пересоздать такие индексы, созданные в вашей базе данных с Django 4.2 по 4.2.5, поскольку они содержат ненужную заливку ::text. Найдите индексы-кандидаты с помощью этого запроса:

    SELECT indexname, indexdef
    FROM pg_indexes
    WHERE indexdef LIKE '%::text IS %NULL';
    
Вернуться на верх