用途:排查用户可控属性被合并进 Object.prototype 的原型污染漏洞。客户端污染可导致 DOM XSS、Cookie 篡改和认证绕过;服务端污染可通过 EJS、Pug、Handlebars 等模板引擎及 child_process、NODE_OPTIONS 等 gadget 链升级为 RCE。
适用条件:应用使用 JavaScript/Node.js,并对用户输入执行对象合并、克隆或扩展操作,例如 jQuery 的 $.extend(true, ...),或 Lodash 的 .merge()、.defaultsDeep()、_.set() 接收请求体/查询参数;同一运行时中存在模板引擎;服务端可通过被污染选项访问 child_process.exec/spawn。
主要能力与用法:提供检测与验证流程。客户端可通过 URL 查询串(如 proto[test]=polluted)或 JSON 体(如 {"proto":{"polluted":"yes"}})注入;服务端类似。包含 EJS outputFunctionName、Pug self.block、Handlebars compileFunction 及 NODE_OPTIONS 注入的示例命令与载荷,并给出 Unicode 规范化、constructor.prototype 路径、数组污染等过滤绕过方式,以及 ppfuzz 自动化扫描命令。还包含浏览器控制台验证(Object.prototype.polluted)、二阶污染思路(存入数据库后由后台任务触发)和结果核验方法。
限制:并非所有 proto 请求都是有效发现,只有被污染属性实际影响应用行为才算;Node.js 12+ 及较新 Lodash 有部分缓解,需先在旧版本测试;服务端污染必须有 gadget 到达 exec、eval 或模板等 sink 才有影响。建议对照 BlackFan 客户端原型污染目录核查。