已发布的安全版本:1.8.3、1.7.9、1.4.21
根据我们的安全版本发布策略,Django团队发布了多个版本——Django 1.4.21、1.7.9和1.8.3。这些版本现已在PyPI和我们的下载页面上提供。这些版本解决了下面详细说明的几个安全问题。我们鼓励所有Django用户尽快升级。Django主分支也已更新。
通过填充会话存储可能导致拒绝服务
在以前的Django版本中,会话后端会在每次request.session被访问并且请求cookie中提供了一个会话密钥(该密钥在会话记录中不存在)时,在会话存储中创建一个新的空记录。这允许攻击者简单地通过发送带有未知会话密钥的重复请求来轻松创建许多新的会话记录,从而可能填满会话存储或导致其他用户的会话记录被逐出。
内置会话后端现在仅在会话实际被修改时才创建会话记录;不会创建空会话记录。因此,这种潜在的DoS现在只有在站点选择向匿名用户公开修改会话的视图时才有可能。
由于每个内置会话后端都是单独修复的(而不是在核心会话框架中修复),因此第三方会话后端的维护者应检查其后端中是否存在相同的漏洞,并在必要时进行修正。
感谢Eric Peterson和Lin Hua Cheng报告了这个问题。
此问题已分配标识符CVE-2015-5143。
由于验证器接受输入中的换行符,可能导致Header注入
一些Django的内置验证器(django.core.validators.EmailValidator,最严重的是)不允许换行符(因为使用了$而不是\Z在正则表达式中)。如果您在HTTP响应或电子邮件标题中使用包含换行符的值,则可能会遭受Header注入攻击。Django本身并不容易受到攻击,因为django.http.HttpResponse和django.core.mail中的邮件发送实用程序分别禁止HTTP和SMTP标题中的换行符。虽然Django中的验证器已修复,但如果您正在通过其他方式创建HTTP响应或电子邮件消息,则最好确保这些方法也禁止换行符。您可能还需要验证应用程序中任何现有数据是否不包含意外的换行符。
django.core.validators.validate_ipv4_address(), django.core.validators.validate_slug()和django.core.validators.URLValidator也受到影响,但是,从Django 1.6开始,GenericIPAddresseField, IPAddressField, SlugField和URLField使用这些验证器的表单字段都会去除输入,因此换行符进入您的数据的可能性仅在您在表单字段之外使用这些验证器时才存在。
未记录的、内部未使用的validate_integer()函数现在更加严格,因为它使用正则表达式进行验证,而不是简单地使用int()进行类型转换并检查是否引发了异常。
感谢Sjoerd Job Postmus报告了这个问题。
此问题已分配标识符CVE-2015-5144。
URL验证中可能导致拒绝服务
django.core.validators.URLValidator包含一个正则表达式,该表达式对某些输入的评估速度非常慢。此正则表达式已简化和优化。
感谢João Silva和Ross Brunton报告了这个问题。
此问题已分配标识符CVE-2015-5145。
受影响的支持版本
- Django主开发分支
- Django 1.8
- Django 1.7(URL DoS问题除外)
- Django 1.4(URL DoS问题除外)
根据我们的支持版本策略,Django 1.5和1.6不再接收安全更新。
解决方案
补丁已应用于Django的主开发分支和1.4、1.7和1.8发行分支,这些补丁解决了上述问题。补丁可以直接从以下更改集中获取
在开发主分支上
在1.8发行分支上
在1.7发行分支上
在1.4发行分支上
已发布以下新版本
- Django 1.8.3 (下载Django 1.8.3 | 1.8.3校验和)
- Django 1.7.9 (下载Django 1.7.9 | 1.7.9校验和)
- Django 1.4.21 (下载Django 1.4.21 | 1.4.21校验和)
注意:我们上传的第一个1.7.9 wheel文件已损坏(它包含一些来自1.8的文件)。在初始版本发布大约2小时后上传了已更正的文件。
这些版本使用的PGP密钥ID是Tim Graham:1E8ABDC773EDE252。
关于安全报告的常规说明
与往常一样,我们要求通过私人电子邮件向security@djangoproject.com报告潜在的安全问题,而不是通过Django的Trac实例或django-developers列表报告。请参阅我们的安全策略以获取更多信息。