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
警告が出なくなりました!