Go 安全策略

概覽

本文件說明了 Go 安全團隊處理報告問題以及您期望得到的回應的過程。

報告安全漏洞

Go 發行版中的所有安全漏洞都應透過電子郵件傳送至 security@golang.org。此郵件將傳送給 Go 安全團隊。

為確保您的報告不被標記為垃圾郵件,請在您的電子郵件中包含“vulnerability”一詞。請為您的報告郵件使用描述性的主題行。

您的電子郵件將在 7 天內得到確認,並且您將及時瞭解進展情況,直至問題解決。您的問題將在 90 天內得到修復或公開。

如果您在 7 天內未收到電子郵件回覆,請再次與 Go 安全團隊聯絡 security@golang.org。請確保您的電子郵件中包含vulnerability一詞。

如果您在 3 天后仍未收到對您報告的確認,則您的電子郵件可能已被標記為垃圾郵件。在這種情況下,請在此處提交問題。選擇“我要報告 Google 產品相關的技術安全或濫用風險漏洞(SQLi、XSS 等)”,並將“Go”列為受影響的產品。

跟蹤

根據您問題的性質,Go 安全團隊會將其歸類為 PUBLIC、PRIVATE 或 URGENT 跟蹤的問題。所有安全問題都將分配 CVE 編號。

Go 安全團隊不會為安全問題分配傳統的細粒度嚴重性標籤(例如 CRITICAL、HIGH、MEDIUM、LOW),因為嚴重性高度取決於使用者如何使用受影響的 API 或功能。

例如,encoding/json 解析器中的資源耗盡問題的潛在影響取決於正在解析的內容。如果使用者解析來自本地檔案系統的受信任 JSON 檔案,則影響可能很低。如果使用者解析來自 HTTP 請求正文的不可信任意 JSON,則影響可能高得多。

儘管如此,以下問題跟蹤也表明了安全團隊認為問題的嚴重程度和/或影響範圍。例如,對許多使用者具有中等到顯著影響的問題是此策略中的 PRIVATE 跟蹤問題,而影響可以忽略不計或很小的,或者僅影響一小部分使用者的問題是 PUBLIC 跟蹤問題。

PUBLIC

PUBLIC 跟蹤的問題影響小眾配置、影響非常有限或已經廣為人知。

PUBLIC 跟蹤的問題會帶有 Proposal-Security 標籤,透過 Go 提案審查流程進行討論,公開修復,並向下一個計劃的 次要版本(大約每月一次)進行反向移植。釋出公告將包含這些問題的詳細資訊,但不會提前公告。

過去 PUBLIC 問題的示例包括

  • #44916:archive/zip:呼叫 Reader.Open 時可能出現 panic
  • #44913:encoding/xml:使用 xml.NewTokenDecoder 配合自定義 TokenReader 時出現無限迴圈
  • #43786:crypto/elliptic:P-224 曲線上的錯誤操作
  • #40928:net/http/cgi,net/http/fcgi:當 Content-Type 未指定時發生跨站指令碼(XSS)
  • #40618:encoding/binary:ReadUvarint 和 ReadVarint 可以從無效輸入讀取無限數量的位元組
  • #36834:crypto/x509:Windows 10 上的證書驗證繞過

PRIVATE

PRIVATE 跟蹤的問題是對已承諾的安全屬性的違反。

PRIVATE 跟蹤的問題將在下一個計劃的 次要版本修復,在此之前將保持私密。

在釋出前三到七天,會向 golang-announce 傳送預先公告,宣佈即將釋出的版本中包含一個或多個安全修復程式,以及這些問題是否影響標準庫、工具鏈或兩者,以及每個修復程式的保留 CVE ID。

對於存在於主要版本釋出候選版中的問題,我們遵循相同的流程,包括將修復程式包含在下一個計劃釋出的候選版中。

過去 PRIVATE 問題的部分示例包括

  • #53416:path/filepath:Glob 中的堆疊溢位
  • #53616:go/parser:所有 Parse* 函式中的堆疊溢位
  • #54658:net/http:在傳送 GOAWAY 後處理伺服器錯誤
  • #56284:syscall, os/exec:環境變數中未經驗證的 NUL

URGENT

URGENT 跟蹤的問題威脅到 Go 生態系統的完整性,或正在野外被積極利用並導致嚴重損害。目前沒有近期示例,但它們將包括 net/http 中的遠端程式碼執行,或 crypto/tls 中的實際金鑰恢復。

URGENT 跟蹤的問題將私密修復,並觸發立即的專門安全釋出,可能不會提前公告。

如果您認為現有問題與安全相關,我們要求您傳送電子郵件至 security@golang.org。電子郵件應包含問題 ID 和簡要說明,解釋為什麼應根據此安全策略處理該問題。

披露流程

Go 專案使用以下披露流程:

  1. 收到安全報告後,將指派一名主要處理者。此人負責協調修復和釋出流程。

  2. 確認問題並確定受影響的軟體列表。

  3. 審計程式碼以查詢任何潛在的類似問題。

  4. 如果與提交者協商後確定需要分配 CVE 編號,則主要處理者將獲取一個。

  5. 為最近兩個主要版本和 head/master 修訂版準備修復程式。為最近兩個主要版本準備修復程式,並將其合併到 head/master。

  6. 在應用修復程式的日期,將向 golang-announce、golang-dev 和 golang-nuts 傳送公告。

此過程可能需要一些時間,尤其是在需要與其他專案維護者協調的情況下。我們將盡一切努力以儘可能及時的方式處理此漏洞,但是,遵循上述流程以確保披露得到一致處理非常重要。

對於包含 CVE 編號分配的安全問題,該問題將在 CVEDetails 網站的“Golang”產品以及國家漏洞披露網站上公開列出。

接收安全更新

接收安全公告的最佳方式是訂閱 golang-announce 郵件列表。任何與安全問題相關的訊息都將以 [security] 開頭。

對此策略的評論

如果您有任何改進此策略的建議,請提交問題進行討論。