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

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

Дата сообщения:
29.09.2014
Затронутые пакеты:
python-django
Уязвим:
Да
Ссылки на базы данных по безопасности:
В каталоге Mitre CVE: CVE-2014-0480, CVE-2014-0481, CVE-2014-0482, CVE-2014-0483.
Более подробная информация:

Данное обновление исправляет проблему с функцией reverse(), порождающей внешние URL; отказ в обслуживании, касающийся загрузок файлов; потенциальное хищение сессии с помощью удалённого ПО промежуточного уровня; утечку данных в интерфейсе администратора.

Данное обновление создано благодаря спонсорам Debian LTS: http://www.freexian.com/services/debian-lts.html

  • CVE-2014-0480

    Django включает в себя вспомогательную функцию django.core.urlresolvers.reverse, обычно используемую для создания URL из ссылки на функцию вида или имя шаблона URL. Тем не менее, если ей переданы входные данные, начинающиеся с двух косых черт (//), то reverse() создаёт относительные (относительно схемы) URL к другим узлам, что позволяет злоумышленнику, которому известно о небезопасном использовании функции reverse() (например, в ситуации, когда конечный пользователь может управлять целью перенаправления), создавать ссылки на сайты по его выбору, что позволяет выполнять выуживание и другие виды атак.

    Для исправления этой проблемы при преобразовании URL теперь выполняется проверка того, что URL не начинается с двух косых черт (//), а также замена второй косой черты на закодированный эквивалент (F). Такой подход гарантирует, что семантика остаётся той же, а URL создаются относительно домена, а не относительно схемы.

  • CVE-2014-0481

    При настройках по умолчанию, когда система Django для обработки загрузки файлов получает файл, который должен иметь путь и имя, совпадающие с уже существующим файлом, то делается попытка создать новое уникальное имя файла путём добавления символа подчёркивания и целого числа в конце (сохраняемого на диск) имени файла, при этом число увеличивается (например, _1, _2 и т. д.) до тех пор, пока не будет создано такое имя файла, которое не вступает в конфликт с уже существующими файлами.

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

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

  • CVE-2014-0482

    Django содержит ПО промежуточного уровня, django.contrib.auth.middleware.RemoteUserMiddleware, а на движке аутентификации — django.contrib.auth.backends.RemoteUserBackend, которое использует заголовок REMOTE_USER для целей аутентификации.

    При некоторых обстоятельствах использование этого ПО промежуточного уровня и этого движка может приводить к тому, что один пользователь получает сессию другого пользователя в случае изменения заголовка REMOTE_USER без соответствующих действий по входу/выходу.

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

  • CVE-2014-0483

    Интерфейс администратора Django, django.contrib.admin, предлагает возможность, посредством которой связанные объекты могут отображаться во всплывающем окне для их выбора. Этот механизм основывается на помещении значений в URL и строку запроса, которые определяют связанную модель для отображения, а также поле, через которое реализуется данное отношение. Этот механизм выполняет проверки прав доступа на уровне класса модели как целого.

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

    Для исправления этой проблемы в интерфейсе администратора в дополнение к обычным проверкам прав доступа выполняются проверки того, что конкретное поле представляет отношение к модели, связанной с администратором, и вызывает исключение в том случае, если одно из условий не выполняется.

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