Django SQL注入漏洞風險通告

發布時間 2020-02-13

漏洞編號和級別


CVE編號:CVE-2020-7471,危險級別:嚴重,CVSS分值:9.8


影響版本


Django 1.11.x < 1.11.28

Django 2.2.x < 2.2.10

Django 3.0.x < 3.0.3

Django 主開發分支


漏洞概述


Django是Django基金會的一套基于Python語言的開源Web應用框架。該框架包括面向對象的映射器、視圖系統、模板系統等。


近日,Django官方發布安全通告公布了一個通過StringAgg(分隔符)實現利用的潛在SQL注入漏洞。攻擊者可通過構造分隔符傳遞給聚合函數contrib.postgres.aggregates.StringAgg,從而繞過轉義并注入惡意SQL語句。


相關用戶可通過版本檢測的方法判斷當前應用是否存在風險。在命令行輸入 python。然后在 Python 提示符下輸入下列命令,可查看當前Django版本信息。若Django版本在受影響范圍內,且使用的數據庫為PostgreSQL,則存在此漏洞的安全風險。


>>> import django

>>> django.get_version()


或者,此漏洞是由于聚合函數StringAgg導致,若Django版本在受影響范圍內,且使用了該聚合函數,則可能存在安全風險。開發人員可自行排查是否使用了下列函數。StringAgg函數,是PostgreSQL數據庫中將表達式變成字符串的聚合函數,可實現多行拼接,應用廣泛。


django.contrib.postgres.aggregates.StringAgg。


漏洞驗證


暫無POC/EXP。


修復建議


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


參考鏈接


https://www.djangoproject.com/weblog/2020/feb/03/security-releases