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

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

2 декабря 2019 г.

В Django 2.1.15 исправлена ​​проблема безопасности и ошибка потери данных в версии 2.1.14.

CVE-2019-19118: повышение привилегий в администраторе Django.

Начиная с Django 2.1, администратор модели Django, отображающий родительскую модель со встроенными строками связанной модели, где у пользователя есть разрешения только на просмотр родительской модели, но разрешения на редактирование встроенной модели, будет отображать представление родительской модели только для чтения, но редактируемые формы для встроенной модели.

Отправка этих форм не позволит осуществлять прямое редактирование родительской модели, но вызовет метод save() родительской модели и вызовет обработчики сигналов до и после сохранения. Это повышение привилегий, поскольку пользователь, у которого нет разрешения на редактирование модели, не должен иметь возможности активировать ее сигналы, связанные с сохранением.

Чтобы решить эту проблему, был изменен код обработки разрешений интерфейса администратора Django. Теперь, если у пользователя есть только разрешение «Просмотр» для родительской модели, вся отображаемая форма не будет доступна для редактирования, даже если у пользователя есть разрешение на редактирование моделей, включенных во встроенные строки.

Это обратно несовместимое изменение, и команда безопасности Django знает, что некоторые пользователи Django зависели от возможности разрешить редактирование встроенных строк в форме администратора родительской модели, которая в противном случае была бы доступна только для просмотра.

Учитывая сложность администратора Django и, в частности, проверки, связанные с разрешениями, команда безопасности Django считает, что это изменение было необходимо: в настоящее время невозможно поддерживать существующее поведение, избегая при этом потенциального повышения привилегий таким образом, чтобы избежать повторения подобных проблем в будущем, и это было бы совместимо с философией Django безопасно по умолчанию.

В настоящее время разработчики, чьи приложения затронуты этим изменением, должны заменить использование встроенных строк в родительских элементах, доступных только для чтения, настраиваемые формы и представления, которые явно реализуют желаемую функциональность. В долгосрочной перспективе добавление документированного, поддерживаемого и должным образом протестированного механизма для частично редактируемых многомодельных форм в интерфейс администратора может произойти в самом Django.

Исправления

Back to Top