資安
資安週報 2026-W43:PHP、GitLab 與憑證私鑰外洩
2026 年第 43 週(10 月 19 日起)的安全更新整理:PHP 兩個未經認證的遠端執行漏洞、GitLab 一則 CVSS 10.0、eMudhra 八張中繼憑證私鑰外洩,以及 Node.js、Laravel、Java、Chrome。每一條都回到官方公告核對,查不到的也列出來。
安全公告出來那天,你問負責系統的人:「我們有沒有中?」他回:「我們用的是最新版,應該沒事。」這句話聽起來讓人放心,但它其實沒有回答你的問題。
每一則安全公告都長得差不多:哪幾個版本有問題、修好的是哪一版、一時升不了先做什麼。要拿它來判斷自己中不中,只需要一個前提——知道你的網站現在實際在跑的是哪一版。這一步你不必自己做,但要聽得出對方有沒有真的做。這是資安新手入門的第一篇,從這件看起來最簡單、其實很容易出錯的事開始。
〈不懂技術的老闆,怎麼判斷工程師講的是不是真的〉那篇講過:你不需要懂技術,但需要懂怎麼問。放到安全公告上,一個有回答到問題的答案,一定包含三樣東西:
少了任何一樣,都還不算回答。下面四句話,都是「聽起來像回答、其實還沒回答」。
先問一句:最新版的什麼?
同一台主機上,同一個程式語言可能有兩份。以 PHP 為例,工程師在主機上打指令查到的,是「命令列用的那一份」;網站實際在跑的,可能是另一支專門處理網頁請求的程式。兩份可以是不同版本,升級其中一份也不會帶動另一份。所以「我查過了,是最新版」很可能是對的——只是查的不是網站在跑的那一份。
專案裡會有一份檔案,記錄網站用了哪些現成的套件、各是哪一版。問題是,以 Node.js 常用的套件工具 npm 為例,它預設記下的不是一個版本,而是一個允許的範圍。例如寫著「15.5.0」前面加一個符號,意思其實是「15.5.0 以上、16 以下都可以」。同一份設定,在兩台機器上裝出來的可能是兩個不同的版本,而安全公告在意的,正好是最後那一碼。
有些網站跑在容器裡。容器可以想成主機上的一個獨立小房間,裡面有自己的一整套程式。主機升級了,房間裡的東西一個字都不會變。
反過來也一樣:換了新的容器版本,已經在跑的那一個不會自己換,要重新建立一次才會生效。所以要問兩件事:網站是不是跑在容器裡?如果是,查的是容器裡面,還是外面的主機?
同一台主機上,可能同時裝著好幾個版本:升級時裝了新的、舊的沒移除,或是某個舊網站還靠舊版在跑,刻意留著。這時候「升級好了」可能只對其中一個版本成立,接在舊版上的那幾個網站,其實還沒動。
前面四句都是「以為沒事,其實沒查對」。還有一種是反方向的:以為中了,其實已經修好。
有些主機的程式是從作業系統的套件庫裝的。以 Debian 為例,它的安全團隊說明過做法:不是升到新版本,而是把安全修補移植回原本那個版本,好讓修補盡量不改變其他行為。所以版本號看起來比公告的修補版舊,不一定代表沒修,要看那個套件自己的修補紀錄。
這一種錯比較不危險,但會讓人白忙一場。聽到「版本比公告舊」時,可以多問一句:「這是作業系統的套件嗎?套件的修補紀錄查過了嗎?」
把上面幾件事合起來,安全公告出來之後,你應該收到的是一張像這樣的表,而不是一句「應該沒事」:
| 項目 | 實際在跑的版本 | 從哪裡查的 | 公告的修補版 | 結論 |
|---|---|---|---|---|
| 網站 A 的程式語言 | (具體版本號) | 網站本身/容器裡面 | (公告上的版本號) | 已修補/要升級 |
| 網站 A 用到的套件 | (具體版本號) | 伺服器上實際裝的 | (公告上的版本號) | 已修補/要升級 |
| 同一台主機上的其他版本 | (列出每一個) | 主機上的清單 | (公告上的版本號) | 已修補/要升級/可以停用 |
如果收到的是這張表,你就算看不懂每一個版本號,也看得出對方查了什麼、在哪裡查、結論是什麼。如果連這張表都做不出來,問題就不只是這一則公告,而是這套系統沒有人在負責——主機、監控、安全更新本來就是持續的工作,〈主機、監控、安全更新:這三件事自己做要花多少時間〉那篇算過這筆帳。
知道自己在跑哪一版,是每一次安全更新的第一步。整理成三件事:
恩梯科技是客製化開發出身的系統軟體公司,現在做的是 AI 系統的長期維護。如果你不確定手上的系統跑的是哪些版本、有幾套要顧,可以從一次系統健檢開始:看的是程式碼、資料庫、部署、資安四個面向,〈系統健檢到底在看什麼〉那篇寫了完整的內容。預約系統健檢
深く取り組む価値のある、少数の企業と長期的な関係を築きます。
お困りですか?
LINEで直接ご相談ください