Django于2019年8月1日发布了一个安全更新,修复了JSONField和HStoreField这两个模型字段中的SQL注入漏洞。
参考链接:
https://www.djangoproject.com/weblog/2019/aug/01/security-releases/ https://www.leavesongs.com/PENETRATION/django-jsonfield-cve-2019-14234.html
该漏洞需要开发人员使用JSONField/HStoreField;此外,查询集的字段名可以被控制。Django的内置应用程序Django-Admin受到影响,这为我们提供了一种简单的方法来复现该漏洞。
通过执行以下命令编译并启动一个存在漏洞的Django 2.2.3:
docker compose build
docker compose up -d
环境启动后,您可以在 http://your-ip:8000 看到Django的主页。
首先,使用用户名 admin 和密码 a123123123 登录到Django-Admin http://your-ip:8000/admin/。
然后进入模型 Collection 的列表视图 http://your-ip:8000/admin/vuln/collection/:
将 detail__a'b=123 添加到GET参数中,其中 detail 是JSONField:
http://your-ip:8000/admin/vuln/collection/?detail__a%27b=123
您可以看到单引号已成功注入,并且SQL语句报告了一个错误: