# Django < 2.0.8 CommonMiddleware任意URL跳转漏洞（CVE-2018-14574）

Django是一个高级的Python Web框架，支持快速开发和简洁实用的设计。

Django 2.0.8和1.11.15版本之前存在一个任意URL跳转漏洞，当同时启用`django.middleware.common.CommonMiddleware`中间件和`APPEND_SLASH`设置时，如果项目中存在接受以斜杠结尾的任意路径的URL模式，攻击者可以构造恶意URL导致重定向到任意外部网站，从而可能导致钓鱼等攻击。

参考链接：

- https://www.djangoproject.com/weblog/2018/jul/18/security-releases/
- https://nvd.nist.gov/vuln/detail/CVE-2018-14574

## 环境搭建

执行如下命令启动一个存在漏洞的Django 2.0.7服务器：

```
docker compose build
docker compose up -d
```

环境启动后，访问`http://your-ip:8000`即可看到Django默认首页。

## 漏洞复现

访问以下URL触发任意URL跳转漏洞：

```
http://your-ip:8000//www.example.com
```

服务器将重定向到`//www.example.com/`，浏览器会将其解释为绝对URL，从而实现对外部站点的重定向：

![](1.png)

攻击者可以利用此漏洞将用户重定向到恶意网站，可能导致钓鱼攻击或其他安全问题。
