" 跨站脚本攻击(XSS)长期以来都是PHP** Web 安全领域最顽固、最常见的漏洞类型之一。现有检测技术主要分为两类:动态分析能够生成 PoC,但覆盖率不足;静态分析覆盖全面,但严重依赖 sanitizer 建模,易产生误报与漏报。那么,是否可以融合二者优势,在保证覆盖率的同时提供可验证的漏洞证明?研究者提出了一个全新的解决方案:XSSky,一种基于路径持久化模糊测试的 XSS 漏洞检测框架。 "**
- 📄 论文标题:XSSky: Detecting XSS Vulnerabilities through Local Path-Persistent Fuzzing
📅 发表时间:34th USENIX Security Symposium,2025
🏫 作者单位:复旦大学、香港理工大学
01---方法介绍
根据OWASP可以将sink上下文分为四种主要类型,如图1所示。

图1. 每种sink上下文类型的示例
XSSky的核心思想非常清晰:利用静态分析定位 source-sink 路径,再对每条路径进行"本地化、持久化、上下文敏感"的模糊验证。
整体流程可以概括为三步:
① 路径定位
基于静态分析工具获取潜在 source-sink 路径。
② PUT 构建
将路径转换为可独立执行的 Program Under Test(PUT)。
③ 路径持久化模糊
针对该路径进行上下文感知 fuzzing,验证是否可构造有效 PoC。

图 2. Dolibarr(5.5k stars)中发现的一个持续存在的XSS漏洞示例;已于2022年6月13日完全修复
小结:不再"盲目探索整个程序",而是"精准围绕单条路径验证漏洞存在性"。
02---关键机制
- 路径持久化模糊测试(Path-Persistent Fuzzing), 只围绕目标 source-sink 路径执行,避免无关代码干扰。
- PUT 本地化转换策略, 自动补全未定义变量与函数,解决静态路径不可执行问题。
- Sink 上下文感知 Exploit Grammar, 针对 HTML、URL、Attributes、JS 四类上下文设计专属攻击模板。
- 基于 PHP 解释器的反馈引导, Hook preg_replace 等函数,精准定位 sanitizer 拦截字符。
- Sanitizer 可绕过验证机制, 不依赖建模假设,直接通过输入构造验证漏洞存在。
| 模块 | 设计思路 | 作用 |
|---|---|---|
| PUT 转换模块 | 补全未定义变量与函数 | 生成可独立执行的局部代码片段 |
| 路径持久化 Fuzzing | 避免探索无关路径 | 提升模糊效率与吞吐率 |
| Sink 上下文分析 | 运行时 DOM 解析 | 识别 HTML / URL / JS 等上下文 |
| 解释器反馈机制 | Hook PHP 字符串函数 | 精准识别 sanitizer 拦截位置 |
| 自动化漏洞判定 | Selenium 监听弹窗 | 生成可验证 PoC |
小结:XSSky 通过"路径级执行 + 解释器级反馈",构建了一个可证明漏洞存在性的检测框架。
03---实验结果
XSSky的路径定位阶段在复用TChecker 的基础上修改其提前终止策略,使其能够完整报告包含净化器的潜在易受攻击路径;PUT转换阶段基于代码属性图(CPG)开展分析;模糊测试阶段实现了汇点上下文分析、变异策略与模糊测试流程以及错误预言机等关键模块。数据集包含20个流行的PHP Web应用程序,主要实验结果如下。
(1)实验通过PUT模糊测试评估了XSSky在检测数据集中的XSS漏洞方面的有效性,结果如表1所示。总体而言,确认60/74(81.08%)的报告确实为跨站脚本(XSS)漏洞。
表1. 评估数据集的细分以及XSSky检测到的XSS漏洞

(2)实验比较了XSSky与两种基线方法(静态检测器和动态测试器)在检测XSS漏洞方面的有效性,实验结果见表2。XSSky在检测XSS漏洞方面优于多个基线方法,其精确度提高了11.48% ~642.49%,召回率提高了87.51% ~172.70%。
表2. XSSky与SOTA技术之间的有效性对比。

(3)实验通过在数据集上进行端到端分析评估了XSSky的效率。实验结果见表3。总体而言,XSSky花费了平均3.74小时从数据集中检测目标应用程序的XSS漏洞。在路径定位模块中,每个应用程序的平均时间约为0.56小时;PUT转换模块是一项相对耗时的任务,平均每个应用程序需要2.72小时。PUT Fuzzing模块,在目标应用中测试所有PUT平均耗时0.46小时。
表3. XSSky分析每个应用程序的性能按不同模块细分,包括平均值、中位数和中位数绝对偏差(MAD)。

**小结:**XSSky将静态分析器识别出的source---sink路径转换为可在本地执行的PUT,并采用一种由PHP解释器反馈引导的路径保持式模糊测试策略。该设计避免了繁琐的净化器建模过程,同时增强了静态检测器识别存在缺陷净化器的能力。
📌 总结
XSSky 的真正突破在于:它不再假设 sanitizer 是安全的,也不依赖复杂建模,而是用"路径级 PoC 生成"直接证明漏洞存在。这种"静态定位 + 局部动态验证"的混合范式,为 Web 漏洞检测提供了一种全新的工程化思路。
📣 欢迎留言讨论
-
你认为路径级 fuzzing 是否可以推广到 SQL 注入或 SSTI 检测?
-
解释器反馈机制是否可以扩展到其他语言(如 Node.js / Python?
📌 点赞 + 收藏 + 分享,你的支持,是我们持续解析高水平软件安全论文的最大动力!