Примечания к выпуску 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
. См. Дополнительную информацию в
документации по сериализации сеанса .