Рекомендация Debian по безопасности

DLA-143-1 python-django -- обновление безопасности LTS

Дата сообщения:
29.01.2015
Затронутые пакеты:
python-django
Уязвим:
Да
Ссылки на базы данных по безопасности:
В каталоге Mitre CVE: CVE-2015-0219, CVE-2015-0220, CVE-2015-0221.
Более подробная информация:

В Django были обнаружены многочисленные проблемы безопасности: https://www.djangoproject.com/weblog/2015/jan/13/security/

В Debian 6 Squeeeze они были исправлены в версии 1.2.3-3+squeeze12 пакета python-django. Разработчики основной ветки разработки описывают эти проблемы следующим образом:

  • CVE-2015-0219

    - Подделка заголовка WSGI из-за объединения символов подчёркивания/тире

    Когда заголовки HTTP помещаются в окружение WSGI, они нормализуются путём преобразования букв в верхних регистр, преобразования всех тире в подчёркивания, и добавления префикса HTTP_. Например, заголовок X-Auth-User в окружении WSGI стал бы HTTP_X_AUTH_USER (и в Django словаре request.META).

    К сожалению, это означает, что окружение WSGI не различает заголовки, содержащие тире, и заголовки, содержащие подчёркивания: X-Auth-User и X-Auth_User оба становятся HTTP_X_AUTH_USER. Это означает, что если какой-то заголовок используется важным для безопасности образом (например, передача аутентификационной информации от внешнего прокси), даже если прокси очищает входящее значение X-Auth-User, злоумышленник может оказаться способным предоставить заголовок X-Auth_User (с подчёркиванием) и обойти эту защиту.

    Для того, чтобы предотвратить подобные атаки, и Nginx, и Apache 2.4+ по умолчанию выполняют очистку заголовков, содержащих подчёркивания, в исходящих запросах. Встроенный сервер Django, используемый для нужд разработки, теперь делает то же самое. Не рекомендуется использовать этот сервер Django для важных проектов, но соответствующее поведение общих серверов снижает изменение поведения при развёртывании.

  • CVE-2015-0220

    - Возможная XSS-атака через передаваемые пользователем URL перенаправлений

    В некоторых случаях Django полагается на пользовательские входные данные (например, django.contrib.auth.views.login() и i18n) для перенаправления пользователя на URL, отмеченную как при успехе. Проверки безопасности для этих перенаправлений (а именно django.util.http.is_safe_url()) не выполняют очистку символов пробела в тестируемых URL, поэтому URL вида "\njavascript:..." считаются безопасными. Если разработчик полагается на is_safe_url() в плане предоставления безопасных целей для перенаправления и помещает такие URL в ссылку, то они могут быть подвержены XSS-атакам. Эта ошибка в настоящее время на актуальна для Django, поскольку мы лишь помещаем URL в заголовок ответа Location, а браузеры в них игнорируют код JavaScript.

  • CVE-2015-0221

    - Отказ в обслуживании в django.views.static.serve

    В предыдущих версиях Django вид django.views.static.serve() считывал передаваемые файлы по одной строке за раз. Поэтому большой файл без символов новой строки приводил к использованию объёма памяти равного этому файлу. Злоумышленник может использовать эту проблему и вызвать отказ в обслуживании путём одновременного запроса множества больших файлов. Теперь указанный вид выполняет чтение файла по кускам, что предотвращает использование большого количества памяти.

    Тем не менее, заметьте, что этот вид содержит предупреждение о том, что он недостаточно безопасен для использования в серьёзных проектах и должен использоваться только с целью разработки. Следует провести аудит ваших проектов и передавать ваши файлы через полноценный внешний веб-сервер.

Заметьте, что версия Django, используемая в Debian 6 Squeeze, не подвержена CVE-2015-0222 (Отказ в обслуживании в базе данных с ModelMultipleChoiceField), поскольку эта возможность отсутствует в данной версии.

В Debian 6 Squeeze эти проблемы были исправлены в пакете python-django версии 1.2.3-3+squeeze12