两个新披露的 CVE——React Server Components 中的 CVE-2025-55182 和 Next.js middleware 中的 CVE-2025-29927——为现代 JavaScript 技术栈开启了远程代码执行和身份验证绕过的路径。只需单个请求即可触发这些漏洞;仅靠配置无法阻止它们。依赖 React Server Components 或 Next.js middleware 的团队必须将这些漏洞视为紧急事项,并立即推送补丁。

为什么日志中的噪音具有误导性

我们从一个生产环境的 Next.js 网站中提取了一个月的边缘日志。该数据集包含 8,900 个被标记为恶意的请求。几乎每一个请求都在第一跳(first hop)失败了。最常见的 URL 是 /wp-admin/install.php,被访问了 518 次,尽管该网站并未运行 WordPress,不使用 PHP,也没有任何 WordPress 文件。

自动化扫描器会产生此类流量。它们在互联网上进行盲目尝试,寻找:

  • 密钥和配置文件 – 64% 的尝试
  • PHP 面板和 Shell – 22%
  • WordPress 路径 – 11%
  • 数据库工具 – 1%

被拦截请求的高计数仅能告诉你,你并没有运行这些机器人所预期的软件。它并不能保证你正在运行的应用程序是安全的。

隐蔽的框架级攻击

当攻击者针对 Next.js 应用时,流量看起来就像普通的请求,利用框架自身的机制来攻击它。

React2Shell (CVE-2025-55182)

React Server Components 中的一个缺陷允许攻击者注入经过特殊设计的有效载荷(payload),并由服务器将其作为代码进行评估。其结果是无需绕过防火墙或 Web 应用过滤器即可实现完全的远程代码执行。该漏洞存在于框架内部;唯一的补救措施是升级到包含修复程序的版本。

Middleware 身份验证绕过 (CVE-2025-29927)

Next.js middleware 可以根据请求头执行安全检查。该 CVE 表明,攻击者可以提供特定的内部请求头,导致 middleware 完全跳过这些检查。从外部看,该请求看起来很普通,因此难以检测。

这两个漏洞都表明,最危险的流量可以混入日常流量中,从而规避那些捕捉嘈杂 WordPress 探测行为的警报。

风险所在

  • 开发人员如果将框架更新视为可选,则面临服务器被完全接管的风险。
  • 运维团队如果仅依赖静态配置来加固技术栈,则无法防御在框架内部运行的代码。

实用防御清单

  1. 部署规范 (Deployment hygiene) – 不要将密钥放在 .env 等文件中。应将其存储在运行时提供的环境变量中,或存储在专门的密钥管理系统中。
  2. 最小化攻击面 – 关闭你不使用的框架功能。实施严格的内容安全策略 (Content-Security-Policy) 以阻止加载未经授权的脚本。
  3. 快速修补 – 实现构建流水线自动化,以便在框架新版本发布后的几小时内即可完成测试和部署。将安全更新视为发布周期中的常规部分,而不是事后补救。

后续关注点

  • 订阅 React、Next.js 以及你所依赖的其他任何运行时库的官方安全公告推送。
  • 集成能够理解 JavaScript 包元数据的漏洞扫描器,以便在新的 CVE 发布时触发自动警报。
  • 构建具备回滚能力的部署流水线;如果补丁引入了回归问题 (regressions),你可以快速回滚,而不会让系统处于暴露状态。

教训很明确:日志中最响亮的攻击往往是误导。真正的危险隐藏在你代码所信任的框架之中。保持技术栈精简,安全地存储密钥,并将修补视为常规工作,这样你就能将隐蔽的框架级威胁转化为可控的风险。