OWASP dependency check と認証プロキシと私


OWASP dependency checkとは

ここが一番わかり易いサイトかと思います。

同サイトでも記載されているように、あるモジュールに対して、既知の脆弱性を持ったライブラリを

使っていないかをチェックするツールとなっています。

元はJavaアプリや.NETアプリ向けのツールで、今はプロトとして以下のものも対応しつつある状態。

* Python アプリケーション

* Ruby アプリケーション

* PHP (Composer) アプリケーション

* Node.js アプリケーション

実行環境

OS:CentOS 7.7
OWASP dependency check:5.3.0

現象

CLI版を使ったのですが、マニュアルに従って、

Proxyサーバ、Proxyポート、Proxy認証の情報を引数に指定し実行したところ、バラバラとExceptionが。。。

その中に以下のような見覚えのあるエラーメッセージを発見。
Caused by: java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"

はて。。。Proxy情報を指定しているのにProxy Authenticatio Requiredが出るとなると。。。

原因

Java 8 Update 111からjava.netパッケージのHTTPS接続の際のトンネリングにBasic認証を使用できない設定がデフォルトとなっていることが原因でした。
参考URL: https://www.oracle.com/technetwork/java/javase/8u111-relnotes-3124969.html

ただ解決方法はあって、以下のオプションをJavaの実行時につければいいとのこと。
-Djdk.http.auth.tunneling.disabledSchemes=""

解決方法

解決方法はわかったものの、これをOWASPのツールとしてどう適用するかって話がわからない。
OWASP dependency check のCLI版は、シェルスクリプトだったので、そっと中を覗いてみると、
実行時のパラメタにJAVA_OPTSという環境変数を与えていることが判明。

結論

以下のようにして実行すればよい。

export JAVA_OPTS="${JAVA_OPTS} -Djdk.http.auth.tunneling.disabledSchemes=\"\""
dependency-check.sh --project 【プロジェクト名】 --scan 【スキャン対象ディレクトリパス】 --proxyserver 【プロキシサーバ名】 --proxyport 【プロキシポート】 --proxypass 【プロキシ認証パスワード】 --proxyuser 【プロキシ認証ID】