資訊基準日:2026-10-29。本文整理截至當日的公開資訊,版本與日期以各專案官方公告為準;標示「需查證」處代表目前缺乏可驗證的一手來源。
這一年多來,資安新聞上冒出一長串「某某 2Shell」:React2Shell、PHP2Shell、Node2Shell、Broccoli2Shell⋯⋯看起來像同一種新型攻擊正在蔓延。其實不是。
如果你現在只想做三件事:
下面先說明這波命名潮怎麼來的,再按「誰該負責修」把成員分成三大類逐一介紹,最後附一份自查與修補清單。
可以查到的最早一個「X2Shell」是 2025 年 12 月的 React2Shell,由發現者自己命名——研究者 Sylvie Mayer 與 Lachlan Davidson 在各自的文章裡說他們把 CVE-2025-55182「稱為 react2shell」(sylvie.fyi、lachlan.nz)。這個「-Shell」字尾的系譜更早可追到 2021 年的 Log4Shell(Wikipedia)與 2022 年的 Spring4Shell(Wikipedia);不過要說 X2Shell 這個格式「源自」Log4Shell,目前沒有來源明說,只能當成語感上的延續。
到了 2026 年 10 月,這個命名幾乎成了行銷慣例。資安廠商各自替漏洞取暱稱、搶註 something2shell 的網域;broccoli2shell.com 站方就觀察到「最近每個嚴重漏洞都配一個 2shell 網域,大家搶著註冊」(broccoli2shell.com)。The Hacker News 的週報甚至用「This2Shell、That2Shell、Everything2Shell」來揶揄這股風氣(THN)。
值得注意的是:官方文件幾乎不用這些暱稱。 PHP 官方公告、台灣資安署與 TWCERT/CC 的警訊,一律只寫 CVE 編號(資安署、TWCERT/CC)。暱稱方便記憶和傳播,但也正是它造成誤解——尤其當一個漏洞有好幾個名字的時候。
下表整理截至 2026-10-29 可查證的成員。KEV 指美國 CISA 的「已知遭利用漏洞清單」(Known Exploited Vulnerabilities),列入代表有實際遭攻擊的證據。

| 暱稱 | CVE | 大類 | 產品 | 漏洞類別 | 修復版本 | KEV |
|---|---|---|---|---|---|---|
| React2Shell | CVE-2025-55182 | 框架 | React Server Components | 不安全反序列化 | React 19.0.1/19.1.2/19.2.1 | 2025-12-05 |
| WP2Shell | CVE-2026-63030+CVE-2026-60137 | 應用程式 | WordPress 核心 | SQL injection → RCE | 6.8.6/6.9.5/7.0.2 | 2026-07-21 |
| XSS2Shell | CVE-2026-64638 | 應用程式 | WordPress 核心 | XSS 串接 → RCE | 7.0.3 | 否 |
| KindaRails2Shell | CVE-2026-66066 | 框架 | Rails Active Storage | 影像處理不安全操作 | 7.2.3.2/8.0.5.1/8.1.3.1 | 否 |
| Mail2Shell | CVE-2026-28289 | 應用程式 | FreeScout | 上傳過濾繞過 | 1.8.207 | 否 |
| Comment2Shell | 對應待確認 | 應用程式 | WordPress 核心 | XSS | 7.1.1 | 否 |
| Click2Shell | 揭露時無 CVE | 應用程式 | WordPress 核心 | (未載明) | 7.1.1 | 否 |
| Plex2Shell | CVE-2026-96652/96654/96655/96656 | 應用程式 | Plex Media Server | 漏洞鏈 | 1.43.3.10861 | 2026-10-20 |
| PHP2Shell | CVE-2026-109618+CVE-2026-109619 | 語言/函式庫 | PHP 核心 | 記憶體破壞、釋放後使用 | 8.2.35/8.3.36/8.4.27/8.5.12 | 2026-10-26 |
| Node2Shell/HTTP2Shell/Broccoli2Shell/Brotli2Shell/Python2Shell | CVE-2026-111497 | 語言/函式庫 | Google Brotli 解碼器 | 記憶體越界寫入 | Brotli 1.0.10/1.1.1/1.2.1;見第三節 | 2026-10-27 |
| HTML2Shell | 無(惡搞) | — | — | — | — | — |
這一類影響面最廣,因為受害的是所有人共用的底層。負責處理的是維運與平台團隊:升級、重啟、重建映像,缺一不可。
2026 年 10 月 21 日,PHP 官方同時修補兩個嚴重漏洞(php.net 公告、GHSA w8hw 與 6wmf)。概念上,問題出在 PHP 處理「請求中途因錯誤而中斷」時沒有把狀態清乾淨,殘留的半成品狀態被同一個工作程序的下一個請求沿用,進而造成記憶體破壞與釋放後使用(use-after-free)。攻擊者有機會藉此在不登入的情況下於伺服器執行程式碼。
要注意風險落差:根據 PHP 官方與多家分析,Apache mod_php 的預設環境已被證實可被利用,而 PHP-FPM 的前提較窄、需要先觸發應用層的致命錯誤,且攻擊得讓連續請求落在同一個工作程序上,可靠度不高(watchTowr FAQ、Sansec)。換句話說,新聞標題的恐慌程度,比多數實際部署的風險要高。
修復版本為 PHP 8.2.35/8.3.36/8.4.27/8.5.12。8.1 以下沒有官方修補(7.4/8.0/8.1 僅有原始碼 backport),這些 EOL 分支的使用者應盡快升級到受支援版本。
CISA 於 10 月 26 日將兩個 CVE 都列入 KEV(CISA 公告)。影響規模具體可感:Wikimedia 基金會為了防範,在 10 月 20 日就預防性地把 Toolforge、Cloud VPS、Phabricator 等社群服務下線(Wikimedia Diff);截至 10 月 28 日,Phabricator 等已完全恢復,Cloud VPS 與 Toolforge 僅部分恢復。在台灣,據數發部資安署在記者會上的說明(經 iThome 報導),約有 2.8 萬個對外網站使用 PHP,其中約 200 個是政府網站;資安署也在第一時間發布了警訊(資安署新聞稿)。

