やること
OWASP Dependency Checkでは、failBuildOnCVSS
を指定することで任意のスコア以上の脆弱性があった場合にビルドを失敗させることができます。
一方、このチェックで引っ掛けて欲しくない脆弱性も有ったりします(e.g. Windows環境でのみ発生するが、使う環境がWindowsでない場合など)。
<!-- 省略 -->
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>5.0.0</version>
<configuration>
<!-- CVEスコア8以上で落とす設定 -->
<failBuildOnCVSS>8</failBuildOnCVSS>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 省略 -->
ということで、一部脆弱性に関する警告を抑制(無視)する設定をします。
やり方
SuppressionFileを用意した上でconfiguration
にsuppressionFiles
を設定すればできます。
SuppressionFileを用意する
まず抑制する内容について記述したSuppressionFileを用意します。
ファイル名は任意ですが、今回はowasp-dependency-check-suppressions.xml
としています。
このファイルの内容は現在自分がやっているプロジェクトから取ってきたものです(コメントに関しては一部修正しているので実際はもっと詳細に調査しています)。
<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.2.xsd">
<!-- OWASPの脆弱性チェックで無視する内容(xmlnsの最新版は1.3だが、1.3だとエラーが出て機能しないため1.2にしている) -->
<suppress>
<notes><![CDATA[
Spring Security 5.0.5と任意のバージョンのSpring Securityを組み合わせた時に発生する脆弱性。
このプロジェクトではSpring Security 5.0.5を使っていないため無視する。
]]></notes>
<cve>CVE-2018-1258</cve>
</suppress>
<suppress>
<notes><![CDATA[
MySqlのコネクションに関する脆弱性。
このプロジェクトでは特に問題にはならないため無視する。
]]></notes>
<cve>CVE-2018-3258</cve>
</suppress>
<suppress>
<notes><![CDATA[
Windows環境でTomcatを動かした場合に発生する脆弱性。
このプロジェクトはプロダクション環境がWindowsでないため無視する。
]]></notes>
<cve>CVE-2019-0232</cve>
</suppress>
</suppressions>
補足
dependency-suppression
は1.3が記事公開時点で最新かつ公式のサンプルもこのバージョンが指定されていますが、1.2を指定しないと複数環境で動かなかったので、今回は1.2を指定しています(エラーに関して自分が書いた記事です)。
configurationにsuppressionFilesを設定する
次にconfiguration
内に用意したファイルのパスを設定することで、設定が有効になります。
owasp-dependency-check-suppressions.xml
はpomと同じ階層に置いた場合を想定しています。
suppression
を有効にした状態でチェックをした場合、Reportにもその内容は表示されなくなります。
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>5.0.0</version>
<configuration>
<failBuildOnCVSS>8</failBuildOnCVSS>
<suppressionFiles>
<suppressionFile>owasp-dependency-check-suppressions.xml</suppressionFile>
</suppressionFiles>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
より詳しい内容
今回はCVEを個別に設定しましたが、他にも様々な設定方法が有るので、より詳しくは公式サイトを参照してください。
SuppressionFileをURLで指定するだとか、あるpackageからの内容を無視するといったことも可能です。