【Rails】bundler-auditの使い方


bundler-auditとは

bundler-auditはプロジェクトで利用しているGemの脆弱性の有無をチェックしてくれるGemです。
システムの脆弱性チェックの一つとして利用できますね。

検証した環境

  • Ruby 2.7.0
  • bundler-audit 0.6.1

準備

bundle install

Gemfileに以下を追加してbundle install

Gemfile
group :development do
  gem 'bundler-audit'
end
$ bundle install

脆弱性チェックに使用するDBを更新する

脆弱性チェックを実行する前に、bundler-auditが使用するDBの更新を行いましょう。

$ bundle exec bundler-audit update

このコマンドでは、実際には$HOME/.local/shareディレクトリ配下にrubysec/ruby-advisory-dbgit 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をインストールしてみます。
ここでは試しにbootstrapv4.3.0をインストールしてみます。
Gemfileに以下を追記してbundle install

Gemfile
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コマンド等を利用してください。)

Gemfile
-gem 'bootstrap', '4.3.0'
+gem 'bootstrap', '4.3.1'
$ bundle install

bootstrapのバージョンを上げたのでもう一度bundler-auditを実行してみます。

$ bundle exec bundler-audit
No vulnerabilities found

警告が出なくなりました!

参考