前言

2026 年 10 月的這波安全更新,Go 的重點落在 TLS 憑證信任。CVE-2026-111943 對應標準函式庫 crypto/x509 的緊急修補:驗證憑證鏈時,拒絕信任與本次事件相關的中繼 CA 金鑰。官方要求立即升級至 Go 1.26.10 或 1.27.3,漏洞資料庫編號為 GO-2026-6809。Go 發布公告、Go 漏洞資料庫

如果你維護的是 Go API、Webhook、SSO 整合、反向代理或 CLI,這次需要一路追到實際執行的二進位檔。一般 Go 應用會將用到的標準函式庫程式碼編進產物;更新建置機上的 Go 之後,還要重新編譯、發布並替換正式環境中的舊程序,才能套用這段驗證邏輯。

查核日期:2026-10-22,台灣時間 UTC+8。 本文依 Go 官方公告、CVE/Go 漏洞資料庫、公開修補程式碼及業者公告整理。文中的盤點情境與指令供讀者套用,未針對實際服務執行漏洞利用或連線測試。封面為 AI 生成的概念插畫,以鈷藍信任鏈及被移除的琥珀色共同金鑰連結呈現修補意象。

一、先釐清日期與版本:10/21 建檔,修正版已先發布

安全新聞裡的日期,可能指軟體發布、廠商揭露或漏洞資料庫建檔。這次要把三者分開看,才能正確安排更新。

紀錄 日期 代表的意思
Go Release History 2026-10-19 官方發布歷史列出的 Go 1.27.3/1.26.10 日期
Google、Mozilla、Cloudflare 說明 2026-10-20 各業者公開說明 eMudhra 憑證事件與應變措施
GO-2026-6809 與 CVE 紀錄 2026-10-21 漏洞資料庫正式刊登這筆問題

上表保留各來源記載的日期;Go 官方發布歷史的日期不另轉換成台灣時間。GO-2026-6809 的 JSON 記錄則明確標示刊登時間為 2026-10-21T00:27:29Z,換算為台灣時間是 10/21 08:27:29。發布歷史、漏洞資料庫原始紀錄、CVE 紀錄

哪些 Go 版本需要處理?

依官方漏洞紀錄,本次修補基準如下。這些是截至本文查核時應採用的安全版本;後續若有更新,仍應繼續追蹤。

使用中的版本 本次修補方式
Go 1.26.0~1.26.9 升級至 1.26.10,重新建置與部署應用
Go 1.27.0~1.27.2 升級至 1.27.3,重新建置與部署應用
Go 1.25 與更早版本 漏洞紀錄涵蓋更早版本;遷移至受支援分支,或取得供應商的修補證明
發行版或商業供應商重建的 Go 產品 依具體 CVE、套件修訂版與公告確認,留意安全修補的回移版本

Go 的上游支援政策涵蓋最近兩個主要版本,因此當時受支援的是 1.26 與 1.27。掃描器只看原始版本字串,可能無法辨識供應商已回移的修補;需要搭配產品公告判讀。Go 漏洞紀錄、發布與支援政策、Red Hat 對回移修補的說明

Go 團隊將此事列為 URGENT track。依安全政策,這個處理途徑可因生態系完整性受到威脅而啟動,不能僅憑 URGENT 就推論已發生大規模利用。Go 本身也不替漏洞指定 CVSS;若看到 6.8、Important,應註明那是 Red Hat 的 CVSS v3/產品嚴重度評估。Go 安全政策、Red Hat 評估

二、eMudhra 發生什麼事?中繼 CA 金鑰為什麼重要?

HTTPS 連線需要確認對端身分。通常,網站憑證會透過一張或多張中繼 CA 憑證,連到用戶端信任的根憑證,形成憑證鏈。驗證者需要檢查簽章、名稱、用途及其他限制,才能接受這條鏈。

Google 的官方說明確認,事件涉及 8 張 eMudhra 下屬 CA 憑證的私鑰;這些金鑰產生時的隨機性不足,使攻擊者有能力偽造 HTTPS 憑證。對仍信任相關 CA 的用戶端,攻擊者可能冒充其他網站。Google 安全團隊說明

中繼 CA 具有簽發下層憑證的能力,所以影響範圍會沿著信任關係擴散。自己的網站憑證由其他 CA 簽發,也仍需盤點主動連線的 Go 程式信任了哪些 CA:例如它呼叫金流 API、SSO 或物件儲存時,會成為驗證遠端憑證的一方。

flowchart TD
    R[用戶端信任的根 CA] --> I[本次不再可信任的中繼 CA 金鑰]
    I --> F[攻擊者可簽發偽造的網站憑證]
    F --> N[攻擊者還需要影響連線路徑或導向]
    N --> V[Go 程式驗證對端憑證]
    V --> O[舊驗證路徑可能接受此信任鏈]
    V --> P[修補後排除含指定公鑰的憑證鏈]

這張圖描述風險成立的條件。Red Hat 將主要後果列為中間人攻擊:攻擊者需要相應憑證與網路位置等條件,才可能攔截或修改通訊。實務上,若受影響的連線傳送 Token、帳號資訊或重要 API 回應,就需要納入機密性與完整性的評估。Red Hat 漏洞說明

三、Go 修補了哪裡?以 SPKI 辨識不再可信任的金鑰

公開修補的重點是 Certificate.Verify 回傳的憑證鏈。Go 新增一組拒絕清單,使用 SHA-256 SPKI 雜湊辨識本次不再信任的公鑰,將包含它們的候選憑證鏈排除。Go 1.27 修補 commit

SPKI 全名是 Subject Public Key Info,可以理解為憑證裡描述公鑰及其演算法的結構。同一把公鑰可能出現在不同簽發者簽署的憑證中,例如交叉簽署的憑證。用 SPKI 判斷,可以一併辨識這些共用金鑰的情況。

從修補內容可以確認幾件事:

  • 清單包含 8 組 SPKI 雜湊;比對的是公鑰結構,與網站網域名稱清單不同。
  • Go 自行驗證憑證鏈的路徑會套用這項篩選。
  • macOS 與 Windows 的平台驗證路徑也加入了相應處理。
  • 若沒有剩餘的有效憑證鏈,驗證會回傳錯誤;實際錯誤訊息仍取決於失敗路徑。

這些結論來自公開程式碼檢閱;本文未在各平台重現攻擊。需要進一步確認實作時,可直接查看這筆 commit 中的 verify.go、root_darwin.go 與 root_windows.go。修補差異

更新系統信任庫,也要確認應用怎麼驗證

crypto/x509 文件說明,多數平台會使用系統根憑證;平台驗證器、自訂 RootCAs、應用自行攜帶的憑證池,也會影響實際使用的信任來源。文件同時提醒,Certificate.Verify 本身不提供一般性的撤銷檢查。這次加入的指定金鑰拒絕清單,應視為針對事件的防護。x509 文件

因此,應同時處理供應商發布的信任庫更新,並更新 Go 應用。自訂根憑證池也要檢閱:如果它仍能建立包含本次金鑰的憑證鏈,就需要確認修補後的驗證行為。使用自訂 TLS 驗證回呼或其他函式庫的產品,則要追蹤實際驗證路徑。

四、實際會影響哪些 Go 專案?

盤點可以從「誰在驗證遠端憑證」開始。下面是依 TLS 使用方式整理的工程情境,個別服務是否暴露,仍要結合版本、信任來源與攻擊者能影響的連線條件。

使用情境 要檢查的地方 可能影響
API、Webhook、SSO 整合 net/http、SDK、OAuth/OIDC client 的 HTTPS 驗證 遠端服務身分可能被錯誤接受
反向代理、Gateway、服務代理 代理連到 origin 或 upstream 的 TLS 路徑 代理取得的上游內容可能被冒充
排程、同步、備份與資料匯入 背景工作下載資料或上傳資訊時的驗證 沒有公開 HTTP 入口的程式也可能涉及此路徑
CLI、Agent、單檔工具 使用者電腦或 CI 中的 Go 執行檔 工具可能長期保留舊標準函式庫
mTLS 服務 用戶端憑證的信任池、用途與驗證政策 若接受的憑證鏈可包含本次金鑰,需評估對端身分驗證風險
只提供 HTTPS 的端點 是否另有外連、SSO 或用戶端憑證驗證 單看網站掛了哪張伺服器憑證,無法完成整個程式的盤點

Go 的 tls.Config 分別提供伺服器與用戶端驗證相關設定。尤其 mTLS 是否受到影響,需要確認 ClientAuth、ClientCAs 及憑證用途,不能因為用了雙向 TLS 就直接判定全部受影響。TLS 設定文件

舉個假設的訂單服務:入口的 TLS 由負載平衡器處理,但 Go 程式仍會呼叫金流、取得 SSO 設定並傳送物流 Webhook。這時應優先盤點三條對外連線的驗證者,以及它們實際使用的 Go 執行檔。入口 TLS 的維護紀錄,只能說明入口那一段的狀態。

