Примечания к выпуску 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.

Исправления

Copyright ©2021 All rights reserved