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

10 сентября 2013

Это Django 1.5.3, третий релиз в серии Django 1.5. В нем решена одна проблема безопасности, а также содержится функция opt-in для повышения безопасности 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 currently uses pickle to serialize session data before storing it in the backend. If you’re using the signed cookie session backend and SECRET_KEY is known by an attacker (there isn’t an inherent vulnerability in Django that would cause it to leak), the attacker could insert a string into their session which, when unpickled, executes arbitrary code on the server. The technique for doing so is simple and easily available on the internet. Although the cookie session storage signs the cookie-stored data to prevent tampering, a SECRET_KEY leak immediately escalates to a remote code execution vulnerability.

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

Вернуться на верх