Goの脆弱性管理

Vulnerability Management for Go by Julie Qiu, for the Go security team

Goの脆弱性管理サポートの新機能を発表できることをうれしく思います。これは、Go開発者が自身に影響する可能性のある既知の脆弱性を知るための第一歩です。

この記事では、現在利用可能な機能の概要と、このプロジェクトの今後のステップについて紹介します。

概要

Goでは、コードベースを解析して既知の脆弱性を明らかにするツールを提供しています。このツールはGoの脆弱性データベースを基盤としており、このデータベースはGoセキュリティチームによって管理されています。Goのツールは、実際にコードが呼び出している関数の中にある脆弱性のみを表示することで、結果に含まれるノイズを減らします。

Architecture diagram of Go’s vulnerability management system

Goの脆弱性データベース

Goの脆弱性データベースは、公開されているGoモジュール内のインポート可能なパッケージにおける既知の脆弱性についての情報を包括的にまとめたものです。

脆弱性のデータは、CVEやGHSAなどの既存の情報源、およびGoパッケージメンテナからの直接の報告から得られます。この情報はGoセキュリティチームによってレビューされたのち、データベースに追加されます。

パッケージメンテナの皆さんには、自身のプロジェクトにおける公開された脆弱性についての情報を提供していただいたり、自分のGoパッケージに関する既存の脆弱性情報を更新していただくことを推奨しています。報告のプロセスをできるだけ手間のかからないものにしたいと考えていますので、改善のための提案があればぜひお寄せください

Goの脆弱性データベースは、ブラウザからpkg.go.dev/vulnで閲覧できます。データベースについての詳細はgo.dev/security/vuln/databaseを参照してください。

govulncheckによる脆弱性検出

新しいgovulncheckコマンドは、Goユーザーが自身のプロジェクトに影響する可能性のある既知の脆弱性を、ノイズを抑えた信頼できる方法で知るためのものです。govulncheckはコードベースを解析し、コード内のどの関数が脆弱性のある関数を推移的に呼び出しているかに基づいて、実際に影響のある脆弱性のみを表示します。

最新版のgovulncheckはgo installでインストールできます。

$ go install golang.org/x/vuln/cmd/govulncheck@latest

そして、プロジェクトのディレクトリ内でgovulncheckを実行します。

$ govulncheck ./...

govulncheckは、ユーザーからのフィードバックを集めながら頻繁な更新と迅速な反復を可能にするため、独立したツールとなっています。長期的には、govulncheckツールをGo本体に統合する計画です。

統合

脆弱性についてはできるだけ早い段階、つまり開発とデプロイのプロセスの中で知っておくのが常に望ましいことです。脆弱性のチェックを自分のツールやプロセスに統合するには、govulncheck -jsonを使用してください。

私たちは、Goパッケージ検索サイトなど、既存のGoのツールやサービスに脆弱性検出機能をすでに統合しています。例えばこのページでは、golang.org/x/textの各バージョンにおける既知の脆弱性を確認できます。VS Code Go拡張機能を通じた脆弱性チェック機能についても近日公開予定です。

次のステップ

Goの脆弱性管理サポートを役立てていただき、また改善のためにご協力いただければ幸いです。

Goの脆弱性管理サポートは現在活発に開発が進められている新機能です。いくつかのバグや制限事項があることをご了承ください。

次のような方法でぜひ改善にご協力ください。

より良く、より安全なGoのエコシステムを築くために、皆さんと共に取り組んでいけることを楽しみにしています。

By Julie Qiu, for the Go security team