已发布的安全更新

作者:James Bennett 发表于 2012年10月17日

今天,Django 团队发布了多个版本——Django 1.3.4 和 Django 1.4.2——以解决报告给我们的安全问题。

鼓励所有用户立即升级 Django。

Host 头部注入

Django 的某些部分(独立于最终用户编写的应用程序)使用完整的 URL,包括从 HTTP Host 头部生成的域名。某些针对此的攻击超出了 Django 的控制能力,需要正确配置 Web 服务器;Django 的文档已有一段时间包含关于此类配置的建议说明。

然而,Django 自身的内置 Host 头部解析仍然存在漏洞,最近已向我们报告。Django 1.3 和 Django 1.4 中的 Host 头部解析(特别是 django.http.HttpRequest.get_host())错误地处理了头部中的用户名/密码信息。因此,例如,以下 Host 头部将在“validsite.com”上运行的 Django 中被接受

Host: validsite.com:random@evilsite.com

利用这一点,攻击者可以导致 Django 的某些部分(特别是密码重置机制)为用户生成和显示任意 URL。

为了解决这个问题,HttpRequest.get_host() 中的解析正在修改;包含潜在危险内容(例如用户名/密码对)的 Host 头部现在会引发 django.core.exceptions.SuspiciousOperation 异常。

HttpOnly cookie 选项的文档

从 Django 1.4 开始,会话 cookie 始终带有 HttpOnly 标志,通过拒绝客户端脚本访问会话 cookie 来提供针对跨站点脚本攻击的额外保护。

虽然这并非 Django 中的直接安全问题,但据报道,Django 1.4 文档错误地描述了此更改,声称这现在是 HttpResponse.set_cookie() 方法设置的所有 cookie 的默认值。

Django 文档已更新以反映这仅适用于会话 cookie。鼓励 Django 用户检查其对 set_cookie() 的使用,以确保已适当地设置或取消设置 HttpOnly 标志。

受影响的版本

上面描述的 Host 头部问题存在于以下版本的 Django 中

HttpOnly cookie 文档问题存在于以下版本的 Django 中

解决方案

已将补丁应用于 Django 的开发主分支以及 1.4 和 1.3 发布分支,这些补丁解决了上述问题。可以从以下 changeset 直接获取这些补丁

已发布以下新版本

由于 Django 的开发分支目前处于预 alpha 状态,强烈建议用户不要从中运行生产部署;但是,如果您目前正在这样做,我们强烈建议您立即升级到最新的 HEAD,其中包含上述补丁。

致谢

Host 头部问题由 James Kettle 报告。HttpOnly cookie 文档问题由 Preston Holmes 报告,他现在是 Django 的提交者。

关于安全报告的常规说明

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

返回顶部