五、Go 的實務修補:從建置工具追到正在執行的程序

一般 Go 應用會把用到的標準函式庫程式碼編入二進位檔。這次新增的拒絕清單必須進入新產物,再由正式程序載入。 團隊可用下面的流程追蹤修補是否已完整傳遞。

flowchart LR
    A[選定已修補的 Go toolchain] --> B[重新編譯應用程式]
    B --> C[確認產物的建置版本]
    C --> D[發布新執行檔或容器映像]
    D --> E[部署並替換舊程序]
    E --> F[核對正式版本與 TLS 整合結果]

容器要一起看 builder 與最終映像

多階段 Docker 建置中,通常由 golang builder 編譯,再把執行檔複製進最終映像。需要分別處理兩部分:

  • Builder:選用含 Go 1.26.10/1.27.3 修補的工具鏈,重新產生執行檔。
  • 最終映像:套用相關信任庫與系統套件更新;確認複製進去的是本次重建的產物。

只替換最終映像的作業系統層,既有執行檔裡的 Go 驗證邏輯仍會保留。反過來,重新編譯 Go 也不會自動更新應用額外攜帶的 CA bundle。這是兩項需要各自留證據的更新。

部署時,還要核對每個副本實際使用的映像 digest,包含 API、Worker、排程與 Agent。舊 Pod 或長時間執行的工作仍在運作,就代表環境內還有舊產物需要處理。這些是本文建議的部署驗收方式。

go.mod 的版本宣告要配合實際工具鏈

Go 官方文件將 go 行定義為最低版本需求,toolchain 行則可建議工具鏈版本;GOTOOLCHAIN 會影響最後選用的工具鏈。因此,應將建置紀錄、產物資訊與設定一起核對。Go Toolchains 文件

例如,CI 雖然更新了 builder,工作卻可能透過額外的版本管理設定選到另一個工具鏈。真正需要留存的是「這次產物由哪個版本編譯」,以及「正式環境部署了哪個產物」。

六、怎麼盤點?原始碼、執行檔與憑證各有不同證據

以下指令為盤點範例,./server 與 intermediate.pem 都需要替換成實際檔案。本文未在使用者的 Go 專案或正式服務執行這些指令。

1. 檢查工具鏈與已編譯產物

在建置使用的模組目錄確認選用工具鏈,再檢查準備部署的執行檔:

1
2
3
4
5
6
# 目前目錄選用的 Go 工具鏈與選擇設定
go version
go env GOTOOLCHAIN

# 讀取執行檔的建置資訊,不執行該服務
go version -m ./server

go version 回答的是目前選中的工具鏈;go version -m 可讀出既有執行檔的 Go 版本及可取得的模組資訊。取得正式部署所使用的執行檔後,才有辦法核對兩者。最終容器即使沒有 go 指令,也可在有合適 Go 工具的盤點環境讀取產物。工具鏈選擇、go version 文件

2. 用 govulncheck 協助找出相關路徑

已安裝官方 govulncheck 時,可以分別分析原始碼與二進位檔:

1
2
3
4
5
# 在模組目錄分析原始碼
govulncheck ./...

# 分析已編譯的部署產物
govulncheck -mode=binary ./server

原始碼模式可依建置設定分析呼叫路徑;二進位模式使用產物資訊與符號分析,無法提供原始碼模式的完整呼叫圖。官方也列出反射、unsafe 與符號資訊不足等限制。govulncheck 官方文件

實務判讀上,新版工具鏈下的原始碼掃描結果,不能單獨證明先前發布的舊執行檔已修補。建議保留工具版本、資料庫查核時間、建置設定及產物識別資訊,搭配正式部署紀錄確認。

3. 憑證排查要看 SPKI 雜湊

若手上已有需要調查的中繼 CA PEM 檔案,可離線取得公鑰結構的 SHA-256:

1
2
3
openssl x509 -in intermediate.pem -pubkey -noout |
openssl pkey -pubin -outform DER |
openssl dgst -sha256

這個範例輸出的是 SPKI 的雜湊;對整張憑證做 fingerprint 會得到另一種值。比對時應使用 Go 官方修補列出的 SPKI 清單,並檢查實際可能建出的憑證鏈。Go 官方清單與比對邏輯、OpenSSL x509、OpenSSL pkey

