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 确认是否受影响
首先判断你的服务器是否使用了受影响的版本:
# 检查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异常、可疑进程、异常网络连接):
# 临时断开外网访问(保留SSH)
sudo ufw deny 80/tcp
sudo ufw deny 443/tcp
# 或完全隔离服务器
sudo systemctl stop nginx # 或apache2
重要提醒: 如果计划报警或进行法律诉讼,不要修改系统,立即联系执法部门保留证据。
1.3 创建取证快照
# 创建取证日志目录
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 检查可疑进程
# 查看所有进程及其详细信息
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 检查网络连接
# 查看所有网络连接
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 检查定时任务(后门常驻手段)
# 检查所有用户的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 检查近期文件修改
# 查找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
# 检查所有用户账户
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(病毒扫描)
# 安装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
# 安装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
# 安装
sudo apt install chkrootkit -y
# 运行检测
sudo chkrootkit > chkrootkit_report.txt
# 查看结果
cat chkrootkit_report.txt | grep INFECTED
3.4 使用AIDE检查文件完整性
# 安装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进行安全审计
# 安装Lynis
sudo apt install lynis -y
# 执行完整审计
sudo lynis audit system > lynis_report.txt
# 查看安全建议
grep "Suggestion" lynis_report.txt
第四部分:日志分析
4.1 分析认证日志
# 查看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服务器日志
# 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 分析系统日志
# 查看系统消息
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 分析应用日志
# 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依赖漏洞
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端点
# 查找项目中的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 检查恶意文件特征
# 查找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 检查内存中的进程
# 查看所有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 '
