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のプロポーザルレビュープロセスを通じて議論され、公開で修正され、次回の定期的なマイナーリリース(約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つとヘッド/マスターリビジョン用に修正が準備されます。修正は最新のメジャーリリース2つ用に準備され、ヘッド/マスターにマージされます。
-
修正が適用される日付に、golang-announce、golang-dev、および golang-nuts にアナウンスが送信されます。
このプロセスには時間がかかる場合があります。特に、他のプロジェクトのメンテナーとの調整が必要な場合はそうです。バグを可能な限りタイムリーに処理するためにあらゆる努力が払われますが、開示が矛盾なく処理されるように、上記のプロセスに従うことが重要です。
CVE番号の割り当てを含むセキュリティ問題については、CVEDetailsウェブサイトの「Golang」製品およびNational Vulnerability Disclosureサイトに公開されます。
セキュリティ更新の受信
セキュリティアナウンスを受け取る最良の方法は、golang-announceメーリングリストに登録することです。セキュリティ問題に関するメッセージには、[security]がプレフィックスとして付けられます。
このポリシーに関するコメント
このポリシーを改善するための提案がある場合は、議論のために問題を提出してください。