
使用 Node.js 对 CVE-2025-66478 的概念验证利用演示
本仓库包含用于复现和研究 Next.js CVE-2025-66478 漏洞的概念验证 (PoC) 代码. 它包括一个存在漏洞的 Next.js 应用程序和一个用于测试该漏洞的 Node.js 漏洞利用脚本.
中文 · English
这是一个发生在 Next.js Server Actions 处理过程中的 远程代码执行 (RCE) 漏洞.
关键要点:
__proto__ 属性进行原型链污染.| 项目 | 描述 |
|---|---|
| CVE ID | CVE-2025-66478 |
| 类型 | 远程代码执行 (RCE) |
| 根本原因 | RSC Flight 协议中的不安全反序列化 |
| 严重性 (CVSS) | 10.0 (严重) |
| 影响 | 可在服务器上执行任意系统命令 |
__proto__ 的属性.Object.prototype 被污染.then 属性注入到所有对象中. Next.js 逻辑错误地将这些对象识别为 Promise (Thenable).await 这个"伪 Promise"时, 注入到 then 方法中的恶意 JavaScript 代码被执行 (例如 child_process.execSync) .sequenceDiagram
participant Attacker as 攻击者
participant Server as Next.js 服务器
Attacker->>Server: POST / (包含 "__proto__": {"then": ...} 的 JSON)
Note right of Server: JSON 解析污染 Object.prototype
Server->>Server: 应用程序逻辑遇到一个对象
rect rgb(200, 150, 150)
Note right of Server: "Thenable" 检查利用链
Server->>Server: 检查: typeof obj.then === 'function'?
Server-->>Server: 是 (由于污染)
end
Server->>Server: Await/执行恶意的 .then()
Note right of Server: 恶意 JS 代码运行 (RCE)
Server-->>Attacker: 响应 (Action 重定向 / 错误信息)因此, 当服务器处理这个被操纵的 Promise 时, 它会执行攻击者注入的 JavaScript 代码, 这可能导致系统命令执行. 包含的 main.mjs 是重现此攻击场景的示例代码.
此漏洞影响使用 App Router 的 Next.js 应用程序.
已修复的版本:
app/page.tsx: 存在漏洞的应用程序示例代码.exploit.mjs: 用 Node.js 编写的漏洞利用执行脚本.# You can also use yarn or npm.
pnpm install
pnpm run dev
通过浏览器验证你可以访问 http://localhost:3000.
pnpm exploit
默认情况下, 它会针对本地地址 (http://localhost:3000) . 要测试不同的地址, 请使用 --url 选项:
pnpm exploit --url http://target-ip:3000
此代码仅用于安全研究和教育目的. 未经事先许可对系统或网络使用此工具是非法的, 用户对因此类使用而产生的任何问题负全部责任.