圖片來源:Wikimedia Foundation & Addonian1123, CC BY-SA 4.0, via Wikimedia Commons(檔案頁)
另外有一個常被混為一談的 CVE-2026-115560,是 PHP session upload progress 相關、官方評為「不太可能被利用」的問題,截至 10-29 尚未在 NVD/CVE.org 留下紀錄,修補也還沒釋出。它不是 PHP2Shell 的一部分,「第三個 PHP2Shell 漏洞」只是媒體標題的說法。
這是整波裡最能說明「暱稱害人」的案例。Node2Shell、HTTP2Shell、Broccoli2Shell、Brotli2Shell、Python2Shell——這五個名字指的是同一個 CVE,根源在 Google 的 Brotli 壓縮函式庫的 C 版解碼器(1.0.3 至 1.2.0),概念上是解碼器在遇到某種異常輸入時誤判狀態,把攻擊者的資料寫到了緩衝區之外(越界寫入)。
名字為什麼這麼多?因為每家廠商從自己看到的角度命名:
| 名字 | 命名者 | 命名角度 |
|---|---|---|
| Node2Shell | Imperva(文章) | 從受害的 Node.js 命名 |
| HTTP2Shell | 來源不明,最早見於 Aikido | 從 HTTP 傳輸命名(與 HTTP/2 無關) |
| Broccoli2Shell | Juliano Rizzo(broccoli2shell.com,據網站所述) | Brotli 的諧音玩梗 |
| Brotli2Shell | Tenable(FAQ) | 從真正有漏洞的函式庫命名 |
| Python2Shell | 來源不明 | 從受害的 PyPI 套件命名 |

