RSS Feed
更好更安全的互联网

Django logout function Denial-of-service

2015-08-27

Django 官方在八月十八号发布多个版本更新,修复几个安全问题,其中便包括一个由编码不当导致的 DoS 漏洞,测试一些网站均存在此问题。

Detail

django.contrib.auth.views.logout 视图用于开发者实现用户注销退出功能,正常情况下对于 logout 视图应使用官方提供的 django.contrib.auth.decorators.login_required 修饰器方法来判断用户是否已经登录。由于不少开发人员忽略使用修饰器进行判断,导致攻击者可以匿名访问视图,不断创建会话阻塞导致拒绝服务攻击。

django/contrib/sessions/middleware.py:

在对 settings.SESSION_SAVE_EVERY_REQUEST 的判断条件中,middleware 中间件未对 session 的状态进行判断,导致可能绕过进入判断体创建空会话。

c334041bgw1evg3rysahaj20h40bajv7

这意味着我们能够发送大量的请求对目标网站进行会话阻塞从而达到拒绝服务攻击:

c334041bgw1evg3xircexj20i2036aab

Fix

django/contrib/sessions/middleware.py:

 sessions/backends/base.py & sessions/backends/cached_db.py:

虽然严格意义上来讲它是个 DoS 漏洞,但另一方面它完全是由开发者不严谨导致的问题(官方背锅),修复版本将 flush() 的 create() 方法修改以避免创建新的空会话,增加 is_empty() 以用来进行会话判断。

如果你实在不想升级版本,那么记得在必要的视图层增加 @login_required('/') 修饰器。

作者:kk | Categories:漏洞通告 | Tags:

发表评论