近期,Next.js框架与React生态中的一个高危远程代码执行(RCE)漏洞引起了广泛关注。本文将对该漏洞(CVE-2025-55182)进行完整的复现与分析,探讨其攻击原理、利用方式,并提供相应的安全审计与防护建议。
一、工具准备
公开的漏洞利用工具(POC)可通过以下地址获取,包含源码及编译版本:
https://github.com/darkfiv/ReactExploitGUI
二、受影响资产指纹识别
在资产测绘或漏洞扫描中,可使用以下特征进行批量识别:
app="Next.js" && body="/_next/static/chunks/app/"
其中,body="/_next/static/chunks/app/" 是识别“Next.js App Router”最简洁可靠的页面级指纹,该指纹与本次CVE的利用链高度相关。
三、漏洞环境搭建
在Kali Linux等测试环境中,可以快速搭建存在漏洞的Next.js应用进行验证。
- 创建漏洞应用:使用存在漏洞的特定版本创建Next.js项目(此处以
16.0.5为例)。
npm create next-app@16.0.5 react -y
- 启动开发服务器:进入项目目录并启动服务。
cd react
npm run dev
- 服务正常启动后,访问
http://localhost:3000 应能看到Next.js默认页面。

四、漏洞利用与行为分析
1. 工具检测与初步利用
使用POC工具对目标进行检测与利用。



2. 服务端环境分析
通过分析HTTP响应头与系统进程,确认服务运行环境。
curl -I http://192.168.137.129:3000/
响应头中包含 X-Powered-By: Next.js,表明后端为Node.js。

进一步查看端口占用进程:
ss -tlnp | grep :3000
# 假设得到PID=11644
readlink -f /proc/11644/exe
确认进程为 /usr/bin/node,即应用运行在Node.js 运行时上。


3. 执行命令与日志取证
访问工具生成的命令执行路径:
http://192.168.137.129:3000/dmzaxx7k67k1diag?cmd=whoami

在系统日志中搜索攻击痕迹:
grep -R "dmzaxx7k67k1diag" /var/log/* 2>/dev/null
可在Suricata等安全监控日志中发现对应的HTTP请求记录。

4. 反弹Shell与网络连接取证
通过POC工具发起反弹Shell连接。

在监控日志中查找对应的出站连接:
grep -nE '"src_ip":"192\.168\.137\.129".*"dest_ip":"192\.168\.1\.11".*"dest_port":4444' /var/log/suricata/eve.json
ss -tnp | grep '192.168.1.11:4444'
grep -R "192\.168\.1\.11.*4444" /var/log/* 2>/dev/null


5. 内存马机制分析
根据POC源码分析,攻击主要注入两种内存马:
- 简单命令执行型:路径为
/exec,内部调用 child_process.exec。
- 哥斯拉型Webshell:路径为
/api/v1/n0rth,使用RC4加密通信。
6. 攻击载荷注入要点
- 通过篡改
_response._prefix 注入恶意JavaScript。
- 载荷由
multipart/form-data表单承载,特定字段使用UTF-16LE与Base64编码。
- 请求需包含
Next-Action、X-Nextjs-Request-Id等特定头部。
- 注入成功的特征通常为
3xx重定向响应。
7. 攻击痕迹与取证特征
- 路由痕迹:出现对
/exec?cmd=... (GET) 和 /api/v1/n0rth (POST) 的访问。
- 进程行为:Node进程会派生子进程(如sh、bash)执行命令。
- 静态签名:
http.Server.prototype.emit被重写,内存中存在常量路径和RC4密钥3c6e0b8a9c15224a。
- 网络日志:频繁出现包含
cmd=参数的请求和Base64编码的POST数据包。
8. 漏洞影响范围澄清:React vs Next.js
- React:作为前端UI库,本身不直接处理HTTP请求或服务端逻辑。纯客户端React应用不受此漏洞影响。
- Next.js:作为基于React的全栈框架,其服务端请求处理链(尤其是Server Actions相关解析)存在缺陷,导致可在Node.js服务进程中执行任意代码,影响重大。
五、安全加固与系统审计
为了有效检测和防御此类攻击,需要对系统进行深度审计。
(一)部署进程执行审计
安装并配置auditd,监控所有execve系统调用。
apt-get install auditd -y
systemctl enable --now auditd
auditctl -a always,exit -F arch=b64 -S execve -F key=exec
auditctl -a always,exit -F arch=b32 -S execve -F key=exec
审计报告生成:
ausearch -k exec | aureport -x --summary
(二)攻击行为取证分析
- 定位应用进程PID:
ss -ltnp | grep :3000
- 检索可疑命令执行:查看近2小时内的执行记录,并筛选高风险命令。
ausearch -k exec -ts -2h -i
ausearch -k exec -ts -2h -i | grep -E 'type=EXECVE|/bin/(bash|sh|nc)|/usr/bin/(python|perl)' -A3
- 按父进程溯源:将
<PPID>替换为Node应用进程的PID。
ausearch -k exec -ts -2h -i | grep "ppid=<PPID>" -A3
- 检查网络外连证据:监控到C2服务器的连接。
ausearch -ts -2h -sc connect -i | grep -E '192\.168\.1\.11|4444'
(三)优化审计规则(持久化)
将更精确的规则写入配置文件,重启后生效,便于长期的运维安全监控。
# 示例规则:监控非root用户的执行和网络连接
auditctl -a always,exit -F arch=b64 -S execve -F euid>=1000 -F auid!=4294967295 -k exec
auditctl -a always,exit -F arch=b64 -S connect -F a0=2 -F euid>=1000 -k netconn
规则需写入/etc/audit/rules.d/目录下的文件,并使用augenrules --load加载。
六、漏洞总结与防护建议
1. 核心危害
- 未授权RCE:通过
/exec路径直接执行任意系统命令。
- 内存驻留:通过重写Node.js HTTP模块函数实现无文件驻留,难以静态检测。
- 自动化攻击:返回结构化JSON结果,易于与其他攻击脚本联动。
2. 安全影响层面
- 机密性:泄露服务器敏感文件、环境变量、数据库凭证。
- 完整性:篡改应用数据、植入持久化后门。
- 可用性:执行破坏性命令导致服务中断。
- 横向移动:以内网跳板机身份进行横向渗透。
3. 处置与加固建议
- 应急响应:立即重启受影响服务,清除内存马。
- 访问控制:在反向代理或WAF层阻断
/exec、/api/v1/n0rth路径及cmd=参数。
- 最小权限:以低权限账户运行Node.js应用服务。
- 输入校验:对用户输入进行严格过滤,避免直接将输入传递给命令执行函数。
- 版本升级:及时更新Next.js框架至已修复的安全版本。
- 持续监控:部署完善的日志审计与进程监控体系,对异常行为进行告警。