連元新電腦的老闆(就是我在觸控板進階工具那篇開頭感謝的那位)都在 FB 發文,標記了所有追蹤者,提醒大家 PHP 有漏洞要更新。那時候我正在看 Theo 的直播,一邊更新 Homebrew 和自己的 Nextcloud。直播裡講的遠遠不只 PHP:一長串 CVE,Railway 也掛了,最後聊到 Zeabur。問題比 PHP 大得多。

現在差不多一天一個 CVE,老實說跟得很累。這一週光是 PHP 就有兩個:CVE-2026-109618 和 CVE-2026-109619,CVSS 都是 9.2,不用登入就可能遠端執行程式碼,Qualys 把它們叫做 PHP2Shell。PHP 10 月 21 日釋出 8.5.12、8.4.27、8.3.36、8.2.35 修掉。原本排在 10 月 22 日,因為 CVE 編號 10 月 20 日先在論壇和社群上流出來,PHP 就把發布提前了一天。Railway 那邊,10 月 21 日整個平臺出狀況,建置暫停,API 和管理後臺也受影響,後來還發了資安通知,請使用者撤換存在 Railway 的環境變數。

直播裡那一長串,我事後照各家的官方公告重新整理了一次。這一週(10 月 14 日到 21 日)除了 PHP 和 Railway,比較大的還有這些:

  • 10 月 14 日,Next.js:兩個不用登入就能遠端執行程式碼的嚴重漏洞,修在 16.4.1 和 15.5.28。
  • 10 月 14 日,Nextcloud 的 Collabora 內建 CODE 伺服器(richdocumentscode):CVE-2026-110447,CVSS 9.2,九月和十月都有人實際拿來攻擊。要更新到 26.4.303 或直接移除,只停用不算數。
  • 10 月 15 日,Linux 核心:CVE-2026-99999,CVSS 9.3,虛擬機裡送出的封包可以讓主機把自己的記憶體洩漏出去,研究者在自己的機器上還做到從虛擬機跳到主機執行程式碼。修補版本有 6.12.113、6.18.57、7.2.11 等,要更新的是主機的核心。
  • 10 月 15 日,BeyondTrust Remote Support:CVE-2026-102764,CVSS 9.3,已經被拿來攻擊,CISA 隔天就列進已遭利用的漏洞清單。
  • 10 月 19 日,Plex Media Server:四個漏洞串起來,不用登入就能在伺服器上執行程式碼。10 月 16 日攻擊程式公開之後就被大量利用,要更新到 1.43.3.10861 以後。
  • 10 月 19 日,Apache Camel:CVE-2026-78162,CVSS 10,之前的修補沒有修完整,修在 4.18.5 和 4.22.1。
  • 10 月 21 日,Node.js:一次修了十個 CVE,四個是高風險,其中 Brotli 解碼器的越界寫入可以遠端執行程式碼,修在 22.23.4、24.22.1、26.12.1。
  • 10 月 21 日,GitLab:CVE-2026-110264,CVSS 10,不用登入就可能在伺服器上執行程式碼,自架的要更新到 19.5.1、19.4.3 這一批版本。
  • CISA 從 10 月 15 日到 20 日,又把 9 個已經被拿來攻擊的漏洞加進清單,Atlassian、Fortinet、BeyondTrust、Plex 都在裡面。

這還不是全部,只是我挑出跟自架服務和寫程式比較有關的。

我的 Nextcloud 也是跑 PHP,那天剛好在更新。不過更新跑完,不等於漏洞補好。PHP 官方說 Linux 發行版有先拿到修補,要去看各家的套件;Qualys 也提醒,發行版回移的修補可能還留著舊的版本號。所以我要看的是實際裝上的套件版本,有沒有對上發行版的公告。

Zeabur 被讀走了什麼

我從來沒用過 Zeabur,原因是它的廣告鋪天蓋地。我也一直以為它是剛起步的新公司,看了創辦人林沅霖 10 月 17 日的停止營運公告才知道,公司成立已經大約三年半。公告說部分服務 12 月 1 日起陸續停止,12 月 31 日全部關閉。

Zeabur 10 月 19 日發了事件的初步報告。照報告的說法,10 月 14 日到 15 日(UTC),攻擊者用外洩的內部憑證,進了共享叢集、101 台代管在 GCP 的專用伺服器和內部系統,最後讀走平臺資料庫。被讀走的環境變數有 3,218,965 筆,帳號有 321,810 筆。報告自己寫的根本原因是:長期有效的管理憑證用明文存著,而且從公網就能使用。

細節才是讓我看不下去的地方。共享叢集的管理權杖 2024 年 1 月建立,沒有期限,之後從來沒換過,2026 年 1 月 20 日又被用明文寫進設定儲存庫。GCP 伺服器的 root 密碼,明文寫在初始化設定裡,9 月 3 日就發現了,到 10 月 14 日被打的時候還沒修好;10 月 3 日開始的機密遷移變更,事發時也還沒合併。八月那次事件的報告寫「已停用或輪替所有內部管理金鑰」,這次的報告自己更正,說那句話並不完整。

攻擊持續超過 16 小時,沒有觸發任何告警,是隔天收到使用者回報才開始調查。更麻煩的是備份:叢集每天的備份裡存了所有機密,備份的存取金鑰又跟其他機密放在一起。事件當下他們 15:40 換上的新金鑰,被 16:00 那次備份收進去,攻擊者 20:30 又拿去用了。

Zeabur 的內部網路用的是 Tailscale,平臺資料庫只接受這個網路的連線。攻擊者是拿到內網的管理憑證,自己加了一個節點進去,再用內部的唯讀帳號讀資料庫。所以我覺得問題不在入口,而是裡面到處都是明文的鑰匙。

明文這件事

這是我最不能原諒的地方。我不是工程師,只是公司裡一個小小的 QC,連我都知道 secret 要放環境變數,不能用明文存在設定裡。

報告本身我覺得寫得很好。「已確認」「研判」「無法確認」「推測」分得清清楚楚,八月說得不完整的地方也自己更正了。可是看完我的感覺是,寫報告的效率比修問題高太多:root 密碼 9 月 3 日就知道,十月中還在;報告卻是事發後四天就出來了。

我看這不太像 vibe coding

我分 vibe coding 和 agentic coding,差別不在誰打字,在人有沒有看懂、有沒有把關。理解和執行可以分開這件事,我去年在〈理解與執行的分離〉寫過。

照這個標準看 Zeabur,我反而覺得不太像 vibe coding。公司三年半前成立,比 coding agent 普及還早,創辦人自己也在公告裡說,系統是從一個快速開發專案開始,一路為了市場調整架構、轉換方向。我看比較像人在趕工,技術債一路疊上去。時間上落在 agent 普及之後的,只有 2026 年 1 月 20 日把權杖寫進儲存庫那一筆,可是誰寫的、用什麼工具,報告沒有說。

我也覺得,像樣的 agent 不太會犯這種錯,除非是本機跑的小模型。半開玩笑地說,如果 Zeabur 當時有用 Claude Code,光是一個明文密碼,大概就會被念到死。

資料來源: