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/

posted @   OSCS开源  阅读(256)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示