Django < 2.0.8 任意URL跳转漏洞(CVE-2018-14574)

Django默认配置下,如果匹配上的URL路由中最后一位是/,而用户访问的时候没加/,Django默认会跳转到带/的请求中。(由配置项中的django.middleware.common.CommonMiddlewareAPPEND_SLASH来决定)。

在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。

该漏洞利用条件是目标URLCONF中存在能匹配上//example.com的规则。

漏洞环境

运行如下环境编译及运行一个基于django 2.0.7的网站:

docker-compose build
docker-compose up -d

环境启动后,访问http://your-ip:8000即可查看网站首页。

漏洞复现

访问http://your-ip:8000//www.example.com,即可返回是301跳转到//www.example.com/

Copied From: vulhub/django/CVE-2018-14574