Примечания к выпуску 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 зависели от возможности разрешить редактирование встроенных строк в форме администратора родительской модели, которая в противном случае была доступна только для просмотра.

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

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

Исправления

  • Исправлена ​​возможность потери данных в представлении списка изменений администратора, когда префикс настраиваемого набора форм содержит специальные символы регулярного выражения, например '$' ( # 31031 ).
  • Исправлена ​​регрессия в Django 2.2.1, которая вызвала сбой при переносе разрешений для моделей прокси с настройкой нескольких баз данных, если default запись была пустой ( # 31021 ).
  • Исправлена ​​возможность потери данных в select_for_update() . При использовании 'self' в of аргументе с наследованием нескольких таблиц родительская модель была заблокирована вместо модели набора запросов ( # 30953 ).

Copyright ©2020 All rights reserved