Примечания к выпуску Django 2.2.8¶
2 декабря 2019 г.
В Django 2.2.8 исправлена проблема безопасности и несколько ошибок версии 2.2.7, а также добавлена совместимость с Python 3.8.
CVE-2019-19118: повышение привилегий в администраторе Django.¶
Начиная с Django 2.1, администратор модели Django, отображающий родительскую модель со встроенными строками связанной модели, где у пользователя есть разрешения только на просмотр родительской модели, но разрешения на редактирование встроенной модели, будет отображать представление родительской модели только для чтения, но редактируемые формы для встроенной модели.
Отправка этих форм не позволит осуществлять прямое редактирование родительской модели, но вызовет метод save() родительской модели и вызовет обработчики сигналов до и после сохранения. Это повышение привилегий, поскольку пользователь, у которого нет разрешения на редактирование модели, не должен иметь возможности активировать ее сигналы, связанные с сохранением.
Чтобы решить эту проблему, был изменен код обработки разрешений интерфейса администратора Django. Теперь, если у пользователя есть только разрешение «Просмотр» для родительской модели, вся отображаемая форма не будет доступна для редактирования, даже если у пользователя есть разрешение на редактирование моделей, включенных во встроенные строки.
Это обратно несовместимое изменение, и команда безопасности Django знает, что некоторые пользователи Django зависели от возможности разрешить редактирование встроенных строк в форме администратора родительской модели, которая в противном случае была бы доступна только для просмотра.
Given the complexity of the Django admin, and in-particular the permissions related checks, it is the view of the Django security team that this change was necessary: that it is not currently feasible to maintain the existing behavior whilst escaping the potential privilege escalation in a way that would avoid a recurrence of similar issues in the future, and that would be compatible with Django’s safe by default philosophy.
В настоящее время разработчики, чьи приложения затронуты этим изменением, должны заменить использование встроенных строк в родительских элементах, доступных только для чтения, настраиваемые формы и представления, которые явно реализуют желаемую функциональность. В долгосрочной перспективе добавление документированного, поддерживаемого и должным образом протестированного механизма для частично редактируемых многомодельных форм в интерфейс администратора может произойти в самом Django.
Исправления¶
Исправлена возможность потери данных в представлении списка изменений администратора, когда префикс пользовательского набора форм содержит специальные символы регулярного выражения, например
'$'(#31031).Исправлена регрессия в Django 2.2.1, приводившая к сбою при переносе разрешений для моделей прокси с настройкой нескольких баз данных, если запись
defaultбыла пустой (#31021).Исправлена возможность потери данных в
select_for_update(). При использовании'self'в аргументеofс многотабличным наследованием родительская модель блокировалась вместо модели набора запросов (#30953).