2月3日,Django 官方发布安全通告公布了一个通过StringAgg(分隔符)实现利用的潜在SQL注入漏洞(CVE-2020-7471)。攻击者可通过构造分隔符传递给聚合函数contrib.postgres.aggregates.StringAgg,从而绕过转义并注入恶意SQL语句。
漏洞概述
2月3日,Django 官方发布安全通告公布了一个通过StringAgg(分隔符)实现利用的潜在SQL注入漏洞(CVE-2020-7471)。攻击者可通过构造分隔符传递给聚合函数contrib.postgres.aggregates.StringAgg,从而绕过转义并注入恶意SQL语句。
Django是高水准的由Python编程语言驱动的一个开源Web应用程序框架,起源于开源社区。使用Django,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序,应用广泛。2月11日,绿盟科技监测发现此漏洞PoC已公开,请相关用户尽快升级Django至修复版本,修复此漏洞。
CVSS3.1评分:9.8
参考链接: https://www.djangoproject.com/weblog/2020/feb/03/security-releases
影响范围
受影响版本:
- Django 1.11.x < 1.11.28
- Django 2.2.x < 2.2.10
- Django 3.0.x < 3.0.3
- Django 主开发分支
不受影响产品版本:
- Django 1.11.28
- Django 2.2.10
- Django 3.0.3
漏洞检测
版本检测
相关用户可通过版本检测的方法判断当前应用是否存在风险。 在命令行输入python。 然后在 Python 提示符下输入下列命令,可查看当前使用的Django版本信息:
import django
django.get_version()
注:若Django版本在受影响范围内,且使用的数据库为PostgreSQL,则存在此漏洞的安全风险。
代码审计
此漏洞是由于聚合函数StringAgg导致,若Django版本在受影响范围内,且使用了该聚合函数,则可能存在安全风险。开发人员可自行排查是否使用了下列函数:
django.contrib.postgres.aggregates.StringAgg
PS:StringAgg函数,是PostgreSQL数据库中将表达式变成字符串的聚合函数,可实现多行拼接,应用广泛。
漏洞防护
官方升级
Django 官方已经发布新版本修复了上述漏洞,请受影响的用户尽快升级进行防护。 Django 1.11.28下载地址:
https://www.djangoproject.com/m/releases/1.11/Django-1.11.28.tar.gz
Django 2.2.10 下载地址:
https://www.djangoproject.com/m/releases/2.2/Django-2.2.10.tar.gz
Django 3.0.3下载地址:
https://www.djangoproject.com/m/releases/3.0/Django-3.0.3.tar.gz
若使用 pip 安装 Django,可通过 –upgrade 或 -U 来实现此操作:
$ pip install -U Django
版本更新操作可参考下列链接:
https://docs.djangoproject.com/zh-hans/2.2/howto/upgrade-version
声明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。
绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。
关于绿盟科技
北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。
基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。
北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市,股票简称:绿盟科技,股票代码:300369。