Engineering · 1 min read
EOL base image 讓安全更新靜默失效
apk upgrade 在 EOL 的 Alpine 分支上跑完,exit 0、log 乾淨、零修補。Dockerfile 看起來有 patch,實際上沒有。失敗模式是一個成功的指令。
apk --update upgrade 跑完了,exit 0,log 乾淨,零修補安裝。Dockerfile 看起來有在 patch;實際上沒有。因為 alpine:3.20 已經 EOL(End of Life,官方不再發布安全修補),分支停止收到更新,所以指令跑了一個成功的空操作。
沒有 error 可以 catch——這就是全部的危險。失敗模式是一個成功的指令,所以 CI 裡不會有任何 exit code、log line、或告警告訴你。唯一的信號是分支的 EOL 日期,而那個日期不在你的 repo 裡。
- Alpine 支援一個 release 大約 2 年。過了 EOL 就不再收到 bugfix 或安全更新。
- 「釘到最後已知好的版本」可能悄悄等於「釘到一個 EOL 的 distro」,兩個目標互相衝突。一個落在 EOL 上的正確性 pin,用真實的 CVE(公開揭露的安全漏洞)修補流交換了一個修正。
- 優先選一個支援中且同時滿足正確性約束的 release;如果不存在,約束本身可能是錯的。重新檢查診斷。
最危險的安全漏洞不是一個紅色的警告,而是一個跑完沒事的綠色指令。
參考來源:
Related: 回到連鎖反應總覽,或參見釘版要附退場計畫和組合 base image 前先查 tag 矩陣。