问询:排查依赖引入的CVE-2021-32052 URLValidator漏洞及修复方案
漏洞详情
- CVE编号: CVE-2021-32052
- 关联组件: Python(实际涉及间接引入的Django依赖)
- 当前Python版本: 3.9.18
- 修复版本: Django 2.2.22+、3.1.10+、3.2.2+
- 漏洞描述: 在Django 2.2(低于2.2.22)、3.1(低于3.1.10)、3.2(低于3.2.2且Python 3.9.5+)版本中,
URLValidator未禁止换行符和制表符(除非使用URLField表单字段)。若应用在HTTP响应中使用含换行符的值,可能发生头部注入。Django自身不受影响,因HttpResponse禁止HTTP头中存在换行符。
一、排查引入漏洞的依赖包
由于未直接使用Django,漏洞由间接依赖引入,按以下步骤定位:
- 生成完整依赖树
- 先安装依赖树工具(若未安装):
pip install pipdeptree - 执行命令查看所有依赖Django的包及对应版本:
pipdeptree | grep django - 若输出类似
some-package==1.0.0 -> Django==2.2.21,则some-package就是引入旧版本Django的上游依赖。
- 先安装依赖树工具(若未安装):
- 验证依赖约束
- 检查
requirements.txt或pyproject.toml等配置文件,看是否有包对Django版本的约束过于宽松(比如django>=2.2,<2.3),导致安装了存在漏洞的版本。
- 检查
二、漏洞修复操作
- 优先升级上游依赖包
- 如果上游依赖已经更新了Django版本要求,直接升级该依赖:
pip install --upgrade some-package - 升级后重新执行
pipdeptree | grep django,确认Django版本已达到修复版本(2.2.22+/3.1.10+/3.2.2+)。
- 如果上游依赖已经更新了Django版本要求,直接升级该依赖:
- 强制指定Django安全版本
- 若上游依赖未更新,在依赖配置文件中直接添加Django的版本约束,比如在
requirements.txt中加入:Django>=3.2.2,<3.3; python_version >= "3.9" - 执行
pip install -r requirements.txt,强制安装安全版本的Django。
- 若上游依赖未更新,在依赖配置文件中直接添加Django的版本约束,比如在
- 代码层面额外防护(可选但推荐)
- 若代码存在将用户输入/外部数据放入HTTP响应头的场景,手动添加过滤逻辑移除特殊字符:
def sanitize_header_value(value): if isinstance(value, str): return value.replace('\n', '').replace('\r', '').replace('\t', '') return value - 设置响应头时调用该函数:
response.headers['X-Custom-Header'] = sanitize_header_value(user_provided_value)
- 若代码存在将用户输入/外部数据放入HTTP响应头的场景,手动添加过滤逻辑移除特殊字符:
内容的提问来源于stack exchange,提问作者Harsha Biyani
相关产品推荐
相关产品推荐

