
CVE-2025-55182 (React2Shell) 的逐步演练,通过追踪 React 的 Flight 协议内部机制。
作者: Kavienan J
漏洞发现者: lachlan2k,他负责任地向React团队披露了此漏洞。
关于此漏洞的更新,请访问: react2shell.com
ReactFlightReplyServer.js](./02-understanding-reactflightreplyserver.md)CVE-2025-55182 的严重性评级为 10.0/10.0。如果你已经看过公开的PoC,你可能会注意到,虽然它们展示了漏洞利用的工作方式,但对为什么载荷看起来是这样的解释可能不够充分——考虑到React Flight协议的复杂性,这完全说得通。Flight,作为React服务器组件和服务器操作背后的序列化层,是一个复杂的1100+行状态机,除非你自己追踪代码,否则其行为并不直观。
社区PoC清晰地展示了该漏洞:
…但当你试图回答“为什么这能工作?”时,你会发现自己很快便深入探索从未打算逐行阅读的React内部机制。
注意: 许多PoC错误地将修复归因于
requireModule的更改。正如我们将在修复中看到的,漏洞利用载荷从未到达该函数——实际的漏洞代码完全存在于ReactFlightReplyServer.js中。
这篇文章是我通过逐步追踪React的解码和块初始化逻辑来逆向工程漏洞利用链的尝试。这里讨论的每个行为都直接来自于修复之前 ReactFlightReplyServer.js 的工作方式(参考:https://github.com/facebook/react/blob/v19.2.0/packages/react-server/src/ReactFlightReplyServer.js),经过提炼和简化,以便有足够耐心的React/JS开发者能够跟上。
下一节: 背景