跳转至

CVE-2017-12794 Django debug page XSS漏洞

一、漏洞简介

Django 发布了新版本1.11.5,修复了500页面中可能存在的一个 XSS 漏洞

二、漏洞影响

Django < 1.11.5

三、复现过程

经过我的测试,我发现在使用Postgres数据库并触发异常的时候,psycopg2会将字段名和字段值全部抛出。那么,如果字段值中包含我们可控的字符串,又由于0x02中说到的,这个字符串其实就会被设置成__cause__,最后被显示在页面中。

所以我们假设有如下场景:

  • 用户注册页面,未检查用户名
  • 注册一个用户名为alert(1)的用户
  • 再次注册一个用户名为alert(1)的用户
  • 触发duplicate key异常,导致XSS漏洞

访问http://url:8000/create_user/?username=alert(1)创建一个用户,成功;再次访问http://url:8000/create_user/?username=alert(1),触发异常:

可见,Postgres抛出的异常为

duplicate key value violates unique constraint "xss_user_username_key"
DETAIL:  Key (username)=(<script></script>) already exists.

这个异常被拼接进The above exception ({{ frame.exc_cause }}) was the direct cause of the following exception,最后触发XSS。