React 和 Next.js 应用安全清单

2 阅读7分钟

文章深入探讨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-55182CVE-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 代码路径应与后端逻辑同等严格,并基于正常和异常行为使用运行时检测,而不仅仅是已知威胁。