近期,一个针对Next.js的高危远程代码执行漏洞(CVE-2025-55182)因其巨大的潜在影响而受到广泛关注。在默认配置下,其攻击成功率极高,足以在公网环境中稳定攻陷服务,其危害程度与影响范围常被类比为“Log4j”事件。已有攻击者在一些基于Next.js构建的Dify等AI平台上复现成功,早期的一些PoC和测试结论容易误导分析,实践探究在此显得尤为重要。
关于漏洞的原理与技术细节,文章提供了非常完整的分析,是深入了解的首选资料。该漏洞的本质在于,Next.js的服务器端渲染(SSR)流程在某些二次开发的调用链路中,会将用户可控的输入数据误当作可执行的代码模块进行处理。当攻击者能够控制这些输入,数据会经过一系列动态解析、组件推导或模板渲染流程,最终导致在服务端执行任意代码。由于SSR本身就是在服务器端运行React组件,而真实业务中组件的字段、路径、模块引用几乎总是动态的,因此一旦某些框架或loader将用户输入带入了解析链,便直接转化为了RCE。

此漏洞之所以被称为“核弹级”,源于其多方面的严峻特性:
- 供应链风险:许多企业可能并未直接或主动使用Next.js,但其项目通过npm依赖链间接引入了相关的组件或框架,自身却难以察觉。
- 触发场景普遍:业务越复杂、二次开发越多,越容易满足触发条件。真实的业务场景恰恰是“组件层层嵌套,loader相互调用”。
- 影响周期长:修复一条触发路径并不意味着风险完全消除,未来新的业务逻辑或组件可能引入新的触发点。
- 应用范围广:大量内部管理平台、单点登录(SSO)系统、内容管理系统(CMS)、AI工具链乃至网站后台脚手架都广泛采用Next.js来实现SSR,导致攻击面巨大。
在漏洞利用的讨论中,一个重要的实践建议是避免使用execSync函数执行命令,因为它会阻塞Node.js的单线程事件循环,可能导致目标服务在高并发下直接宕机,从而引发告警。更隐蔽和稳定的做法是采用异步命令执行,如exec或spawn。这样既能完成攻击,又不易因服务阻塞而被快速发现。
require("child_process").exec("payload", () => {});
// 或
require("child_process").spawn("/bin/sh", ["-c", "payload"]);
对于开发者而言,及时升级Next.js至安全版本、审慎审查依赖链、并对所有用户输入进行严格的验证和过滤,是防御此类高级别网络安全威胁的基础。
|