Python Web 框架 Django 修复SQL注入漏洞(CVE-2022-34265)
OSCS(开源软件供应链安全社区)推出免费的漏洞、投毒情报订阅服务,社区用户可通过机器人订阅情报信息:https://www.oscs1024.com/?src=wx
漏洞概述
Django 是一个由 Python 语言编写的开源 Web 应用框架,Github 上 star 为 64.9K。
Python 开发者使用 Django 可以快速开发、设计和部署网站。
7月4日,OSCS 监测到 Django 官方修复了一个 SQL 注入漏洞。如果 Trunc() 方法的 kind 参数和 Extract() 方法的 lookup_name 参数没有进行安全过滤,可能会造成 SQL 注入的风险,建议各位开发者关注。
-
漏洞影响等级:高危
-
利用条件:
-
代码中使用了 Trunc() 和 Extract() 方法
-
其中 kind 参数和 lookup_name 参数可控
-
利用成本:低
-
影响版本:(∞, 3.2.14),[4.0, 4.0.6),官方已经在 4.0.6、3.2.14 版本修复此问题
-
CVE编号:CVE-2022-34265
更多漏洞详细信息可进入 OSCS 社区查看:https://www.oscs1024.com/hd/MPS-2022-19581
漏洞分析
以 Django 4.0 版本为例,可以通过官方提供的测试用例进行验证。
Extract() 方法将数据处理后返回一个 Extract 类型的对象,lookup_name 参数是传入的恶意数据。
DTModel.objects.filter 方法通过下图链路拼接出有恶意数据的 SQL 语句
add_q 方法中 self.where.add() 则会将 lookup_name 拼接到 SQL 语句的 WHERE 部分
官方通告中数据库函数 Trunc,利用条件与 Extract 相同,测试用例如下:
风险场景
Extract() 方法的作用是提取日期的某部分为一个数字,内置的 lookup_name 参数指定返回数字是指定时间的对应部分,如当 lookup_name = 'year',返回年份。
Trunc() 方法也是将一个日期截断为一个部分,其中的 kind 参数与 lookup_name 参数功能类似。
因此,如果业务逻辑中有类似时间截取的逻辑,对应的 year、day 等参数由前端传入(用户可控,如选择时间等逻辑)的话,攻击者可以加入 payload,从而对数据库进行操作。
修复方案
将组件 Django 升级至 3.2.14 及以上版本
将组件 Django 升级至 4.0.6 及以上版本
参考链接
https://www.openwall.com/lists/oss-security/2022/07/04/2
https://nvd.nist.gov/vuln/detail/CVE-2022-34265
https://www.djangoproject.com/weblog/2022/jul/04/security-releases/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)