Выпущены релизы безопасности Django: 2.2.8 и 2.1.15

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

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

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

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

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

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

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

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

Спасибо Shen Ying за сообщение об этой проблеме.

Затронутые поддерживаемые версии

  • Джанго мастер
  • Django 3.0 (который будет выпущен в отдельном посте позже сегодня)
  • Django 2.2
  • Django 2.1

Решение

Патчи для решения проблемы были применены к основной ветке Django и ветвям релизов 3.0, 2.2 и 2.1. Патчи могут быть получены из следующих наборов изменений:

  • На мастер ветке
  • На ветке релиза 3.0
  • На ветке релиза 2.2
  • На ветке релиза 2.1

Были выпущены следующие пакеты:

  • Django 2.2.8
  • Django 2.1.15

Идентификатор ключа PGP, используемый для этих выпусков, - Карлтон Гибсон: E17DF5C82B4F9D00.

Общие замечания относительно отчетов по безопасности

Как всегда, разработчики Django просят сообщать о потенциальных проблемах безопасности по электронной почте security@djangoproject.com, а не через экземпляр Trac Django или список разработчиков django. Пожалуйста, ознакомьтесь с политикой безопасности Django для получения дополнительной информации.

Вернуться на верх