資安事件與漏洞

Log4Shell(CVE-2021-44228)——日誌函式庫的漏洞,以及為何團隊無法迅速確認自己是否在用

Log4Shell(CVE-2021-44228)是 Java 日誌函式庫 Log4j 的 RCE 漏洞(CVSS 10.0),即使未直接使用也會經由傳遞性相依受影響。說明 SBOM、相依套件的機器化監控、迅速修補等至今有效的教訓。

發布於 2026-06-07 更新於 2026-10-23 閱讀時間 2 分鐘
本頁內容

回顧過去的重大事故,不去重現攻擊,而是聚焦於『對當下你的維運真正有用的教訓』。

2021/12
被發現
10.0
CVSS(最嚴重級別)
傳遞性相依
核心問題
多個
後續的跟進 CVE

發生了什麼:寫入一行日誌成了攻擊途徑

Log4j 是承擔日誌輸出這一極其常見處理的函式庫,在 Java 應用程式中被非常廣泛地使用。問題在於,這個函式庫會把日誌所含字串中的特定寫法解釋為『參照外部進行解析』的功能,結果導致執行由外部指定的程式碼。

也就是說,攻擊者只需在『會被記入日誌的位置』(使用者名稱、HTTP 標頭等)放入經過構造的字串,就有可能在伺服器端導致程式碼執行。日誌輸出這種被動的處理竟然可能成為攻擊途徑,這讓許多人大感意外。

為什麼難以判斷自己是否受影響

許多應用程式並沒有直接引入 Log4j。是框架或 SDK 在內部使用了它。這就是 傳遞性相依(transitive dependency)。相依套件的相依套件,再往下還有相依套件。如果手裡沒有自己的『物料清單』,連是否受影響都無從判斷。

你的應用程式(package.json 裡的一行)
└─▶
框架 / SDK(直接相依)
└─▶
日誌元件(相依套件的相依套件)
└─▶
Log4j ← 漏洞就在這裡(沒有直接引入的印象)
即便你引入的只有一個,它背後也藏著幾十個『相依套件的相依套件』。Log4j 就在其中。

最大的問題是不知道自己是否在用

在『不知道是否在用』的狀態下,連處置的優先順序都無從排定。是否掌握自己的物料清單(SBOM),在很大程度上決定了能多快應對。

時間軸

  1. 2021-12-09〜10

    漏洞被廣泛知曉,全世界一齊奔走確認『我們是否受影響』。
  2. 緊隨其後

    緊急修補與臨時緩解措施陸續展開。攻擊嘗試也急劇增多。
  3. 此後

    修補此前修復不足的後續 CVE 接連公布。『修過一次』並沒有就此結束。

至今依然有效的教訓

1

擁有 SBOM(物料清單)

把自己的應用程式在內部使用了什麼可視化出來。用 npm ls、鎖定檔與 SBOM 產生工具掌握『實際在運行的相依套件』。只看『直接引入的東西』是不夠的。

2

用機器監控相依套件

在 CVE 公布的那一刻,自動判定是否受影響(Dependabot / osv-scanner)。能連同傳遞性相依一起檢查,正是機器監控的強項。靠人工檢查必然會有遺漏。

3

加快修補的維運

平時就固定練習「升級、驗證、上線」的流程,以便在緊急時刻能迅速完成。也請參閱 相依套件跟進的機制。

4

追蹤後續 CVE

Log4Shell 之後,對修復的再修復出現了多次。不要在『修過一次』就收手;要持續追蹤後續報導。

接下來閱讀

來源與確認範圍

以下原始資料支持上文的設定、影響範圍或應對措施,連結於2026年10月23日確認。請核對資料中的版本與設定條件。清單優先順序及經驗是本站的整理,不代表全文重新核驗或安全保證。

FAQ

QLog4Shell 的問題新在哪裡?
A

它在全球範圍內暴露了傳遞性相依(transitive dependency)的危險:『即使你沒有印象自己直接引入過,它也在另一個函式庫內部被使用著,並且存在漏洞』。如果不掌握自己的 SBOM(物料清單),連是否受影響都無從判斷。

Q為什麼日誌輸出會成為攻擊通道?
A

因為 Log4j 把日誌字串中的特定寫法當作『參照外部進行解析』的功能來解釋。攻擊者只需在會被記入日誌的位置(使用者名稱、HTTP 標頭等)放入經過構造的字串即可,本應是被動的日誌輸出由此變成了執行通道。

Q怎樣才能不重蹈覆轍?
A

三點:①用機器監控相依套件(Dependabot/osv-scanner),自動偵測對應的 CVE;②產生 SBOM,把『自己在用什麼』可視化;③建立迅速修補的維運機制。此外,追蹤後續 CVE(對修復的再修復)同樣重要。