s4nntysec/rsc-module-loader-poc

GitHub: s4nntysec/rsc-module-loader-poc

该项目是一个概念验证,演示了 React Server Components 模块加载器因全局修补 Module.prototype._compile 而导致的远程代码执行漏洞。

Stars: 0 | Forks: 0

### React Server Components 模块加载器 - 全局 `Module.prototype._compile` 补丁导致 RCE 在使用 `node‑register.js` 模块加载器的 `react‑server‑dom‑webpack` 和 `react‑server‑dom‑unbundled` Node.js 包中存在一个**安全漏洞**。该加载器**全局修补了 `Module.prototype._compile`**,以拦截包含 `"use client"` 和 `"use server"` 指令的模块,且没有任何针对模块的验证、范围限制或上下文感知。在某些部署场景中(例如,多租户服务器、插件系统或对用户控制的路径进行动态 `require()`),这种全局修改可能会被滥用,从而**在进程上下文中实现任意代码执行**,导致 **RCE、数据泄露以及跨租户或供应链影响**。 该漏洞**有别于先前与 React Server Components 相关的 CVE**(例如 CVE‑2025‑55182 或 CVE‑2026‑23869),因为其源于**对 Node.js 核心模块协议的不安全猴子补丁**(`Module.prototype._compile`),而不是由于反序列化或 RSC 协议解析错误。 **受影响的产品/版本:** - `react‑server‑dom‑webpack`(所有使用 `node‑register.js` 的版本) - `react‑server‑dom‑unbundled`(所有使用 `node‑register.js` 的版本) - 在 Node.js runtime 中 `require('react‑server‑dom‑webpack/node-register')` 或使用等效实现的应用程序(例如,Next.js Server Components 设置、自定义 RSC 实现)。 **影响:** - 在 Node.js 进程上下文中实现**远程代码执行**,前提是攻击者能够控制在 RSC 加载器注册后加载的模块路径或内容。 - 在共享插件或模块的多租户 Node.js 进程中,会导致**跨租户/跨用户入侵**。 - 如果在加载器处于活动状态后加载了恶意或受损的依赖项,会产生**供应链影响**。 - 通过访问 `process.env`、`global`、模块缓存和文件系统,导致**权限提升**和**数据泄露**。 此问题在以下环境中是**严重**的: - 多个租户或用户共享同一个 Node.js 进程, - 或者从用户控制的路径加载插件/模块。 **利用条件:** - 必须注册 RSC 加载器(例如,`require('react‑server‑dom‑webpack/node-register');`)。 - 攻击者必须能够: - 将恶意模块注入文件系统/模块解析路径,**或者** - 控制传递给 `require()` 的路径(例如,通过 HTTP 查询、插件目录或动态模块加载)。 在没有动态模块加载且受到严格控制的单体应用中,风险较低,但如果在加载器处于活动状态后有依赖项加载了不受信任的代码,则风险仍然存在。 **概念验证总结:** 一个最小化的 PoC 演示了当修补后的 `_compile` 处理包含 `"use server"` 的模块时,会执行攻击者控制的代码: 1. 注册加载器:`require('react‑server‑dom‑webpack/node‑register');` 2. 创建一个包含 `"use server"` 和任意代码(例如,设置 `global.__ATTACKER_PAYLOAD__`)的恶意模块 `./plugins/evil.js`。 3. `require('./plugins/evil.js')` 会触发修补后的 `_compile`,在全局作用域中执行攻击者代码。 运行 PoC 可确认任意代码已被执行,并可通过检查 `global` 查看,从而证明在进程上下文中实现了 RCE。
标签:CISA项目, GNU通用公共许可证, MITM代理, Node.js, React Server Components, Web报告查看器, 安全漏洞分析, 编程工具, 远程代码执行