漏洞深度分析 | CVE-2023-36053-Django 表达式拒绝服务

项目介绍

Django 是一个高级 Python Web 框架,鼓励快速开发和简洁、务实的设计。它由经验丰富的开发人员构建,解决了 Web 开发的大部分麻烦,因此您可以专注于编写应用程序,而无需重新发明轮子。它是免费且开源的。

项目地址

https://github.com/django/django

https://github.com/django/django/releases/tag/4.2.2

漏洞概述

当处理电子邮件和URL的域名标签数量非常大时,可能会导致正则表达式拒绝服务攻击。这是因为正则表达式的处理时间与输入的长度呈指数关系,如果输入的长度非常大会导致处理时间过长,实现DoS。

影响版本

Django main branch

Django 4.2

Django 4.1

Django 3.2

漏洞分析

根据patch代码分析漏洞点及原理如下:

在URLValidator中,增加了一个max_length属性,其值为2048,用于限制URL的最大长度。如果URL的长度超过这个值,将会抛出一个验证错误。

class URLValidator(RegexValidator):
...
max_length = 2048
...
def __call__(self, value):
if not isinstance(value, str) or len(value) > self.max_length:
raise ValidationError(self.message, code=self.code, params={'value': value})

对于EmailValidator,同样增加了长度的限制。根据RFC 3696的第3节,电子邮件的最大长度为320个字符。如果电子邮件的长度超过这个值,也将抛出一个验证错误。

class EmailValidator:
...
def __call__(self, value):
if not value or '@' not in value or len(value) > 320:
raise ValidationError(self.message, code=self.code, params={'value': value})

在EmailField中,将max_length的默认值设置为320,以符合RFC 3696的规定。

class EmailField(CharField):
...
def __init__(self, **kwargs):
kwargs.setdefault("max_length", 320)
super().__init__(strip=True, **kwargs)

这些修改都是为了限制输入的长度,从而防止正则表达式处理时间过长,避免了ReDoS攻击。

攻击者可以通过提供一个超过长度限制的URL来触发这个漏洞。例如可以提供一个长度超过253个字符的URL。当这个输入被URLValidator处理时,由于正则表达式的处理时间与输入的长度呈指数关系,所以可能会导致处理时间过长实现导致服务拒绝。

修复方式

厂商已发布了漏洞修复程序,请用户尽快更新至安全版本。

版本链接:
https://www.djangoproject.com/weblog/2023/jul/03/security-releases/

修复方式

https://www.djangoproject.com/weblog/2023/jul/03/security-releases/

https://github.com/django/django/commit/b7c5feb35a31799de6e582ad6a5a91a9de74e0f9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21658.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字化时代,企业的数据指标体系

在社会节奏越来越快,处理的信息量越来越大的今天,传统的经营管理模式已经适应不了当下的环境。而由经验、情感组成的业务调整以及决策能力不再能正确指导企业走在正确的方向上,所以数据就成为了企业新的业务优化调整和支撑企业高层管理进行决…

苹果Mac动态壁纸软件Dynamic Wallpaper

Dynamic Wallpaper 是一款桌面壁纸管理软件,它提供了动态壁纸的功能。动态壁纸是指可以在一段时间内自动更改外观的壁纸,比如根据时间或其他条件进行变化。这种壁纸可以为用户提供更加生动有趣的桌面体验。 Dynamic Wallpaper 软件具有以下特点和功能&am…

vue3+element+sortablejs实现table表格 行列动态拖拽

vue3elementsortablejs实现table动态拖拽 1.第一步我们要安装sortablejs依赖2.在我们需要的组件中引入3.完整代码4.效果 1.第一步我们要安装sortablejs依赖 去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片. npm install so…

【LeetCode】594. 最长和谐子序列

594. 最长和谐子序列(简单) 方法:哈希表计数 思路 题目规定的「和谐子序列」中的最值差值正好为 1,因而子序列排序后必然符合[a,a,.., a 1,a1]形式,即符合条件的和谐子序列长度为相邻两数(差值为 1)的出现次数之和。…

linux 基于debian_ubuntu AB系统适配(三)- overlayroot

Overlayroot Overlayroot是一个实用工具,允许您创建一个只读的根文件系统和一个可写的覆盖文件系统。这对于创建一个更安全和稳定的系统很有用,因为对系统所做的任何更改都将存储在覆盖文件系统中,可以很容易地丢弃或重置。 在Debian下,分离的系统在/userdata/rootfs_ove…

西门子S7300以太网模块labview软件介绍

借助捷米特ETH-S7300-JM01以太网模块,通过NetS7 OPC和NI OPC Servers,西门子S7-300与测控软件NI LABVIEW实现以太网通讯和监控。 功能简介 LabVIEW是一种程序开发环境,由美国国家仪器(NzI)公司研制开发,类…

Pycharm连接mysql问题

1. 本地服务 保证本地的服务启动且没有问题 2. 驱动程序 配置驱动程序,首先主机上要装有驱动 直接Google搜,下载就行了 然后选择你的驱动路径 导入数据库: 然后填入你的数据库用户名,密码,URL URL jdbc:mysql:…

自动化测试与持续集成方案

目录 前言: 传统接口测试 接口测试自动化 接口自动化的持续集成 前言: 自动化测试和持续集成是软件开发过程中非常重要的环节。自动化测试可以提高测试效率和准确性,而持续集成则可以确保代码的稳定性和可靠性。 传统接口测试 不知道别…

【数据分析 - 基础入门之pandas篇①】- pandas介绍

文章目录 前言一、pandas介绍二、pandas优势2.1 强大的数据结构支撑2.2 优点 三、pandas学习路线结语相关导读 前言 一、pandas介绍 pandas 是 Python 的 核心数据分析支持库 ,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据…

【仲裁器】轮询仲裁round-robin,rr

起因:在多主单从的设计中,当多个源端同时发起传输请求时,需要仲裁器根据优先级来判断响应哪一个源端。轮询仲裁:各个源端优先级相同,当其同时发起请求时,依次进行响应。 电路图 代码 module rr_arb(input…

前端:运用html+css+js模仿京东上商品图片区域放大特效

前端:运用htmlcssjs模仿京东上商品图片区域放大特效 1. 前言2. 前端界面3. js实现鼠标移入效果4. 实现代码 1. 前言 最近在网页端浏览京东上的商品时,觉得上面的那张gif图片上实现的特效不错,于是自己打算使用htmlcssjs技术来实现一下上述特效效果&#…

【GitOps系列】K8s极简实战

文章目录 示例应用介绍部署应用到k8s 如何使用命名空间隔离团队及应用环境?如何为业务选择最适合的工作负载类型?如何解决服务发现问题?如何迁移应用配置?如何将集群的业务服务暴露外网访问?如何保障业务资源需求和自动…