React2Shell(CVE-2025-55182)漏洞详解:从JavaScript构造函数到远程代码执行

2 阅读2分钟

前置知识

在阅读漏洞利用代码(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() 构造函数并执行任意代码。

典型的利用链包括:

  1. 构造包含恶意 then 方法或 @@iterator 属性的对象。
  2. 诱导 React 组件处理该对象,触发反序列化流程。
  3. 在反序列化过程中,恶意字符串被传递给 Function() 构造函数,从而执行攻击者指定的代码。

影响与缓解

该漏洞影响使用 React 服务端渲染(SSR)或处理客户端用户输入的相关版本。建议开发者及时升级至修复版本,并避免对不可信数据进行直接序列化处理。 CSD0tFqvECLokhw9aBeRqoxKL4BrQOnLoOQY0+Ubh6JWfSQsVeohyy6rTedzJubtc33RLIUaQmxQwQyrn7z0Rph6QFxc3oAD8G5NOvKOTqZlLOc/GIToDzwyDHLjNgoUgK5UZ2Nsvb5rmOGnqmhafw==