Go セキュリティポリシー
概要
このドキュメントでは、Go セキュリティチームが報告された問題を処理するプロセスと、その見返りに何を期待できるかを説明します。
セキュリティバグの報告
Go ディストリビューションのすべてのセキュリティバグは、security@golang.org へのメールで報告してください。このメールは Go セキュリティチームに配信されます。
報告がスパムとしてマークされないように、メールのどこかに **「脆弱性」という単語を含めてください**。報告メールには、分かりやすい件名を使用してください。
メールは7日以内に確認され、解決まで進捗状況が更新されます。問題は90日以内に修正されるか、公開されます。
7日以内にメールへの返信がない場合は、security@golang.org の Go セキュリティチームに再度ご連絡ください。メールに **脆弱性** という単語が含まれていることを確認してください。
さらに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 プロポーザルレビュープロセスを通じて **公開で修正** され、次にスケジュールされた マイナーリリース(約1か月ごと)にバックポートされます。リリースアナウンスにはこれらの問題の詳細が含まれていますが、事前アナウンスはありません。
過去の PUBLIC 問題の例としては、以下のようなものがあります。
- #44916: archive/zip: Reader.Open を呼び出すとパニックになる可能性がある
- #44913: encoding/xml: カスタム TokenReader で xml.NewTokenDecoder を使用すると無限ループになる
- #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 トラックの問題は、**次にスケジュールされた マイナーリリース で修正** され、それまで非公開に保たれます。
リリースの3~7日前には、golang-announce に事前アナウンスが送信され、今後のリリースに1つ以上のセキュリティ修正が含まれていること、問題が標準ライブラリ、ツールチェーン、またはその両方に影響を与えるかどうか、および各修正のために予約された 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 プロジェクトでは、以下の開示プロセスを使用しています。
-
セキュリティレポートを受け取ると、プライマリハンドラーが割り当てられます。この担当者は、修正とリリースのプロセスを調整します。
-
問題が確認され、影響を受けるソフトウェアのリストが決定されます。
-
コードが監査され、潜在的な類似の問題が発見されます。
-
報告者と相談して CVE 番号が必要と判断された場合、プライマリハンドラーがそれを取得します。
-
修正は、最新の2つのメジャーリリースと head/master リビジョン用に準備されます。修正は最新の2つのメジャーリリース用に準備され、head/master にマージされます。
-
修正が適用された日には、golang-announce、golang-dev、および golang-nuts にアナウンスが送信されます。
このプロセスには、特に他のプロジェクトのメンテナーとの調整が必要な場合、時間がかかることがあります。できるだけ迅速にバグを処理するためにあらゆる努力が払われますが、開示が一貫して処理されるように、上記のプロセスに従うことが重要です。
CVE 番号の割り当てを含むセキュリティ問題の場合、問題は CVEDetails ウェブサイトの「Golang」製品 および National Vulnerability Disclosure サイト に公開されます。
セキュリティアップデートの受信
セキュリティアナウンスを受け取る最良の方法は、golang-announce メーリングリストに登録することです。セキュリティ問題に関するメッセージには、`[security]` というプレフィックスが付きます。
このポリシーに関するコメント
このポリシーの改善に関するご提案がありましたら、問題を報告 して議論してください。