前置知识
在阅读漏洞利用代码(PoC)之前,需要先理解以下几个关键概念。
JavaScript 中的函数构造函数(Function Constructor)
在 JavaScript 中,可以通过 Function() 构造函数来创建函数对象。基本用法如下:
var myfunc = Function()
// 等价于空函数:function myfunc() {}
上面的代码创建了一个空函数。如果希望向函数体内添加代码,可以传入字符串参数:
var myfunc = Function("alert(123)")
// 等价于:
function myfunc() {
alert(123);
}
可以看到,传入构造函数的字符串会被视为函数体。同时,也可以为函数指定参数:
var myfunc = Function("x", "alert(x)")
// 等价于:
function myfunc(x) {
alert(x);
}
漏洞背景
CVE-2025-55182(代号 React2Shell)是一个影响 React 框架的远程代码执行漏洞。该漏洞源于 React 在处理特定数据序列化时的安全缺陷,攻击者可以构造恶意载荷,利用 JavaScript 函数构造器的特性,在目标服务器或客户端环境中执行任意代码。
技术细节
漏洞的核心在于 React 内部对用户可控数据的反序列化处理。当 React 解析包含特殊构造的 JavaScript 对象时,攻击者可以通过注入恶意字符串,使框架调用 Function() 构造函数并执行任意代码。
典型的利用链包括:
- 构造包含恶意
then方法或@@iterator属性的对象。 - 诱导 React 组件处理该对象,触发反序列化流程。
- 在反序列化过程中,恶意字符串被传递给
Function()构造函数,从而执行攻击者指定的代码。
影响与缓解
该漏洞影响使用 React 服务端渲染(SSR)或处理客户端用户输入的相关版本。建议开发者及时升级至修复版本,并避免对不可信数据进行直接序列化处理。 CSD0tFqvECLokhw9aBeRqoxKL4BrQOnLoOQY0+Ubh6JWfSQsVeohyy6rTedzJubtc33RLIUaQmxQwQyrn7z0Rph6QFxc3oAD8G5NOvKOTqZlLOc/GIToDzwyDHLjNgoUgK5UZ2Nsvb5rmOGnqmhafw==