bundler-audit は、Gemfile(.lock)で指定されている gem から脆弱性があるものを指摘してくれるツールです。特にCIで使うと効果的です。
出力例:
$ bundler-audit
Name: actionpack
Version: 3.2.10
Advisory: OSVDB-91452
Criticality: Medium
URL: http://www.osvdb.org/show/osvdb/91452
Title: XSS vulnerability in sanitize_css in Action Pack
Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
bundler-audit の何が問題か?
rubocopのように、特定の警告を非表示にする機能が無いことです。
脆弱性の中には「プロジェクトでの使い方では発現しない」「新バージョンには互換性がない」などで、修正しない/できないものもあるので、そっとしておいて欲しいもの。
どうやって解決したか?
あらかじめ、bundler-audit の出力をファイルに保存し、CI時に出力と比較すれば良いのです。
$ bundler-audit check > expected-bundler-audit-output.txt
$ git commit -m "..." expected-bundler-audit-output.txt
CI時:
$ bundler-audit update
$ diff <(bundler-audit check) expected-bundler-audit-output.txt
期待結果と差がある(≒ 新たな脆弱性が発見された)場合は diff
が 1 で終わるのでCIが失敗します。
なお、bundler-audit が出力のフォーマットを変えた場合にも失敗しますが、その場合は諦めて bundler-auditを更新して、expected-bundler-audit-output.txt
を作り直します。