bundler-auditとは
bundler-auditはプロジェクトで利用しているGemの脆弱性の有無をチェックしてくれるGemです。
システムの脆弱性チェックの一つとして利用できますね。
検証した環境
- Ruby 2.7.0
- bundler-audit 0.6.1
準備
bundle install
Gemfileに以下を追加してbundle install
group :development do
gem 'bundler-audit'
end
$ bundle install
脆弱性チェックに使用するDBを更新する
脆弱性チェックを実行する前に、bundler-auditが使用するDBの更新を行いましょう。
$ bundle exec bundler-audit update
このコマンドでは、実際には$HOME/.local/shareディレクトリ配下にrubysec/ruby-advisory-dbをgit cloneしているようです。
脆弱性の存在するGemをチェックする
実際にbundler-auditを実行してGemの脆弱性をチェックしてみましょう。
以下のコマンドで実行できます。
脆弱性が見つからなかった場合はNo vulnerabilities foundと出力されます。
$ bundle exec bundler-audit
No vulnerabilities found
DBの更新と脆弱性チェックを同時に実行する
以下のコマンドで脆弱性チェックに使用するDBの更新と脆弱性チェックを同時に実行できます。
DBの更新忘れを防ぐためにも、基本的には以下のコマンドを利用するほうがいいでしょう。
$ bundle exec bundler-audit check --update
実際に脆弱性があるGemをインストールして検証してみる
bundler-auditの出力を確認するために、実際に脆弱性が存在するGemのインストール~脆弱性チェック~修正までやってみます。
脆弱性があるGemをインストール
実際に脆弱性が存在するGemをインストールしてみます。
ここでは試しにbootstrapのv4.3.0をインストールしてみます。
Gemfileに以下を追記してbundle install。
gem 'bootstrap', '4.3.0'
$ bundle install
脆弱性をチェックする
bundler-auditを実行してみます。
$ bundle exec bundler-audit
Name: bootstrap
Version: 4.3.0
Advisory: CVE-2019-8331
Criticality: Medium
URL: https://blog.getbootstrap.com/2019/02/13/bootstrap-4-3-1-and-3-4-1/
Title: XSS vulnerability in bootstrap
Solution: upgrade to >= 4.3.1
Vulnerabilities found!
脆弱性が見つかったGemとその内容、解決するバージョンまでわかりやすく出力してくれます。
脆弱性を無視する
場合によってはbundler-auditによって見つかった脆弱性を無視したいこともあるかと思います。
そういうときは--ignoreオプションに無視したいAdvisoryを指定しましょう。
$ bundle exec bundler-audit --ignore CVE-2019-8331
No vulnerabilities found
脆弱性のあるGemのバージョンを上げる
先ほどbundler-auditで出力された内容には
Solution: upgrade to >= 4.3.1
と書いてあったので、それに従ってGemfileを修正してみます。
(※実際にはGemfileにバージョンを指定していない場合の方が多いと思うので、その場合はbundle updateコマンド等を利用してください。)
-gem 'bootstrap', '4.3.0'
+gem 'bootstrap', '4.3.1'
$ bundle install
bootstrapのバージョンを上げたのでもう一度bundler-auditを実行してみます。
$ bundle exec bundler-audit
No vulnerabilities found
警告が出なくなりました!