Page 217 - 《软件学报》2026年第7期
P. 217
2902 软件学报 2026 年第 37 卷第 7 期
MultiFlow 和 CodeQL 的漏洞检测结果总览如表 6 所示, 在 20 个 JavaScript 第三方组件和 10 个 JavaScript
Web 应用中, MultiFlow 共检测到 43 例原型链污染漏洞, 总体检测精确率为 83.72%; CodeQL 共检测到 20 例原型
链污染漏洞, 精确率为 85.00%. 可以发现, 在二者的漏洞检测精确率接近的情况下, MultiFlow 在检测召回率上具
备显著优势, 相较于 CodeQL 可检测到更多的原型链污染漏洞. 对于数据集中的 20 个开源第三方组件, MultiFlow
检测到的 15 例漏洞内共包含 3 例已知漏洞, 以及 12 例未知 0-day 漏洞. 本文已向 CVE 官方报告了所有未知漏洞,
截至目前共收到 8 个 CVE 编号, 具体信息如表 7 所示. 这一结果有力地证明了 MultiFlow 在真实场景下的 Web
漏洞检测能力.
表 6 原型链污染漏洞检测结果对比
MultiFlow CodeQL
数据集分类
检测总数 TP FP Precision (%) 检测总数 TP FP Precision (%)
20 NPM packages 21 15 6 71.43 8 6 2 75.00
10 JavaScript Apps 22 21 1 95.45 12 11 1 91.67
合计 43 36 7 83.72 20 17 3 85.00
表 7 20 个开源第三方组件中 MultiFlow 获得的 CVE 编号
组件名称 组件版本 漏洞CVE编号 组件名称 组件版本 漏洞CVE编号
apidoc-core 0.15.0 CVE-2025-57**7 midway 1.0.0 CVE-2025-57**2
dref 0.1.2 CVE-2025-26**8 rollbar 2.26.4 CVE-2025-57**5
fast-redact 3.5.0 CVE-2025-57**9 sassdoc-extras 2.5.1 CVE-2025-57**6
json-schema-editor-visual 1.1.1 CVE-2025-57**0 spmrc 1.2.0 CVE-2025-57**7
● 误报分析. MultiFlow 的 7 例误报主要产生原因在于, 其污点传播追踪阶段存在对间接语义约束的分析缺失.
例如图 9(a) 展示的代码片段中, 变量 groupId 来源于用户输入参数, 但字符串拼接逻辑决定其无法被控制为
__proto__或 constructor.prototype 等危险属性, 不可用于劫持原型. 而 MultiFlow 难以判断该复杂约束, 将
style[groupId] 错误标记为 t proto 类型污染变量, 进而在第 6 行赋值语句处产生误报; CodeQL 基于其声明式查询设
计可实现更精细的污染净化逻辑, 在此类案例上表现优于 MultiFlow.
1 const GROUP_PREFIX = “group_”; 1 app.get(“/”, (req, res) => {
... 2 let {taint, key, val} = req.query.data;
...
2 app.post(“/style”, (req, res) => {
3 const style = ... // javascript object 3 let object = {};
4 const {id, name, key, value} = req.body; 4 object[taint].foo = “bar”;
5 const groupId = GROUP_PREFIX + name + “_” + id; 5 object[taint][key] = value;
6 style[groupId][key] = value;
(a) (b)
图 9 简化后原型链污染漏洞误报示例
● 交集分析. 本文对 MultiFlow 与 CodeQL 检出的漏洞样本进行了详细对比分析, 漏洞检测结果的具体分布关
系如图 10 所示, 二者共同识别出的漏洞数量为 9 例, 其中包含 1 例误报. 此外, 对于前述的 15 例开源第三方组件
漏洞, CodeQL 仅能检出 4 例, 包含 2 例已知漏洞和 2 例未知漏洞. 考虑 CodeQL 检出而 MultiFlow 未检出的 9 例漏
洞, 分析发现其产生原因为二者对漏洞品质要求的差异性: CodeQL 的检测规则中, 仅考虑原型对象 Object.prototype
是否被污染, 而未关注攻击者是否能够任意控制污染属性名, 例如图 9(b) 中, 第 4 行的赋值语句仅能固定影响原
型对象的 foo 属性, 但 CodeQL 仍将其视为漏洞进行报告. 此类操作实际上利用条件较为苛刻、漏洞品质低, 在
MultiFlow 的检测规则中被视为非漏洞. 这进一步表明了 MultiFlow 相较于 CodeQL 拥有更强的原型链污染漏洞
检测能力. 综上所述, 可认为 MultiFlow 的多标签数据流分析方法在原型链污染漏洞检测任务中具备良好的有效
性, 检测性能表现优于 CodeQL 对应漏洞规则实现.

