已发布的安全版本
今天,Django 团队发布了多个版本——Django 1.4.13、Django 1.5.8、Django 1.6.5 和 Django 1.7 beta 4——作为我们安全流程的一部分。这些版本现已在 PyPI 和我们的下载页面上提供。
这些版本解决了可能导致缓存中毒和安全重定向目标验证错误的缓存问题。由于这些问题会影响大多数用户,我们强烈建议每个人都进行升级。
有关更多详细信息,请继续阅读。
问题:缓存可能被允许存储和提供私有数据 (CVE-2014-1418)
在某些情况下,Django 可能会允许缓存存储与特定会话相关的私有数据,然后将该数据提供给具有不同会话或根本没有会话的请求。这既可能导致信息泄露,也可能成为缓存中毒的途径。
在使用 Django 会话时,Django 会设置Vary: Cookie标头以确保缓存不将缓存数据提供给来自其他会话的请求。但是,旧版本的 Internet Explorer(很可能只有 Internet Explorer 6 和在 Windows XP 或 Windows Server 2003 上运行的 Internet Explorer 7)无法处理Vary标头与许多内容类型的组合。因此,如果请求是由 Internet Explorer 发出的,Django 将删除该标头。
为了解决此问题,已删除了针对这些旧版 Internet Explorer 版本的特殊行为,并且Vary标头不再从响应中剥离。此外,对Cache-Control标头的修改(适用于所有带有Content-Disposition标头的 Internet Explorer 请求)也已删除,因为发现它们存在类似问题。
感谢 Canonical 的 Seth Arnold 向我们报告了此问题,并感谢 Michael Nelson、Natalia Bidart 和 James Westby 发现了此问题并将其报告给了 Canonical。
问题:来自用户输入的格式错误的 URL 验证错误 (CVE-2014-3730)
重定向的验证没有正确验证某些格式错误的 URL,而这些 URL 被某些浏览器接受。这允许用户意外地重定向到不安全的 URL。
Django 在某些情况下(例如 django.contrib.auth.views.login、django.contrib.comments和 i18n)依赖于用户输入来将用户重定向到“成功”URL。这些重定向的安全检查(即django.util.http.is_safe_url()) 没有正确验证某些格式错误的 URL,例如 http:\\\djangoproject.com,这些 URL 被一些具有更宽松 URL 解析的浏览器接受。
为了解决此问题,is_safe_url()中的验证已收紧,能够处理和正确验证这些格式错误的 URL。
感谢 Peter Kuma 和 Gavin Wahl 向我们报告了此问题。
受影响的版本
- Django 主开发分支
- Django 1.7(目前处于 Beta 状态)
- Django 1.6
- Django 1.5
- Django 1.4
解决方案
已将补丁应用于 Django 的主开发分支以及 1.4、1.5、1.6 和 1.7 发布分支,这些补丁解决了上述问题。补丁可以直接从以下更改集中获取
在开发主分支上
- https://github.com/django/django/commit/255449c1ee61c14778658caae8c430fa4d76afd6
- https://github.com/django/django/commit/3800f63721f6fc1c940abfb10fe21257dcf13521
在 Django 1.7 发布分支上
- https://github.com/django/django/commit/e7b0cace455c2da24492660636bfd48c45a19cdf
- https://github.com/django/django/commit/7fef18ba9e5a8b47bc24b5bb259c8bf3d3879f2a
在 Django 1.6 发布分支上
- https://github.com/django/django/commit/601107524523bca02376a0ddc1a06c6fdb8f22f3
- https://github.com/django/django/commit/1abcf3a808b35abae5d425ed4d44cb6e886dc769
在 Django 1.5 发布分支上
- https://github.com/django/django/commit/ad32c218850ad40972dcef57beb460f8c979dd6d
- https://github.com/django/django/commit/4001ec8698f577b973c5a540801d8a0bbea1205b
在 Django 1.4 发布分支上
- https://github.com/django/django/commit/7feb54bbae3f637ab3c4dd4831d4385964f574df
- https://github.com/django/django/commit/28e23306aa53bbbb8fb87db85f99d970b051026c
已发布以下新版本
- Django 1.7 beta 4(下载 Django 1.7b4 | 1.7b4 校验和)
- Django 1.6.5(下载 Django 1.6.5 | 1.6.5 校验和)
- Django 1.5.8(下载 Django 1.5.8 | 1.5.8 校验和)
- Django 1.4.13(下载 Django 1.4.13 | 1.4.13 校验和)
有关安全报告的常规说明
与往常一样,我们要求您通过私人电子邮件 security@djangoproject.com 报告潜在的安全问题,而不是通过 Django 的 Trac 实例或 django-developers 列表报告。有关更多信息,请参阅我们的安全策略。
更新:2014年5月15日09:12 UTC - 为 is_safe_url 添加了 CVE