React2Shell(CVE-2025-55182)漏洞服务器排查完整指南

更新时间 : 2025年12月8日
漏洞严重程度: CVSS 10.0 (最高级别)

前言:关于React2Shell漏洞

2025年12月3日,React官方披露了一个极其严重的安全漏洞CVE-2025-55182,被安全社区命名为"React2Shell"。这个漏洞影响React Server Components(RSC),允许未经认证的攻击者通过精心构造的HTTP请求实现远程代码执行(RCE)。

关键信息:

  • 影响版本: React 19.0, 19.1.0, 19.1.1, 19.2.0
  • 影响框架: Next.js 15.x和16.x(使用App Router)、React Router、Waku等
  • 修复版本: React 19.0.1, 19.1.2, 19.2.1 及相应的Next.js补丁版本
  • 攻击特点: 无需认证、攻击成功率接近100%、默认配置即可被利用
  • 现状: 已有中国黑客组织在披露后数小时内开始大规模扫描和攻击

根据AWS安全团队报告,包括Earth Lamia和Jackpot Panda在内的多个中国国家支持的黑客组织正在积极利用此漏洞。截至12月7日,全球仍有约28,964个IP地址存在此漏洞。


第一部分:紧急响应 - 立即行动清单

1.1 确认是否受影响

首先判断你的服务器是否使用了受影响的版本:

bash 复制代码
# 检查React版本
cd /path/to/your/project
npm list react react-dom

# 检查Next.js版本
npm list next

# 或查看package.json
cat package.json | grep -E "react|next"

受影响判断标准:

  • React 19.0.0 ~ 19.2.0
  • Next.js 15.0.0 ~ 16.0.6(使用App Router)
  • 使用React Server Components的任何应用

1.2 紧急断网隔离(严重情况)

如果发现明显的入侵迹象(CPU异常、可疑进程、异常网络连接):

bash 复制代码
# 临时断开外网访问(保留SSH)
sudo ufw deny 80/tcp
sudo ufw deny 443/tcp

# 或完全隔离服务器
sudo systemctl stop nginx  # 或apache2

重要提醒: 如果计划报警或进行法律诉讼,不要修改系统,立即联系执法部门保留证据。

1.3 创建取证快照

bash 复制代码
# 创建取证日志目录
mkdir -p ~/forensics/$(date +%Y%m%d_%H%M%S)
cd ~/forensics/$(date +%Y%m%d_%H%M%S)

# 记录当前时间和系统信息
date > timeline.txt
uname -a >> timeline.txt
uptime >> timeline.txt

第二部分:系统状态全面排查

2.1 检查可疑进程

bash 复制代码
# 查看所有进程及其详细信息
ps auxf > ps_full.txt
cat ps_full.txt

# 查看CPU占用前20的进程
ps aux --sort=-%cpu | head -20

# 查看内存占用前20的进程
ps aux --sort=-%mem | head -20

# 特别关注这些可疑进程名
ps aux | grep -E 'crypto|miner|xmrig|kdevtmpfsi|kinsing|[0-9]{8,}'

可疑进程特征:

  • CPU占用率长期高于80%
  • 进程名为随机字符串或数字
  • 进程路径在/tmp、/dev/shm等临时目录
  • 进程用户为www-data但在执行系统命令

2.2 检查网络连接

bash 复制代码
# 查看所有网络连接
sudo netstat -tunlp > netstat.txt
sudo ss -tunlp > ss.txt

# 查看建立的连接(ESTABLISHED)
sudo netstat -anp | grep ESTABLISHED

# 查看监听的端口
sudo netstat -tlnp

# 检查可疑端口
sudo lsof -i -P -n | grep -E ':(4444|5555|6666|7777|8888|9999)'

# 查看DNS查询记录(检测C2通信)
sudo tcpdump -i any -n port 53 -c 100

可疑连接特征:

  • 连接到非常用国家的IP地址
  • 使用非标准高端口(如4444、31337)
  • 与.oast.live、.oastify.com等安全测试域名通信
  • 大量的出站连接到同一目标

2.3 检查定时任务(后门常驻手段)

bash 复制代码
# 检查所有用户的crontab
for user in $(cut -f1 -d: /etc/passwd); do 
  echo "=== Crontab for $user ===" 
  sudo crontab -u $user -l 2>/dev/null || echo "No crontab"
done > all_crontabs.txt

