Skip to content

Commit e38086b

Browse files
authored
Merge pull request #3 from PiscesXD/main
feat: blog 2025-12-17
2 parents 61544b9 + 2d66b52 commit e38086b

4 files changed

Lines changed: 135 additions & 0 deletions

File tree

blog/authors.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,8 @@ yuyu1015:
33
title: Full-Stack Engineer (全端工程師)
44
url: https://github.com/whes1015
55
image_url: https://github.com/whes1015.png
6+
PiscesXD:
7+
name: PiscesXD
8+
title: Frontend Engineer (前端工程師)
9+
url: https://github.com/PiscesXD
10+
image_url: https://github.com/PiscesXD.png

blog/sharing/2025-12-17.mdx

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
---
2+
title: "不能忽略的 CVE-2025-66478 滿級漏洞 :("
3+
description: "CVE-2025-66478 是一個影響 Next.js 的嚴重安全漏洞,源自 React Server Components (RSC) 協議中的缺陷,可能導致伺服器被遠端執行腳本或指令。還好平常有使用 Docker 部署,大幅降低了損害。"
4+
date: 2025-12-17
5+
slug: sharing-2025-12-17
6+
image: /img/ExpTech_Studio_white.png
7+
authors: [PiscesXD]
8+
tags: [pisces-xd, sharing, cve, next-js, docker]
9+
keywords: [開發分享, Next.js, 安全漏洞, CVE, Docker]
10+
---
11+
12+
import SeverityBadge from "@site/src/components/SeverityBadge";
13+
import StatusBadge from "@site/src/components/StatusBadge";
14+
import ImageLightbox from "@site/src/components/ImageLightbox";
15+
16+
<SeverityBadge level="high" />
17+
<StatusBadge status="resolved" />
18+
19+
---
20+
21+
CVE-2025-66478 是一個影響 Next.js 的嚴重安全漏洞,源自 React Server Components (RSC) 協議中的缺陷,可能導致伺服器被遠端執行腳本或指令。還好平常有使用 Docker 部署,大幅降低了損害。
22+
23+
{/* truncate */}
24+
25+
## 事件概述
26+
27+
- **發現時間:** 2025/12/8
28+
- **CVSS 評分:** 10.0 (Critical)
29+
- **漏洞類型:** 遠端程式碼執行 (Remote Code Execution)
30+
- **攻擊向量:** 網路攻擊,無需身份驗證
31+
32+
## 心得與過程
33+
34+
一開始看到這個漏洞公告時,其實還以為只是「又一個框架安全更新」,沒有特別在意。
35+
直到自己的 IP 被 Cloudflare 列入黑名單之後,才真正意識到事情不單純,背後很可能已經有人在主動嘗試攻擊。
36+
37+
所幸平常習慣使用 Docker 部署,再加上前後端分離設計,讓這次事件的實際影響相對有限:
38+
39+
- 攻擊者無法直接讀取後端服務的敏感資料
40+
- 沒有將實體檔案系統掛載進容器,入侵到宿主機的風險相對較低
41+
42+
最後只需要重新 Build 映像並重新部署,同時更新 Next.js 版本,就能把環境還原成乾淨狀態,算是有驚無險的一次經驗。
43+
44+
## 漏洞詳情
45+
46+
### 技術細節
47+
48+
CVE-2025-66478 源於 React 的上游實作(CVE-2025-55182),在特定條件下,攻擊者可以透過精心構造的請求,觸發伺服器端未預期的執行路徑,進而達成在伺服器上遠端執行腳本或指令。
49+
50+
#### 漏洞成因
51+
52+
1. **React Server Components (RSC) 協議缺陷**
53+
54+
- RSC 協議在處理特定型態的請求時存在安全漏洞
55+
- 攻擊者可以透過惡意請求繞過部分安全檢查
56+
57+
2. **執行路徑控制**
58+
- 漏洞允許攻擊者影響伺服器端的程式碼執行流程
59+
- 在某些情況下,可能繞過原本預期的安全防護機制
60+
61+
#### 攻擊方式
62+
63+
實際觀察到的攻擊行為大致如下:
64+
65+
- 攻擊者連線進來後,會先偵測伺服器上已安裝的套件與環境
66+
- 接著嘗試從遠端下載惡意腳本並在伺服器上執行
67+
68+
目前實際遇到的腳本類型包含:
69+
70+
- **偽裝成 Nginx 的程式或服務**
71+
- **挖礦腳本**
72+
- **後門腳本**(包含開機自動執行的腳本,持久性很強)
73+
- **架設 VPN / Proxy 的腳本**
74+
- **PowerShell 腳本**(針對 Windows 環境)
75+
76+
下方是其中一個惡意腳本的內容截圖(已對部分資訊進行遮蔽處理):
77+
78+
<ImageLightbox
79+
src="/img/sharing/2025-12-17/image.png"
80+
alt="惡意腳本截圖"
81+
title="惡意腳本截圖"
82+
/>
83+
84+
## 參考資源
85+
86+
- [Next.js 官方安全公告](https://nextjs.org/blog/CVE-2025-66478)
87+
- [React CVE-2025-55182](https://github.com/facebook/react/security/advisories)
88+
89+
## 相關日誌記錄
90+
91+
import GithubRepoCard from "@site/src/components/GithubRepoCard";
92+
93+
<GithubRepoCard
94+
owner="ExpTechTW"
95+
repo="CVE-2025-66478"
96+
displayName="CVE-2025-66478"
97+
description="Next.js 的 CVE-2025-66478 漏洞詳情"
98+
/>
99+
100+
## 總結
101+
102+
CVE-2025-66478 是一個極為嚴重的安全漏洞(CVSS 10.0),在最壞情況下甚至可能讓伺服器完全落入攻擊者手中。
103+
這次事件之後,我會更加重視伺服器的安全性,包含:
104+
105+
- 優先更新與安全性相關的套件與框架版本
106+
- 持續關注 CVE 與官方安全公告
107+
- 部署時盡量使用容器化與最小權限原則,降低實際損害範圍
108+
109+
也算是被這次事件好好上了一課:
110+
**安全性更新不是「之後再說」的選項,而是需要排進日常維護流程裡的必修課。**

blog/tags.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ yuyu1015:
33
permalink: /yuyu1015
44
description: YuYu1015
55

6+
pisces-xd:
7+
label: PiscesXD
8+
permalink: /pisces-xd
9+
description: PiscesXD
10+
611
rca:
712
label: RCA
813
permalink: /rca
@@ -17,3 +22,18 @@ sharing:
1722
label: Sharing
1823
permalink: /sharing
1924
description: Sharing
25+
26+
cve:
27+
label: CVE
28+
permalink: /cve
29+
description: CVE
30+
31+
next-js:
32+
label: Next.js
33+
permalink: /next-js
34+
description: Next.js
35+
36+
docker:
37+
label: Docker
38+
permalink: /docker
39+
description: Docker
302 KB
Loading

0 commit comments

Comments
 (0)