這就是風險所在:看到 Node2Shell 的人去升級 Node、看到 Python2Shell 的人去升級 PyPI 套件,但真正要修的是 Brotli——凡是打包了這個函式庫的地方都要處理。受影響的載體包括 Node.js、Bun、PyPI 的 brotli 與 brotlicffi、.NET,以及 PHP 的 Windows build。純 Go 的移植版 github.com/andybalholm/brotli 有相同的邏輯錯誤,但因為 Go runtime 有邊界檢查,只會造成程式崩潰(DoS),不會變成 RCE,而且沒有獨立的 CVE(Sweet Security)。
利用的前提是:你的程式會去解壓攻擊者可以控制的 Brotli 資料——例如用 fetch() 讀取帶 br 壓縮的回應、用 Express 5/body-parser 解開 br 的請求內容,或直接呼叫解壓函式。能不能走到 RCE 還高度依賴執行環境;Imperva 自己也只在特定一個 Node 官方映像上成功,資安媒體 CyberScoop 引述多位專家提醒,Brotli 的影響「完全取決於實作」、可利用性常被高估(CyberScoop)。對多數人來說,較實際的下限是 DoS。
修復版本:Brotli 升到 1.0.10/1.1.1/1.2.1;Node.js 22.23.4/24.22.1/26.12.1(Node.js 公告);PyPI brotli 1.2.1、brotlicffi 1.2.1.0(GHSA);.NET 見 dotnet/announcements。CISA 於 10 月 27 日列入 KEV。
升級後有個陷阱:Node.js 24.22.1(已修補)的
process.versions.brotli仍然顯示 1.2.0,用這個字串判斷有沒有修好會誤判(ELLIO 分析)。請改看 Node.js 本身的版號。
這一類要修的是你專案的相依套件。負責處理的是開發團隊,特別要留意「框架自帶一份副本」的情況。
這是整個家族的起點,2025 年 12 月揭露。概念上,React Server Components 在還原前端傳來的資料時,沒有擋掉物件從原型鏈繼承來的屬性,讓攻擊者可以在不登入的情況下讓伺服器執行程式碼(react.dev 公告、GHSA-fv66-9v8q-g76r)。
兩個重點:第一,預設設定就會中招,你不需要自己定義任何 Server Function。第二,用 create-next-app 的預設 Next.js App Router 專案即受影響,而 Next.js 自帶一份 React,只升級 react 套件不夠,要連 Next.js 一起升。這個漏洞揭露後數小時內就有國家級攻擊組織投入利用,約 30 小時後出現公開 PoC(Datadog、AWS),CISA 於 12 月 5 日列入 KEV。
修復版本為 React 19.0.1/19.1.2/19.2.1 及對應的 Next.js 版本。順帶一提,Next.js 當初另外編的 CVE-2025-66478 已被 NVD 以「與 55182 重複」為由駁回,所以你只需要追 CVE-2025-55182。
Ruby on Rails 的 Active Storage 在用 libvips 處理圖片時,沒有停用 libvips 的不安全操作。據資安廠商 Rapid7 的分析,這可導致任意檔案讀取、並「可能」造成 RCE(Rapid7);「任意檔案讀取/可能 RCE」這個描述目前只見於 Rapid7,CVE 官方文字未明載。前提是你的應用有用 Active Storage+libvips 去處理不可信的圖片。修復版本為 Rails 7.2.3.2/8.0.5.1/8.1.3.1,未列入 KEV。
這一類要更新的是整套軟體本體,負責處理的是網站/服務的管理者。
WordPress 核心在 2026 年下半年連續出現多個被冠上 2Shell 的漏洞:
客服信箱系統 FreeScout 的漏洞,概念上是用特殊字元繞過上傳檔案的過濾、寫入設定檔而取得 RCE(OX Security)。前提是攻擊者得先有一個通過驗證的帳號。修復版本為 FreeScout 1.8.207,未列入 KEV。
Plex Media Server 的四個 CVE 串成的漏洞鏈。修復版本為 1.43.3.10861 以上,四個 CVE 都在 10 月 20 日列入 KEV,並有被用來植入挖礦程式的報導(SecurityAffairs,單一來源)。自架 Plex 的人應盡快更新。
命名潮熱起來,假漏洞也跟著出現。
以下是把前面散落的注意事項集中起來的操作清單,與上面的說明分開放,方便你照著做。
升級本身
node:24.22.0)仍然帶著漏洞版本;Node、Bun 自帶 Brotli,.NET 的 self-contained/NativeAOT 需重新建置。版本判斷的陷阱
8.2.35-1~deb12u1),只比對上游 X.Y.Z 的掃描器會誤報(Ubuntu、Debian)。process.versions.brotli 修補後仍顯示 1.2.0,改看 Node 本身版號。-1 字尾)以內含修補後的 Brotli,PHP 版號不變。緩解只是過渡,不能取代升級
Content-Encoding: br)擋得住請求內容路徑,但擋不住你的程式主動用 fetch() 去讀惡意伺服器回應的出站路徑——那只能靠升級。RLIMIT_AS/RLIMIT_DATA 當緩解,那反而會觸發漏洞路徑。升級前後
別被蹭熱度的 repo 害到
這波還沒完全落定,可以留意這幾個可觀察的指標:
說到底,這波給工程師的教訓很單純:暱稱是給新聞用的,修補要認 CVE 編號和受影響的函式庫。把這兩件事對起來,再走一遍上面的清單,就不會被十幾個名字繞暈。