已发布的安全更新

作者:Tim Graham 发表于 2015年3月18日

根据我们的安全发布策略,Django 团队发布了多个版本——Django 1.4.20、1.6.11、1.7.7 和 1.8c1。这些版本现已在 PyPI 和我们的下载页面上提供。这些版本解决了下面详细说明的几个安全问题。我们鼓励所有 Django 用户尽快升级。Django 主分支也已更新。

Django 1.8 现在处于候选发布阶段。这标志着字符串冻结,并呼吁翻译人员提交翻译。如果在接下来的两周内没有发现无法解决的重大错误,则最终的 1.8 版本将于 4 月 1 日前后发布。任何延误都将在django-developers 邮件列表主题中进行沟通。

使用以下方法可能导致拒绝服务攻击:strip_tags()

去年django.utils.html.strip_tags已更改为迭代工作。问题在于它正在处理的输入大小在每次迭代中都可能增加,这会导致在strip_tags()中出现无限循环。此问题仅影响尚未收到HTMLParser 中的错误修复的 Python 版本;即 Python < 2.7.7 和 3.3.5。一些操作系统供应商也已将 Python 错误的修复程序反向移植到其早期版本的软件包中。

为了解决这个问题,strip_tags()如果检测到它正在处理的字符串长度增加,现在将返回原始输入。请记住,绝对不保证strip_tags()的结果是 HTML 安全的。因此,切勿在未先进行转义的情况下标记strip_tags()调用的结果为安全,例如,使用django.utils.html.escape.

感谢 Andrey Babak 报告此问题。

此问题已分配标识符 CVE-2015-2316。

缓解了通过用户提供的重定向 URL 可能发生的 XSS 攻击

Django 在某些情况下依赖于用户输入(例如django.contrib.auth.views.login和 i18n)将用户重定向到“成功”URL。这些重定向的安全检查(即django.utils.http.is_safe_url())接受带有前导控制字符的 URL,因此认为以下 URL 是安全的:\x08javascript:...安全。此问题不会影响当前的 Django,因为我们只将此 URL 放入Location响应标头中,浏览器似乎会忽略那里的 JavaScript。我们测试过的浏览器还将以控制字符为前缀的 URL(例如%08//example.com)视为相对路径,因此重定向到不安全的目标也不是问题。

但是,如果开发人员依赖于is_safe_url()来提供安全的重定向目标并将此类 URL 放入链接中,他们可能会遭受 XSS 攻击,因为某些浏览器(例如 Google Chrome)会忽略锚点中 URL 开头的控制字符href.

感谢 Daniel Chatfield 报告此问题。

此问题已分配标识符 CVE-2015-2317。

受影响的版本

  • Django 主开发分支
  • Django 1.8(当前处于候选发布状态)
  • Django 1.7
  • Django 1.6
  • Django 1.4(仅限 is_safe_url() 问题)

根据我们的受支持版本策略,Django 1.5 不再接收安全更新。

解决方案

已将补丁应用于 Django 的主开发分支以及 1.4、1.6、1.7 和 1.8 发布分支,这些补丁解决了上述问题。补丁可以直接从以下更改集中获取

在开发主分支上

在 1.8 发布分支上

在 1.7 发布分支上

在 1.6 发布分支上

在 1.4 发布分支上

已发布以下新版本:

这些版本使用的 PGP 密钥 ID 为 Tim Graham:1E8ABDC773EDE252。

关于安全报告的常规说明

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

返回顶部