1
/
5

【エンジニアブログ】govulncheckを利用したGitHub Actionsでの脆弱性チェック

こんにちは、プロダクト開発部コアグループの井上です。
コアグループでは、次世代ECの開発を行っています。

今回はgovulncheckとGitHub ActionsをつかってGoの脆弱性チェックを自動化した取り組みについて紹介します。

govulncheck

govulncheckは、Goプロジェクトの依存関係とソースコードを分析し、既知の脆弱性を検出するツールです。コマンドラインから簡単に実行することができます。

今回はCVE-2024-24789を含むこちらのサンプルを想定して書いていきます。

実行方法

-jsonオプションを利用することで、結果をjson形式で得ることができます。

osv

OSV (Open Software Vulnerabilities) は、Googleが管理しているオープンソースソフトウェアの脆弱性を追跡するためのデータベースで、 出力結果として得られるosvそのフォーマット(OSV Schema)に沿ったGoの脆弱性情報です。 govulncheckの実装 を見ると、スキャン対象のモジュールに影響がありそうなものがosvとして出力されているようでした。
※記事に乗せるには量が多すぎるため、上記のサンプルでは削っています。

affected.rangesを見ることで修正バージョンが分かります。

finding

スキャンの結果見つかった脆弱性findingとして出力されます。 symbolレベルでスキャンを実行した場合(デフォルト)、trace内に影響を受けるコードの情報が入ってきます。
今回はutil.goの10行目でzip.NewReaderを使用しているためGO-2024-2888の影響があるということが分かります。

今回作ったもの

GitHub Actionsであればアクションが公開されているため、簡単にCIに組み込むことができますが、 今回はISSUEの作成まで自動で行いたかったので、govulncheck ./... -jsonの結果を自前でパースすることにしました。

jsonのパース

govulncheck ./... -jsonの結果はjson.Unmarshalではパースすることはできません。
当初はbufio.Scanner.Scan()を使って力業でパースしましたが、json.Decoderを使用することで簡単にパースすることができます。

ISSUEの作成

パース結果をもとに、リポジトリのコードに影響があるtrace.positionが存在する脆弱性を集計し、ISSUE用のmarkdownに成形して、actions/github-scriptでISSUEを作成しています。

GitHub Actionsで作成された脆弱性対応ISSUE

余談ですがaliasに入ってくるCVEは、CVE-2024-24786などをそのままISSUE張り付けただけでリンクになって便利でした。

おわりに

今回は脆弱性があっても、対象の関数などを使用していないなどで影響がない場合はISSUEを作成しないようにしましたが、結局別チームが別途拾って対応することになってしまいました。
修正版リリースから最速で対応できるよう、findingがある場合は無条件にISSUEが作成されるように変更予定です。

また、現在は一度出た脆弱性を保存する仕組みを用意していない為、重複したISSUEが作られてしまわないようにスキャン頻度を週一回にしています。 毎日実行しても問題ないようこの点も改善していく予定です。

皆さんも手軽に脆弱性チェックができるgovulncheckを活用してみてください。

◆ 他のBlogはこちらから⇒ https://tech.makeshop.co.jp/

最後までお読みいただきましてありがとうございました。ご応募お待ちしております!



If this story triggered your interest, why don't you come and visit us?
Go言語!モダンな技術を使って日本一売れるECプラットフォームを作ろう
GMOメイクショップ株式会社's job postings

Weekly ranking

Show other rankings
Like kaori sato's Story
Let kaori sato's company know you're interested in their content