Все уязвимости

CVE-2024-41991

Django: обработка длинного текста как причина недоступности

Старые версии Django могли слишком долго обрабатывать некоторые тексты с большим числом Unicode-символов при превращении адресов в ссылки. Проверьте фильтры urlize, urlizetrunc и виджет AdminURLFieldWidget, затем обновите приложение.

Проверено 26 октября 2026Moderate по политике безопасности Django. Речь о потенциальном отказе в обслуживании; оценка не подтверждает утечку данных, выполнение кода или неизбежную недоступность всего сайта.

Кому нужно проверить

Разработчикам комментариев, профилей, сообщений и других страниц на Django, автоматически превращающих текстовые адреса в ссылки; администраторам проектов с соответствующим виджетом административной части. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.

В чём риск

Сайт может превращать написанный человеком адрес в кликабельную ссылку. Для этого программа разбирает текст. В уязвимой версии определённый очень большой ввод может потребовать чрезмерного времени обработки. Пока рабочий процесс занят, он хуже обслуживает обычные запросы; при достаточной нагрузке часть функций становится недоступной. Unicode — стандарт представления символов разных письменностей, а не признак вредоносности. Ограничивать только кириллицу или запрещать все неанглийские символы бессмысленно: проблема в конкретной обработке и размере входа. Место, где человек ввёл текст, и место, где его позже показывают, могут различаться.

Затронутые версии

Django 4.2 до 4.2.15 и 5.0 до 5.0.8 по записи CVE. Затронуты фильтры шаблонов urlize и urlizetrunc, а также AdminURLFieldWidget при определённых входных данных с очень большим количеством Unicode-символов. Advisory также отмечал разрабатывавшиеся main и 5.1 release candidate. Пользователь должен иметь возможность передать данные в затронутую обработку; для виджета административной части отдельно учитывайте права на ввод и просмотр. Это не утверждение об опасности любого русского текста.

Исправленные версии

Первоначальные исправленные релизы — Django 4.2.15 и 5.0.8; патчи внесены также в main и готовившуюся 5.1. На 26 октября 2026 года ветки 4.2 и 5.0 уже сняты с поддержки. Переходите на поддерживаемую ветку и её актуальный патч, сверяя Python и зависимости с документацией. Исторический исправленный релиз закрывает эту CVE, но не заменяет последующие обновления.

Что сделать

  1. 1Проверьте Django в окружении сайта. Найдите использование urlize, urlizetrunc и AdminURLFieldWidget и определите, откуда поступает текст. Учтите сохранённые записи: обработка может запускаться позже при просмотре, а не при отправке формы.
  2. 2Временно ограничьте длину принимаемых значений на сервере до разумного для конкретного поля размера и при необходимости отключите автоматическое создание ссылок. Лимит только в браузере обходится другим клиентом. Ограничение ввода не защищает уже сохранённые длинные записи и не заменяет исправление библиотеки.
  3. 3Если функцию приходится отключить, выводите текст штатным способом с экранированием HTML, а не как доверенную разметку. Попросите разработчика проверить это изменение. Не заменяйте фильтр самодельным сложным регулярным выражением без анализа: оно тоже может слишком долго работать.
  4. 4Сделайте резервную копию базы и зафиксируйте версии зависимостей. На тестовой среде установите поддерживаемую исправленную ветку Django. Проверьте обычные русские и другие многоязычные тексты, нормальные ссылки и ожидаемое сообщение об отказе для превышения выбранного лимита. Не воспроизводите истощение ресурсов на рабочем сайте.
  5. 5Разверните обновление во всех веб-процессах и фоновых обработчиках. При миграции на другую ветку заранее проверьте совместимость Python, расширений и схемы базы. План отката должен учитывать данные и сохранять временное отключение проблемного преобразования, если возвращается старый Django.
  6. 6После обновления проверьте страницы с сохранёнными сообщениями и административные формы. Сравните время ответа, занятость процессов и ошибки с обычным уровнем. Не включайте пользовательские тексты целиком в диагностические логи. Рост задержек требует расследования, но сам по себе не доказывает именно эту CVE.

Почему показ текста может занять рабочий процесс

Недоверенный текст поступает в форму или хранилище. Занятые процессы задерживают обычные запросы пользователей.

  1. 1Недоверенный текст поступает в форму или хранилище.
  2. 2Страница или виджет пытается превратить адреса в ссылки.
  3. 3Затронутый обработчик слишком долго разбирает определённый большой ввод.
  4. 4Занятые процессы задерживают обычные запросы пользователей.

Примеры конфигурации и проверки

Проверить установленный Django без обработки текста (shell)
python -m django --version

Для доверенного виртуального окружения или контейнера проекта с Django и совместимым Python. Запускайте от обычной учётной записи приложения без sudo после выбора правильного окружения. Ожидается номер версии; команда не отправляет текст сайту, не запускает миграции и ничего не меняет, откат не нужен. Если модуль не найден, уточните окружение. Результат не доказывает использование фильтров и не отражает автоматически все уже работающие экземпляры приложения.

Как не подпустить ботов к сайту

BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.

Первоисточники

Снизьте шанс атаки до того, как бот дойдёт до сайта

Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.