IDEにおける脆弱性スキャン
Go言語サーバーと統合されたエディター(Go拡張機能を備えたVS Codeなど)では、依存関係の脆弱性を検出できます。
依存関係の脆弱性を検出するには、2つのモードがあります。どちらもGo脆弱性データベースを基盤としており、互いに補完し合っています。
- インポートベースの分析:このモードでは、エディターはワークスペースにインポートされたパッケージのセットをスキャンして脆弱性を報告し、
go.mod
ファイルに診断として結果を表示します。これは高速ですが、コードが脆弱なシンボルを含むパッケージをインポートしていても、脆弱性のある関数が到達不能な場合、誤検知が発生する可能性があります。このモードは、"vulncheck": "Imports"
というgopls設定で有効にできます。 Govulncheck
分析:これはgovulncheck
コマンドラインツールに基づいており、gopls
に組み込まれています。これは、コードが実際に脆弱な関数を呼び出しているかどうかを確認するための、ノイズの少ない信頼性の高い方法を提供します。この分析は計算コストが高いため、インポートベースの分析からの診断レポートに関連付けられた「govulncheckを実行して検証する」コードアクションを使用するか、"codelenses.run_govulncheck"
コードレンズをgo.mod
ファイルで使用して、手動でトリガーする必要があります。

Go:Vulncheckの切り替え (vulncheck.mp4)
これらの機能は、gopls
v0.11.0以降で使用できます。フィードバックはgo.dev/s/vsc-vulncheck-feedbackまで共有してください。
エディター固有の指示
VS Code
Go拡張機能はgoplsとの統合を提供します。脆弱性スキャン機能を有効にするには、次の設定が必要です。
"go.diagnostic.vulncheck": "Imports", // enable the imports-based analysis by default.
"gopls": {
"ui.codelenses": {
"run_govulncheck": true // "Run govulncheck" code lens on go.mod file.
}
}
「Go Toggle Vulncheck」コマンドを使用して、現在のワークスペースのインポートベースの分析をオンオフできます。
Vim/NeoVim
coc.nvimを使用する場合は、次の設定でインポートベースの分析を有効にします。
{
"codeLens.enable": true,
"languageserver": {
"go": {
"command": "gopls",
...
"initializationOptions": {
"vulncheck": "Imports",
}
}
}
}
注意事項
- この拡張機能は、プライベートパッケージをスキャンしたり、プライベートモジュールに関する情報を送信したりしません。すべての分析は、Go脆弱性データベースから既知の脆弱なモジュールのリストを取得し、ローカルで交差を計算することで行われます。
- インポートベースの分析は、ワークスペースモジュールのパッケージのリストを使用します。
go.work
またはモジュールのreplace
/exclude
を使用する場合、これはgo.mod
ファイルに表示されるものとは異なる場合があります。 - コードを変更したり、Go脆弱性データベースが更新されたりすると、govulncheck分析の結果が古くなる可能性があります。分析結果を手動で無効にするには、
go.mod
ファイルの上部に表示される"go.mod診断のリセット"
コードレンズを使用します。それ以外の場合は、1時間後に結果が自動的に無効になります。 - これらの機能は現在、標準ライブラリやツールチェーンの脆弱性を報告しません。結果の表示場所とユーザーが問題に対処するための支援方法については、現在検討中です。