Replicant: 当反序列化开始编写你的脚本 漏洞概述 Replicant 是一个用于高级 JavaScript 序列化和反序列化的 npm 包。该漏洞(CVE-2022-2265)存在于其 流程中:当重建错误对象时,Replicant 信任攻击者控制的数据,使用序列化输入中的 字段从全局作用域选择构造函数。这使得反序列化不再是数据处理,而变成了行为塑造。 漏洞类别 CVE: CVE-2022-2265 CWE-502: 不可信数据的反序列化 影响:通过不安全的构造函数选择实现代码执行原语 组件: 解码管道中的错误转换逻辑 影响范围 Replicant 广泛使用,月下载量约 100 万 攻击者可控制 字段选择任意全局构造函数 字段可作为函数体输入 解码后的返回值被调用,导致远程代码执行 漏洞代码(修复前) 其中 来自不可信输入,攻击者可影响实例化的构造函数。 POC 代码 Payload 解析: 被攻击者控制,设置为 成为函数体输入 解码后的返回值被调用 修复方案(PR #19) 使用构造函数白名单替代开放的全局查找: 修复核心: 1. 显式类型白名单:仅允许已知安全的错误构造函数 2. 安全默认值:未知值回退到 ,而非解析任意全局对象 实用建议 维护序列化/反序列化逻辑时: 切勿通过全局作用域从未受信任的字符串解析构造函数 为每个多态类型路径保留严格的允许列表 在重建前验证类型和结构 包含针对意外构造函数名称的负向安全测试 在项目中使用 Replicant 时: 升级到包含 PR #19 的版本 将解码后的对象视为不可信输入,直到通过自有逻辑验证 搜索下游使用模式,查找解码值被调用或动态执行的位置 披露时间线