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

Copyright ©2021 All rights reserved