Django 发布安全更新:1.10.3、1.9.11 和 1.8.16
根据我们的安全发布策略,Django 团队发布了Django 1.10.3、Django 1.9.11 和1.8.16。这些版本修复了以下两个安全问题。我们鼓励所有 Django 用户尽快升级。
CVE-2016-9013:在 Oracle 上运行测试时创建具有硬编码密码的用户
在使用 Oracle 数据库运行测试时,Django 会创建一个临时数据库用户。在旧版本中,如果在数据库设置TEST字典中未手动指定密码,则会使用硬编码密码。这可能允许具有数据库服务器网络访问权限的攻击者进行连接。
此用户通常在测试套件完成后会被删除,但在使用manage.py test --keepdb选项或用户具有活动会话(例如攻击者的连接)时不会删除。
现在每个测试运行都会使用随机生成的密码。
感谢 Marti Raudsepp 报告此问题。
CVE-2016-9014:当DEBUG=True
时存在 DNS 重绑定漏洞Host头部未针对settings.ALLOWED_HOSTS进行验证,当settings.DEBUG=True时。这使得它们容易受到DNS 重绑定攻击。
虽然 Django 没有提供允许远程代码执行的模块,但这至少是一个跨站脚本向量,如果开发人员在开发环境中加载生产数据库的副本或连接到某些没有开发实例的生产服务,则可能会非常严重,例如。如果项目使用像django-debug-toolbar这样的包,那么攻击者可以执行任意 SQL,如果开发人员使用超级用户帐户连接到数据库,则尤其严重。
settings.ALLOWED_HOSTS现在无论DEBUG如何都会进行验证。为了方便起见,如果ALLOWED_HOSTS为空并且DEBUG=True,则允许以下 localhost 变体['localhost', '127.0.0.1', '::1']。如果您的本地设置文件中包含您的生产ALLOWED_HOSTS值,则现在必须将其省略才能获得这些回退值。
感谢 Aymeric Augustin 报告此问题。
安全公告:社交媒体指纹识别
除了上述安全问题外,我们还希望通知您最近披露的一种“社交媒体指纹识别”信息泄漏技术。
如果您在登录视图上启用redirect_authenticated_user,其他网站可以通过请求到您网站上的图像文件的重定向 URL 来确定其访问者是否已在您的网站上进行身份验证。为避免这种情况,请将所有图像和您的网站图标托管在不属于ALLOWED_HOSTS.
解决方案
已将解决这些问题的补丁应用于 Django 的主开发分支和 1.10、1.9 和 1.8 发布分支。补丁可以从以下提交中获取
- 主分支:CVE-2016-9013、CVE-2016-9014
- 1.10.x:CVE-2016-9013、CVE-2016-9014
- 1.9.x:CVE-2016-9013、CVE-2016-9014
- 1.8.x:CVE-2016-9013、CVE-2016-9014
已发布以下新版本
- Django 1.10.3 (下载 Django 1.10.3 | 1.10.3 校验和)
- Django 1.9.11 (下载 Django 1.9.11 | 1.9.11 校验和)
- Django 1.8.16 (下载 Django 1.8.16 | 1.8.16 校验和)
这些版本使用的 PGP 密钥 ID 为 Tim Graham:1E8ABDC773EDE252。
关于安全报告的常规说明
与往常一样,我们请求您通过私人电子邮件将潜在的安全问题报告给security@djangoproject.com,而不是通过 Django 的 Trac 实例或 django-developers 列表。请参阅我们的安全策略以获取更多信息。