Выпущены релизы безопасности Django: 3.0.1, 2.2.9 и 1.11.27

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

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

CVE-2019-19844: Потенциальный взлом аккаунта через форму сброса пароля

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

Чтобы решить эту проблему, в Django были внесены два изменения:

  1. После получения списка потенциально совпадающих учетных записей из базы данных, функция сброса пароля Django теперь также проверяет адрес электронной почты на эквивалентность в Python, используя рекомендованный процесс сравнения идентификаторов из Технического отчета Unicode 36, раздел 2.11.2 (B) (2).
  2. При создании электронных писем для сброса пароля Django теперь отправляет на адрес электронной почты, полученный из базы данных, а не на адрес электронной почты, указанный в форме запроса на сброс пароля.

Этот вопрос был доведен до сведения команды безопасности Django Саймоном Шареттом, который узнал об этом после прочтения публичного раскрытия аналогичной проблемы, которая затронула GitHub.

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

  • Django master branch
  • Django 3.0
  • Django 2.2
  • Django 1.11

Решение

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

Были выпущены следующие версии:

Идентификатор ключа PGP, используемый для этих выпусков, Mariusz Felisiak: 2EF56372BA48CD1B.

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

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

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

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