• 3.1
  • 3.2
  • 6.1
  • Версия документации: 5.0

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

10 сентября 2013

Это Django 1.5.3, третий выпуск в серии Django 1.5. Он решает одну проблему безопасности, а также содержит дополнительную функцию для повышения безопасности django.contrib.sessions.

Уязвимость обхода каталога в теге ssi

В предыдущих версиях Django было возможно передать настройку ALLOWED_INCLUDE_ROOTS в тег ssi для указания доступных путей. Например, если ALLOWED_INCLUDE_ROOTS = ("/var/www",), то возможно следующее:

{% ssi "/var/www/../../etc/passwd" %}

На практике это не очень распространенная проблема, так как это потребует от автора шаблона поместить файл ssi в переменную под управлением пользователя, что в принципе возможно.

Устранение уязвимости удаленного выполнения кода в django.contrib.sessions

django.contrib.sessions в настоящее время использует pickle для сериализации данных сеанса перед их сохранением на сервере. Если вы используете подписанный бэкэнд сеанса cookie и SECRET_KEY известен злоумышленнику (в Django нет встроенной уязвимости, которая могла бы привести к его утечке), злоумышленник может вставить в свой сеанс строку, которая, будучи распакованной, выполняет произвольный код на сервере. Техника выполнения этого проста и легко доступна в Интернете. Хотя хранилище сеансов файлов cookie подписывает данные, хранящиеся в файлах cookie, чтобы предотвратить несанкционированный доступ, утечка SECRET_KEY немедленно перерастает в уязвимость удаленного выполнения кода.

Эту атаку можно смягчить, сериализовав данные сеанса с использованием JSON, а не pickle. Чтобы облегчить это, в Django 1.5.3 представлен новый параметр SESSION_SERIALIZER, позволяющий настроить формат сериализации сеанса. Для обратной совместимости этот параметр по умолчанию использует pickle. Хотя сериализация JSON не поддерживает все объекты Python, как это делает pickle, мы настоятельно рекомендуем переключиться на сериализованные значения JSON. Кроме того, поскольку для JSON требуются строковые ключи, вы, вероятно, столкнетесь с проблемами, если используете нестроковые ключи в request.session. Дополнительную информацию смотрите в документации Сериализация сессии.

Back to Top