文章深入探讨React2Shell漏洞及EtherRAT恶意软件,揭示攻击者如何利用React/Next.js服务器端渲染的假设实现代码执行。它提供安全清单,强调环境盘点、数据流审计和权限审查的重要性。文章指出,检测需关注运行时异常行为,因现代攻击常武器化合法基础设施,且伪装性强。
译自:A security checklist for your React and Next.js apps
作者:Crystal Morin
现代云原生攻击并非总是依赖单一的突破性漏洞。相反,威胁行为者以防御者最意想不到的方式将小小的假设、被忽视的行为和受信任的组件串联起来。最近的React2Shell漏洞就是一个完美的例子,而EtherRAT恶意软件则展示了对手的创造力。
对于依赖 React 的团队来说,React2Shell 漏洞 敲响了警钟。它不仅影响 React 这个框架;它打破了许多团队在生产环境中依赖的假设。去年12月,它向我们展示了攻击者可以多么迅速地利用像 服务器端渲染 (SSR) 行为这样微妙的东西进行服务器端代码执行,以及一旦上线后发现它有多么困难。
如果你在生产环境中运行 React 或 Next.js 工作负载,以下是 CVE-2025-55182 和 CVE-2025-66478 实际上破坏了什么、你应立即检查什么以及如何识别藏身于合法基础设施后的攻击者。
React2Shell 破坏了什么
如果你不熟悉,React2Shell 不仅仅是一个你可以一键修补的漏洞——这个缺陷存在于框架本身。当 React 应用程序在 SSR 期间不当地处理用户控制的输入时,就会出现 React2Shell 这类漏洞。
漏洞利用允许服务器端代码执行,并且攻击在漏洞发布后数小时内就开始了。缓解措施需要对 React 服务器组件 (RSC)、Next.js 和相关 框架 进行协调更新,此外还需要评估应用程序数据流。
首先,一旦 React 组件在服务器上渲染,它们就不再在浏览器沙箱中执行。相反,它们在后端运行时环境中运行。React 通常被视为前端代码,因此,人们会假设服务器是安全的。攻击者可以利用这个假设并注入 JavaScript,该 JavaScript 然后在服务器上运行,而不是在浏览器上。此时,代码以与应用程序本身相同的权限运行,可能使攻击者获得云凭证、内部 API、文件系统等的访问权限。
其次,当渲染转移到服务器端时,客户端净化不再相同。不能依赖客户端输入验证来保护服务器渲染的执行路径。在浏览器中安全的模式在 SSR 期间评估时可能会变得危险。从未打算作为可执行文件输入的输入,如果服务器渲染组件处理不当,可能会被评估为代码。
最后,服务器渲染的组件通常被认为是安全的,因为它们源于应用程序逻辑而非用户输入。React2Shell 源于隐式框架行为,与明显不安全的代码关系不大。在 SSR 模式被抽象、重用且未受检查的大型代码库中,风险会增加。
攻击者利用假设,因为在这种情况下,他们可以将执行从浏览器转移到服务器。一旦跨越了该边界,影响范围就会急剧扩大。服务器端执行可以实现凭据访问、横向移动和后续有效载荷投递。检测需要理解应用程序在运行时正在做什么以及该行为如何被滥用。
你需要检查什么
如果你的生产环境中有运行中的 React 或 Next.js 工作负载,以下是你的检查清单:
盘点你的环境
- 识别所有使用 RSC、Next.js 服务器组件或 SSR 的服务。
- 不要忘记检查所有内部工具的管理面板和仪表板。
- 确保框架和软件包版本已根据安全建议进行更新。
审计数据流
- 用户控制的输入是否被传递到服务器渲染的组件中?
- 是否存在评估数据结构或序列化内容的动态渲染路径?
- 来自应用逻辑的数据是否经过审查,还是被假定为安全的?
审查权限
- 此服务是否需要出站互联网访问?
- 凭据和权限是否满足最低要求?
- 容器是否可以写入磁盘或生成子进程?
漏洞利用后会发生什么
React2Shell 在公开披露后数小时内就被民族国家威胁行为者积极利用。在 Sysdig 威胁研究团队 (TRT) 调查的一个特定活动中,造成的损害远远超出了“即打即走”的漏洞利用和经济动机。一个名为 EtherRAT 的自定义远程访问木马 (RAT) 在真实的 React2Shell 攻击中被部署。
EtherRAT 没有使用传统的命令与控制 (C2) 基础设施,而是采用了一种非常规但具有弹性的方式:以太坊区块链。命令被编码到区块链交易中,受感染系统监控区块链以获取指令。EtherRAT 有效载荷 分阶段交付,允许恶意软件根据需要下载附加功能。
这种方法为攻击者提供了几个优势:
- 弹性: 公共区块链具有高可用性,难以被扰乱。
- 隐蔽性: 区块链流量看起来可能合法,并且在企业环境中越来越常见,使其难以区分。
- 归因挑战: 没有中央服务器可以被查封或用于流量引流。
这不是机会主义地扫描互联网的商品化恶意软件。它是经过精心制作的,旨在融入现代运营噪音。这里的启示是:你不会总是从漏洞利用中看到“像恶意软件”的行为。EtherRAT 表明系统在运行时存在细微的偏差,而这些系统在其他方面看起来很健康,这是一个很容易被忽视的问题。
如何发现隐藏的威胁
检测 React2Shell 滥用或其他隐藏威胁需要观察工作负载在运行时正在做什么。你不需要了解特定的威胁就能检测到这类威胁。你只需要了解你的环境和应用程序通常是如何运行的。
当发现以下行为时,如果它们是意外或异常的,则应进行调查:
进程层面
- Web 服务器或 Node.js 进程生成 Shell
- 意外的子进程
- 运行时执行与正常应用程序启动行为不符
网络层面
- 与不熟悉的外部端点的出站连接。
- 与应用程序功能无关的长时间出站连接。
- 来自没有业务需求的 Web 服务的区块链相关流量。
文件系统层面
- 面向 Web 的进程向临时目录写入。
- 在运行时创建或执行新的二进制文件。
接下来会发生什么
- 这些最新发现揭示了几大趋势:
- 客户端和服务器边界的模糊化。 当 JavaScript 无处不在时,盲目的假设变得代价高昂。服务器端 JavaScript 就是服务器代码。
- 合法基础设施的武器化。 区块链、CI/CD 系统和云元数据服务都成了攻击目标。
- 静态安全控制的局限性。 无法通过扫描来解决只在执行期间才会显现的逻辑漏洞。
那么,鉴于 React2Shell 和 EtherRAT,"安全运营" 是什么样子?生产行为是一个新的安全边界。攻击者已经在其中自如地行动,而随着清晰度的提高,防御者将迎头赶上。
无需指责,也无需减缓创新。对待 SSR 代码路径应与后端逻辑同等严格,并基于正常和异常行为使用运行时检测,而不仅仅是已知威胁。