React/Next.js 严重远程代码执行漏洞详解(CVE-2025-55182 / React2Shell)

张开发
2026/4/8 17:25:37 15 分钟阅读

分享文章

React/Next.js 严重远程代码执行漏洞详解(CVE-2025-55182 / React2Shell)
一、漏洞背景2025年12月3日React核心团队正式披露了一个存在于React Server Components (RSC)中的高危远程代码执行RCE漏洞。该漏洞被分配CVE-2025-55182Next.js相关编号曾为CVE-2025-66478后合并也被称为React2Shell。攻击者无需任何身份验证仅通过一个精心构造的HTTP POST请求即可在服务器上执行任意代码。漏洞影响使用React Server Components的默认配置应用CVSS评分高达10.0Critical。该漏洞已被CISA纳入已知被利用漏洞目录KEV并出现野外扫描和利用活动。烽火台实验室等国内安全团队已提前发布预警。React2Shell漏洞时间线与利用示意图React Server Components Flight协议漏洞利用流程图Trend Micro / Microsoft Security二、官方公告React官方博客2025年12月3日发布 https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components 漏洞由Lachlan Davidson于2025年11月29日报告。React官方安全公告截图关键修复信息漏洞详情网站由发现者维护 https://react2shell.com 说明了漏洞的触发条件与局限性受影响版本包括React19.0.0 ~ 19.2.0react-server-dom-webpack、react-server-dom-turbopack 等包Next.js使用App Router时15.x 早期版本、16.x 部分版本及特定canary版本已修复版本React 19.0.1 / 19.1.2 / 19.2.1 及更高版本Next.js 15.0.5 / 15.1.9 / 15.2.6 / 15.3.6 等对应修复版本三、漏洞原理分析漏洞根源在于React Server Components的Flight协议中对传入payload的不安全反序列化处理。当请求 /formAction 等Server Function端点时服务器会调用 decodeAction 函数位于 react-server-dom-webpack 等包中。该函数处理表单数据时如果表单名以 $ACTION_REF_ 开头会进行截取并重新拼接为 $ACTION_xxx: 格式。随后通过 decodeBoundActionMetaData 获取对应表单项内容。调用 loadServerReference 和 resolveServerReference 根据 serverManifest 加载模块和函数。在 preloadModule 阶段攻击者可通过构造特殊ID如使用 fs#writeFileSync 等方式绕过manifest限制调用任意可访问的Node.js模块函数。核心问题服务器信任并直接反序列化攻击者可控的Flight payload导致原型污染或任意函数调用最终实现无认证RCE。简单总结这是一个逻辑型反序列化漏洞攻击者通过构造恶意对象绕过React对Server Function的调用限制执行任意JavaScript代码。React Flight协议反序列化流程与漏洞触发点示意图CVE-2025-55182 漏洞利用链路与Payload构造示例GitHub PoC分析图四、漏洞验证环境推荐使用Ddpoc提供的在线验证环境访问https://www.ddpoc.com/vulenv.html选择对应React/Next.js漏洞镜像点击“启用”即可快速生成临时容器环境15分钟后自动销毁。适合安全研究人员快速复现和测试。Ddpoc在线漏洞验证环境界面示例五、漏洞验证与利用验证通常通过构造包含恶意Flight payload的HTTP POST请求实现。公开PoC已出现在GitHub等平台攻击者可利用其执行文件写入、命令执行等操作。实际利用可能导致服务器接管数据窃取部署后门或挖矿程序强烈建议立即升级到修复版本并检查所有使用React Server Components的生产环境。防御建议立即升级React 和 Next.js 到官方修复版本。如果暂时无法升级可通过WAF规则拦截包含 $ACTION_ 等特征的异常payload。监控服务器日志中异常的 /formAction 或 RSC 相关请求。限制服务器权限采用最小权限原则运行Node.js进程。

更多文章