這項比對可協助辨識已取得的憑證,仍需搭配應用驗證路徑。瀏覽器、curl 與 Go 程式可能使用不同驗證器或信任來源,各自的連線結果適用於當次實際經過的路徑。Cloudflare 對驗證路徑的說明

七、有哪些知名產品已公告處理?

截至查核時,已有多個業者公開說明修補措施。以下紀錄能證明相關產品正在更新防護;公告更新、維護或可能斷線,仍需要與確認入侵的證據分開判讀。

產品/組織 官方確認的處理 使用者需要留意的範圍
Google Chrome/Android Chrome 以 CRLSet 阻擋相關 SPKI;Android 透過 Google Play Services 發布對應更新 其他應用與自帶驗證器仍需分別確認。官方說明
Mozilla Firefox 透過 OneCRL 封鎖相關憑證,並發布瀏覽器與 NSS 更新 特殊設定、衍生產品及未接收動態撤銷資料的軟體需留意。官方說明
Cloudflare 更新 WARP/1.1.1.1、cloudflared,並在 CDN、Developer、Zero Trust 產品部署緩解 公告列出的 cloudflared 修正版為 2026.10.2;客戶自管軟體與信任設定需自行處理。官方說明
Teleport 以已修補的 Go 重建 18.11.6、17.7.31,更新 Cloud 與相關元件 自架使用者應依公告升級;雲端維護期間可能短暫斷線。事件紀錄

Teleport 的案例特別值得參考:官方說明其自身 CA 沒有直接受到影響,但元件通訊及 SSO 等外部 TLS/HTTPS 整合仍需要處理。它實際示範了「服務使用自己的 CA,同時也依賴公共憑證信任」的情境。Teleport 說明

Cloudflare 在公告中表示,安全檢閱未發現其服務上的活躍利用。這個結論有明確的觀察範圍,無法延伸成整個網際網路都未受攻擊。本文查核的來源也沒有提供可據以判定特定知名網站已遭入侵的完整名單。Cloudflare 公告

八、修補順序與升級後的處理

對有外連需求的 Go 系統,我會依下面的順序處理。這是依暴露方式與部署特性提出的工程建議,實際優先序仍須配合服務的重要性。

  1. 盤點會驗證遠端憑證的產物:API、代理、Worker、CLI、Agent,以及供應商交付的 Go 產品。
  2. 確認修補來源:採用 Go 1.26.10/1.27.3,或取得產品供應商對 CVE-2026-111943 的修補說明。
  3. 重新建置與部署:同步處理 CA bundle、系統信任庫、容器與分散出去的執行檔。
  4. 核對正式狀態:保留建置版本、映像 digest、部署識別資訊,確認副本與排程均已替換。
  5. 檢查重要整合:觀察 TLS 驗證失敗、SSO 登入、Webhook、上游 API 與 mTLS 整合的實際狀態。

升級後出現憑證錯誤,應怎麼處理?

若某個服務的憑證鏈依賴被拒絕的金鑰,更新後可能開始連線失敗。應保存錯誤與憑證鏈,確認服務端是否需要換發憑證或調整鏈結,並依 CA/平台公告完成遷移。

保留憑證驗證是修補目標。將 InsecureSkipVerify 設為 true 會停用 Go 的一般憑證鏈與主機名稱驗證,除非程式另行實作足夠的驗證,否則會造成中間人風險。Cloudflare 也明確提醒,更新後的憑證錯誤應由修正信任配置來處理。Go TLS 設定文件、Cloudflare 開發者建議

10/8 已更新過,還需要這次嗎?

需要。 Go 1.27.2/1.26.9 的 10/8 公告處理了 15 項安全問題,包含 HTTP/2、CONNECT、MIME 標頭、模板與工具鏈檢查等;本次 crypto/x509 修補則由 1.27.3/1.26.10 加入。已完成前一波更新的服務,仍應套用這次累積的新版。10/8 公告、最新發布歷史

總結

這次事件提醒我們,應用的安全更新涵蓋了憑證信任政策、建置工具鏈與正式部署產物。Go 已透過 CVE-2026-111943 的修補,在憑證驗證時拒絕指定的中繼 CA 公鑰;維護者需要讓這份修補實際進入每個使用中的執行檔。

如果今天要確認一個 Go 服務的狀態,我會先取得正式產物的建置資訊,再追蹤它的對外連線與信任來源。做到這一步,才能具體回答:現在正在執行的程式,是否已套用這次憑證驗證修補?

延伸閱讀與查核來源