Django 发布安全更新:2.2.8 和 2.1.15

作者:Carlton Gibson 发表于 2019年12月2日

根据我们的安全发布策略,Django 团队发布了Django 2.2.8Django 2.1.15。这些版本解决了以下安全问题。我们鼓励所有 Django 用户尽快升级。

CVE-2019-19118:Django 管理后台中的权限提升漏洞。

从 Django 2.1 开始,如果 Django 模型管理界面显示一个父模型及其相关的内联模型,用户对父模型只有查看权限,但对内联模型有编辑权限,则会显示父模型的只读视图,但内联模型的表单是可编辑的。

提交这些表单不会直接修改父模型,但会触发父模型的save()方法,并导致调用保存前和保存后的信号处理程序。这是一个权限提升漏洞,因为没有权限编辑模型的用户不应该能够触发其与保存相关的信号。

为了解决这个问题,Django 管理界面中的权限处理代码已更改。现在,如果用户对父模型只有“查看”权限,则整个显示的表单将不可编辑,即使用户有权限编辑内联模型中的模型。

这是一个向后不兼容的更改,Django 安全团队意识到一些 Django 用户依赖于在只读父模型的管理表单中允许编辑内联的功能。

鉴于 Django 管理界面的复杂性,特别是与权限相关的检查,Django 安全团队认为此更改是必要的:在避免类似问题的再次发生并与 Django 的“默认安全”理念兼容的方式下,目前无法在保持现有行为的同时规避潜在的权限提升漏洞。

目前,受此更改影响的开发人员应将只读父模型中内联的使用替换为自定义表单和视图,这些表单和视图明确实现所需的功能。从长远来看,可能在 Django 本身中添加一种记录在案、受支持且经过适当测试的机制,用于实现部分可编辑的多模型表单到管理界面。

感谢沈颖报告此问题。

受影响的支持版本

  • Django 主分支
  • Django 3.0(将在今天晚些时候的另一篇博文中发布)
  • Django 2.2
  • Django 2.1

解决方案

已将解决此问题的补丁应用于 Django 的主分支和 3.0、2.2 和 2.1 发布分支。可以从以下变更集中获取补丁

已发布以下版本:

这些版本使用的 PGP 密钥 ID 为 Carlton Gibson:E17DF5C82B4F9D00。

关于安全报告的常规说明

与以往一样,我们要求通过私人电子邮件向security@djangoproject.com报告潜在的安全问题,而不是通过 Django 的 Trac 实例或 django-developers 列表报告。请参阅我们的安全策略以了解更多信息。

返回顶部