# 检查系统级定时任务
ls -la /etc/cron.* > system_crons.txt
cat /etc/crontab >> system_crons.txt

# 查找最近添加的定时任务
find /var/spool/cron -type f -mtime -7

# 检查systemd定时器
systemctl list-timers --all

可疑定时任务:

  • 含有curl、wget下载脚本的任务
  • 执行/tmp、/dev/shm下的脚本
  • 使用base64编码的命令
  • 每分钟或每小时执行的未知任务

2.4 检查近期文件修改

bash 复制代码
# 查找24小时内修改的文件
sudo find / -type f -mtime -1 2>/dev/null | head -100 > modified_24h.txt

# 查找7天内修改的可执行文件
sudo find / -type f -executable -mtime -7 2>/dev/null > modified_executables.txt

# 检查Web目录的最近修改
sudo find /var/www -type f -mtime -7 -ls

# 检查系统关键目录
sudo find /bin /sbin /usr/bin /usr/sbin -type f -mtime -7

# 查找隐藏文件(.开头的文件)
sudo find / -type f -name ".*" -mtime -7 2>/dev/null | head -50

2.5 检查用户和SSH

bash 复制代码
# 检查所有用户账户
cat /etc/passwd > users.txt

# 查找UID为0的账户(超级用户)
awk -F: '($3 == 0) {print}' /etc/passwd

# 检查最近登录记录
last -a > last_logins.txt
lastb > failed_logins.txt  # 失败的登录尝试

# 检查当前登录用户
w > current_users.txt

# 检查SSH授权密钥
for user_home in /home/* /root; do
  if [ -f "$user_home/.ssh/authorized_keys" ]; then
    echo "=== $user_home/.ssh/authorized_keys ==="
    cat "$user_home/.ssh/authorized_keys"
  fi
done > ssh_keys.txt

# 检查SSH配置
cat /etc/ssh/sshd_config > sshd_config.txt

第三部分:使用专业工具扫描

3.1 安装并运行ClamAV(病毒扫描)

bash 复制代码
# 安装ClamAV
sudo apt update
sudo apt install clamav clamav-daemon -y

# 更新病毒库
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam

# 扫描整个系统(需要几小时)
sudo clamscan -r -i --log=/var/log/clamscan.log /

# 只扫描Web目录(更快)
sudo clamscan -r -i --log=/var/log/clamscan_web.log /var/www

3.2 使用rkhunter检测rootkit

bash 复制代码
# 安装rkhunter
sudo apt install rkhunter -y

# 更新数据库
sudo rkhunter --update

# 执行完整扫描
sudo rkhunter --check --sk --report-warnings-only

# 查看报告
sudo cat /var/log/rkhunter.log

3.3 使用chkrootkit

bash 复制代码
# 安装
sudo apt install chkrootkit -y

# 运行检测
sudo chkrootkit > chkrootkit_report.txt

# 查看结果
cat chkrootkit_report.txt | grep INFECTED

3.4 使用AIDE检查文件完整性

bash 复制代码
# 安装AIDE
sudo apt install aide -y

# 初始化数据库(首次使用)
sudo aideinit

# 复制数据库
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 检查文件变化
sudo aide --check

3.5 使用Lynis进行安全审计

bash 复制代码
# 安装Lynis
sudo apt install lynis -y

# 执行完整审计
sudo lynis audit system > lynis_report.txt

# 查看安全建议
grep "Suggestion" lynis_report.txt

第四部分:日志分析

4.1 分析认证日志

bash 复制代码
# 查看SSH登录历史
sudo grep -i "accepted\|failed" /var/log/auth.log | tail -200 > ssh_logins.txt

# 查找暴力破解尝试
sudo grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr

# 查看成功的root登录
sudo grep "Accepted.*root" /var/log/auth.log

# 查看sudo命令使用记录
sudo grep "sudo:" /var/log/auth.log | tail -100

4.2 分析Web服务器日志

bash 复制代码
# Nginx访问日志 - 查找可疑请求
sudo cat /var/log/nginx/access.log | grep -E "POST.*/_next/static|POST.*/api" | tail -100

# 查找可能的攻击载荷特征
sudo grep -E '\$ACTION|__proto__|eval\(|base64' /var/log/nginx/access.log > suspicious_requests.txt

# 统计访问IP
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

# Nginx错误日志
sudo tail -200 /var/log/nginx/error.log > nginx_errors.txt

