天下漏洞,尽知其名
HIGH

CVE-2026-102992 Piscina 原型污染漏洞

影响攻击者可借助原型污染在 Worker 线程中预加载恶意代码

AI 研判

Piscina 是 Node.js 的 Worker 线程池实现。在 4.9.4、5.3.2、6.0.0-rc.5 之前,其 ThreadPool.options 以普通对象存储并继承自 Object.prototype。当应用本身存在其他原型污染原语时,攻击者可通过继承属性注入安全敏感选项。

影响范围

Piscina

Piscina 4.9.4、5.3.2、6.0.0-rc.5 之前的版本。

漏洞详情

漏洞类型为原型污染。由于 options 对象继承 Object.prototype,未设置自有默认值的选项(如 execArgv、loadBalancer、env)会从原型链读取被污染的值。继承的 execArgv 会被传入 Node.js Worker 构造函数,从而在 Worker 线程中预加载攻击者控制的代码;继承的 loadBalancer 函数可在任务调度时执行;继承的 env 可篡改 Worker 环境变量。

利用条件与风险

利用前提是目标应用已存在独立的原型污染原语,攻击者借此间接控制 Piscina 选项。实战中可导致 Worker 线程内任意代码执行,风险较高。

修复建议

升级至 4.9.4、5.3.2 或 6.0.0-rc.5 及以上版本。临时缓解措施暂无公开信息。

原始情报

piscina is a node.js worker pool implementation. Prior to 4.9.4, 5.3.2, and 6.0.0-rc.5, Piscina stores ThreadPool.options in src/index.ts as a plain object that inherits from Object.prototype. Applications with a separate prototype-pollution primitive can therefore supply inherited values for security-sensitive options that do not have own defaults. An inherited execArgv value is passed to the Node.js Worker constructor and can preload attacker-controlled code in worker threads, an inherited loadBalancer function can execute during task scheduling, and inherited env values can alter worker environments. This issue is fixed in versions 4.9.4, 5.3.2, and 6.0.0-rc.5.