我如何检测并阻止对我的 Next.js 应用的真实世界 RCE 攻击(CVE-2025-55182 / React2Shell)

发布: (2025年12月13日 GMT+8 09:00)
7 分钟阅读
原文: Dev.to

Source: Dev.to

关于我如何检测并阻止对我的 Next.js 应用的真实 RCE 攻击(CVE-2025-55182 / React2Shell)的封面图片

上周,我经历了在构建 Web 应用过程中最让人警醒的安全事件之一。
我的生产环境 Next.js 应用正被攻击者主动针对 远程代码执行(RCE),根本原因是 React Server Components 中新披露的漏洞。

本文将介绍发生了什么、我如何诊断问题、如何修补以及我为加固基础设施所采取的措施。

1) 首次警示:容器中的可疑日志

一切始于我在检查 Docker 容器时注意到的异常日志:

/bin/sh: curl: not found
/base64 -d | bash
ping: bad address
cat: can't open '.env.production'

攻击者的行为包括:

  • 尝试下载恶意脚本
  • 试图导出环境变量
  • /tmp 投放文件
  • 执行侦察命令
  • 注入 base64 编码的负载

此时,文件系统中没有任何持久化内容,容器重启后也没有残留恶意二进制文件——这算是个好兆头,但显然有人在我的应用内部尝试执行 shell 命令。

2) 调查根本原因

我的第一反应是检查自己的服务端代码:

  • 审查所有路由处理函数
  • 检查每个 Server Action
  • 扫描代码库中是否出现 child_process.execspawn 或 CLI 包装器

我的代码并未执行任何 shell 命令,于是我转向下一个最可能的嫌疑:框架层面的漏洞

作案者:CVE‑2025‑55182(React2Shell)

我的应用运行的 Next.js 版本使用了受漏洞影响的 React Server Components 构建,具体受影响的版本见 CVE‑2025‑55182 – React2Shell

该漏洞是一种无需认证的 RCE,源于 React 的 RSC/Flight 协议中不安全的反序列化。攻击者只需发送一个精心构造的 HTTP 请求,即可在 Node.js 服务器内部触发任意代码执行,即使没有自定义的 API 端点。

我对我的运行实例使用了公开的 PoC… 结果成功了。所有线索瞬间拼合。

3) 修复漏洞

React 团队发布了补丁,Next.js 提供了官方工具用于升级受影响的包。

npx fix-react2shell-next

执行该命令后更新了:

  • React RSC 内部实现
  • 依赖该脆弱代码路径的 Next.js 内部

我使用干净的 Docker 镜像重新构建并部署了应用。随后再次测试 PoC:利用失败。彻底失败。 问题已解决。

修补成功的截图

在受影响的 Next.js 应用上运行 npx fix-react2shell-next – 确认活跃漏洞并应用官方补丁。

4) 加固我的基础设施(这救了我)

虽然漏洞存在,但攻击者从未获得持久化或提升到宿主机的权限。原因在于我们硬化的 Docker 环境:

  • 根文件系统只读
  • /tmp 挂载了 noexec
  • 所有 Linux 能力均已移除
  • 启用了 no-new-privileges
  • 容器内未安装 bashcurl
  • 可写目录被隔离
  • Nginx 进行速率限制和反向代理过滤

这些层级阻止了文件执行、脚本下载、持久化安装、定时任务修改、特权提升以及写入隔离卷之外的路径。最终,漏洞虽然允许 RCE,但环境阻止了它演变为完整的妥协。

5) 事后行动

修补完毕后,我还:

  • 轮换了所有环境密钥
  • 使用干净镜像重新部署全部服务
  • 验证未残留恶意文件
  • 审查日志以确认攻击尝试已被拦截

因为正如我们常说的,安全不仅是修复单一问题,而是一个持续的过程。

6) 开发者的关键要点

  • 快速打补丁 – React2Shell 已在野外被主动利用。如果你的应用使用 Next.js + RSC,请立即更新。
  • 最小特权拯救生命 – 只读根文件系统即可阻断约 80% 的真实攻击链。
  • 别指望自己的代码完美 – 框架漏洞会出现,攻击者动作快。
  • 采用多层防御 – 单一措施并未阻止本次攻击,组合才起效。
  • 全方位监控 – 日志在危机到来之前揭示了攻击痕迹。

7) 结论

这次经历既紧张又极具教育意义。此类事件可能发生在任何人身上,每个受害者背后都有自己的故事。它再次提醒我们:保持更新、加固运行时环境、假设漏洞必然出现,并为基础设施做好安全防护是多么重要。

如果有哪怕一个人阅读后去修补应用或提升安全配置,那么写这篇文章就已经值得。

参考资料

Back to Blog

相关文章

阅读更多 »