# Apache日志(如果使用)
sudo tail -200 /var/log/apache2/access.log
sudo tail -200 /var/log/apache2/error.log

4.3 分析系统日志

bash 复制代码
# 查看系统消息
sudo tail -500 /var/log/syslog > syslog.txt

# 查看内核消息
sudo dmesg | tail -100 > dmesg.txt

# 查找异常的守护进程重启
sudo grep -i "started\|stopped\|failed" /var/log/syslog | tail -100

# 查看dpkg日志(Debian/Ubuntu)
sudo tail -100 /var/log/dpkg.log

4.4 分析应用日志

bash 复制代码
# Node.js/PM2日志
pm2 logs --lines 200 > pm2_logs.txt

# 或查看日志文件
cat ~/.pm2/logs/*.log | tail -200

# Next.js构建日志
cat .next/build-manifest.json
cat .next/trace

# 检查错误日志
find /var/www -name "*.log" -mtime -7 -exec echo "=== {} ===" \; -exec tail {} \;

第五部分:针对React2Shell的专项检查

5.1 检查Node.js依赖漏洞

bash 复制代码
cd /path/to/your/project

# 运行npm审计
npm audit > npm_audit.txt
cat npm_audit.txt

# 检查具体的CVE
npm audit | grep -i "CVE-2025-55182"

# 查看过时的包
npm outdated > npm_outdated.txt

5.2 检查React Server Function端点

bash 复制代码
# 查找项目中的Server Actions
find . -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" | xargs grep -l "use server"

# 查找API路由
find . -path "*/app/api/*" -o -path "*/pages/api/*"

# 检查是否有可疑的Server Component
grep -r "flight" . --include="*.js" --include="*.jsx"

5.3 检查恶意文件特征

bash 复制代码
# 查找base64编码的可疑文件
find /var/www /tmp /dev/shm -type f -exec grep -l "eval(base64_decode" {} \;

# 查找PHP后门(如果使用PHP)
find /var/www -name "*.php" -exec grep -l "eval(\$_POST\|system(\$_GET\|exec(\$_REQUEST" {} \;

# 查找Webshell常见名称
find /var/www -type f -name "c99.php" -o -name "r57.php" -o -name "shell.php" -o -name "cmd.php"

# 查找最近修改的可疑扩展名文件
find /var/www -type f \( -name "*.suspected" -o -name "*.bak" -o -name "*.tmp" \) -mtime -7

5.4 检查内存中的进程

bash 复制代码
# 查看所有Node.js进程
ps aux | grep node

# 检查进程的打开文件
for pid in $(pgrep -f node); do
  echo "=== PID $pid ==="
  sudo lsof -p $pid
done > node_process_files.txt

# 检查进程的环境变量
for pid in $(pgrep -f node); do
  echo "=== PID $pid Environment ==="
  sudo cat /proc/$pid/environ | tr '\0' '\n'
done > node_process_env.txt

# 检查进程的命令行参数
for pid in $(pgrep -f node); do
  echo "=== PID $pid Command ==="
  sudo cat /proc/$pid/cmdline | tr '\0' ' '
  echo
done

第六部分:高级排查技术

6.1 检查内存映射

bash 复制代码
# 查看特定进程的内存映射
sudo cat /proc/$(pgrep -f node | head -1)/maps > process_maps.txt

# 检查是否加载可疑库
grep -E "tmp|shm|deleted" process_maps.txt

6.2 网络流量捕获

bash 复制代码
# 捕获30秒的流量用于分析
sudo tcpdump -i any -w /tmp/traffic_capture.pcap -G 30 -W 1

# 只捕获到特定端口的流量
sudo tcpdump -i any -w /tmp/suspicious_traffic.pcap port 4444 or port 5555

# 实时查看流量
sudo tcpdump -i any -n -A | grep -E "POST|GET|shell|backdoor"

6.3 查找隐藏进程

bash 复制代码
# 比较ps和/proc的差异(检测rootkit隐藏)
ls /proc | grep -E '^[0-9]+$' > proc_pids.txt
ps aux | awk '{print $2}' | tail -n +2 > ps_pids.txt
diff proc_pids.txt ps_pids.txt

# 使用unhide工具
sudo apt install unhide -y
sudo unhide proc

6.4 检查启动项和服务

bash 复制代码
# 查看所有systemd服务
systemctl list-units --type=service --all > systemd_services.txt

# 查找最近修改的服务文件
find /etc/systemd /lib/systemd -name "*.service" -mtime -7

# 检查开机自启动
ls -la /etc/rc*.d/
ls -la ~/.config/autostart/

# 查看正在运行的服务
systemctl list-units --type=service --state=running

第七部分:修复和加固

7.1 紧急修复漏洞

bash 复制代码
cd /path/to/your/project

# 使用官方修复工具(Next.js)
npx fix-react2shell-next

# 或手动更新React
npm install react@19.2.1 react-dom@19.2.1

# 更新Next.js到安全版本
npm install next@latest  # 确保>=16.0.7, 15.5.7等安全版本

# 强制更新所有依赖
npm update --force

# 清理并重建
rm -rf node_modules package-lock.json
npm install
npm run build

7.2 清理恶意文件

bash 复制代码
# 根据前面的排查结果,删除可疑文件
# 示例:
sudo rm -f /tmp/suspicious_file
sudo rm -rf /dev/shm/malware_dir

# 清理定时任务
sudo crontab -e  # 删除可疑条目

# 删除可疑用户
sudo userdel -r suspicious_user

# 清理SSH密钥
# 备份后编辑 ~/.ssh/authorized_keys,删除未知密钥

7.3 系统加固

bash 复制代码
# 1. 修改SSH端口和配置
sudo nano /etc/ssh/sshd_config
# 设置:
# Port 2222  # 非22端口
# PermitRootLogin no
# PasswordAuthentication no
# PubkeyAuthentication yes

sudo systemctl restart sshd

# 2. 配置UFW防火墙
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp  # 你的SSH端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

# 3. 安装fail2ban
sudo apt install fail2ban -y

# 配置fail2ban
sudo nano /etc/fail2ban/jail.local
# 添加:
# [sshd]
# enabled = true
# maxretry = 3
# bantime = 3600

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 4. 设置文件完整性监控
sudo apt install aide -y
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# 设置每日检查
echo "0 2 * * * root /usr/bin/aide --check" | sudo tee -a /etc/crontab

# 5. 限制访问敏感目录
sudo chmod 700 /root
sudo chmod 600 /root/.ssh/authorized_keys
sudo chmod 1777 /tmp

# 6. 禁用不必要的服务
sudo systemctl disable avahi-daemon
sudo systemctl stop avahi-daemon

7.4 部署WAF规则

如果使用Cloudflare或其他WAF:

bash 复制代码
# Cloudflare用户自动受保护(从2025年12月2日起)

# 如果使用ModSecurity,添加规则:
sudo nano /etc/modsecurity/custom_rules.conf

# 添加针对React2Shell的规则:
# SecRule REQUEST_METHOD "@streq POST" \
#   "chain,id:1000001,phase:2,deny,status:403,\
#   msg:'React2Shell Attack Attempt'"
# SecRule REQUEST_URI "@rx /(_next/static|api)" \
#   "chain"
# SecRule REQUEST_BODY "@rx (\$ACTION_REF|\$ACTION_)"

sudo systemctl restart apache2

7.5 监控设置

bash 复制代码
# 安装监控工具
sudo apt install sysstat iotop htop nethogs -y

# 设置日志轮转
sudo nano /etc/logrotate.d/custom
# 添加:
# /var/log/custom/*.log {
#     daily
#     rotate 30
#     compress
#     delaycompress
#     notifempty
#     create 0640 root adm
# }

# 设置告警脚本
cat > /usr/local/bin/check_suspicious.sh << 'EOF'
#!/bin/bash
# 检查CPU使用率
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "$CPU > 80" | bc -l) )); then
    echo "High CPU usage: $CPU%" | mail -s "Server Alert" admin@example.com
fi

# 检查可疑连接
SUSPICIOUS=$(netstat -an | grep -E ":(4444|5555|6666)" | wc -l)
if [ $SUSPICIOUS -gt 0 ]; then
    echo "Suspicious network connections detected" | mail -s "Security Alert" admin@example.com
fi
EOF

sudo chmod +x /usr/local/bin/check_suspicious.sh

# 设置每小时运行
echo "0 * * * * /usr/local/bin/check_suspicious.sh" | sudo crontab -

第八部分:生成排查报告

8.1 整理发现

bash 复制代码
# 创建最终报告
cat > investigation_report.md << EOF
# 服务器入侵调查报告
## 调查时间: $(date)
## 服务器信息: $(hostname) - $(hostname -I)

### 1. 漏洞确认
- React版本: $(npm list react | grep react)
- Next.js版本: $(npm list next | grep next)
- 是否受CVE-2025-55182影响: [是/否]

### 2. 发现的可疑活动
$(cat suspicious_findings.txt 2>/dev/null || echo "无")

### 3. 被修改的文件
$(cat modified_files.txt 2>/dev/null || echo "无")

### 4. 可疑进程
$(cat suspicious_processes.txt 2>/dev/null || echo "无")

### 5. 异常网络连接
$(cat suspicious_connections.txt 2>/dev/null || echo "无")

### 6. 采取的修复措施
- [ ] 更新React/Next.js到安全版本
- [ ] 清理恶意文件
- [ ] 修改密码和密钥
- [ ] 加固系统配置
- [ ] 部署监控

### 7. 建议
- 立即更新到最新安全版本
- 实施更严格的访问控制
- 定期进行安全审计
- 考虑使用专业的安全服务

调查人员: [你的名字]
报告生成时间: $(date)
EOF

cat investigation_report.md

第九部分:预防和持续监控

9.1 实施安全最佳实践

  1. 依赖管理:

    bash 复制代码
    # 每周检查依赖更新
    npm audit
    npm outdated
    
    # 使用Dependabot或Renovate自动更新
  2. 代码审查:

    • 所有代码变更必须经过审查
    • 使用静态代码分析工具(如ESLint、SonarQube)
  3. 最小权限原则:

    • Node.js进程使用专用非特权用户运行
    • 数据库使用只读账户(当可能时)
  4. 网络隔离:

    • 使用私有网络
    • 限制出站连接
    • 实施零信任架构

9.2 持续监控检查清单

每日检查:

  • 查看fail2ban日志
  • 检查CPU/内存使用率
  • 查看最新的访问日志

每周检查:

  • 运行完整的安全扫描(rkhunter, ClamAV)
  • 检查系统更新
  • 审查用户账户和权限
  • 备份验证

每月检查:

  • 完整的漏洞评估
  • 渗透测试
  • 审查日志保留策略
  • 更新应急响应计划

第十部分:应急联系和资源

10.1 官方安全公告

10.2 安全工具资源

10.3 威胁情报

  • AWS威胁情报: 关注Earth Lamia, Jackpot Panda等组织
  • 攻击指标(IOCs): 参考Datadog Security Labs发布的IOC列表

结语

CVE-2025-55182是一个极其严重的漏洞,需要立即采取行动。即使你认为服务器未受影响,也建议进行完整的排查并应用所有安全更新。

最重要的三步:

  1. 立即更新 React/Next.js到安全版本
  2. 全面排查 使用本文提供的命令和工具
  3. 持续监控 不要认为一次性排查就足够

记住:安全是一个持续的过程,不是一次性的行动。保持警惕,定期更新,及时响应。


免责声明: 本指南仅供教育和防御目的使用。作者不对任何误用或损害负责。在生产环境执行任何操作前,请确保有完整备份并理解每个命令的含义。

相关推荐
打小就很皮...2 小时前
前端 Word 导出:自定义页眉表格的实现方案
前端·word·react·页眉设置
芯盾时代2 小时前
“两重“之 经济安全
网络·安全·信息安全·数据安全
白帽子黑客杰哥2 小时前
Web安全技术:构建数字世界的防护盾牌
安全·web安全·网络安全·渗透测试·漏洞挖掘·副业
漏洞文库-Web安全2 小时前
渗透测试中的方法论
linux·运维·学习·安全·web安全·网络安全·逆向
Whoami!3 小时前
❽⁄₃ ⟦ OSCP ⬖ 研记 ⟧ 修改漏洞利用脚本 ➱ 分析漏洞利用脚本(.py)
网络安全·信息安全·缓冲区溢出
白帽子黑客罗哥5 小时前
湖南网安基地科技有限公司的课程怎么样?费用值不值?
web安全·网络安全·实战项目·湖南网安基地
独行soc1 天前
2025年渗透测试面试题总结-273(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
独行soc1 天前
2025年渗透测试面试题总结-274(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
xing.yu.CTF1 天前
ATT&CK实战系列--蓝队防御(五)
网络安全·渗透测试·应急响应·红蓝对抗·内网对抗