Posted at

sensiolabs/security-checkerでComposerライブラリの脆弱性チェック

More than 3 years have passed since last update.

sensiolabs/security-checker を使うと、Composerでインストールしたライブラリに既知の脆弱性が含まれているかどうかをチェックしてくれます。

以下、動作確認した環境は Windows7, PHP 5.6.12 です。


インストール&簡単な使い方

グローバルのComposerに sensiolabs/security-checker をインストールします。

$ composer global require sensiolabs/security-checker

チェックしたいソースのComposerインストールディレクトリ(composer.lockファイルのあるディレクトリ)に移動して security-checker security:check コマンドを実行します。

$ cd C:\path\to\project\source

$ security-checker security:check

こんな風に、結果を出力してくれます。

Security Check Report

~~~~~~~~~~~~~~~~~~~~~

Checked file: C:\path\to\project\source\composer.lock

[OK]
0 packages have known vulnerabilities

This checker can only detect vulnerabilities that are referenced
Disclaimer in the SensioLabs security advisories database. Execute this
command regularly to check the newly discovered vulnerabilities.

脆弱性がなかった時はこんな感じ。

コマンドの引数で直接 composer.lock のパスを指定してもOKです。

$ security-checker security:check C:\path\to\project\source\composer.lock

ソースを軽く追ってみたところ、https://security.sensiolabs.org/check_lock にcurlで接続し、composer.lockファイルを送信してJSONで返された結果を、テキストに変換して出力しているようです。

また security-checker のライブラリにはSSLのクライアント証明書も同梱されていました。(2020年5月30日まで有効)

なので、Windows環境でも心配ありません!(参考:Windows + Goutte 3.0でHTTPSでのリクエストで発生するSSL証明書のエラー


脆弱性が含まれている場合の出力

既知の脆弱性を含んだバージョンのライブラリが検出された場合、こんな風に出力されます。

Security Check Report

~~~~~~~~~~~~~~~~~~~~~

Checked file: C:\path\to\project\source\composer.lock

[CRITICAL]
1 packages have known vulnerabilities

doctrine/cache (v1.2.0)
-----------------------

* CVE-2015-5723: Security Misconfiguration Vulnerability in various Doctrine projects
http://www.doctrine-project.org/2015/08/31/security_misconfiguration_vulnerability_in_various_doctrine_projects.html

This checker can only detect vulnerabilities that are referenced
Disclaimer in the SensioLabs security advisories database. Execute this
command regularly to check the newly discovered vulnerabilities.

分かりやすいですね!(CVE-2015-5723 の内容についてはここでは触れません)


出力フォーマットを指定する

オプションで出力フォーマットを指定できるようで、デフォルトは text ですが、他に json や simple が用意されています。

simple を指定した場合、先ほどの脆弱性はこんな風に出力されます。

$ security-checker security:check --format=simple

Security Check Report: C:\path\to\project\source\composer.lock

[CRITICAL] 1 packages have known vulnerabilities

doctrine/cache (v1.2.0)
-----------------------

* CVE-2015-5723: Security Misconfiguration Vulnerability in various Doctrine projects
http://www.doctrine-project.org/2015/08/31/security_misconfiguration_vulnerability_in_various_doctrine_projects.html

これでも充分かもしれません。

json を指定した場合だと、こうなります。

$ security-checker security:check --format=json

{

"doctrine\/cache": {
"version": "v1.2.0",
"advisories": {
"doctrine\/cache\/2015-08-31.yaml": {
"title": "Security Misconfiguration Vulnerability in various Doctrine projects",
"link": "http:\/\/www.doctrine-project.org\/2015\/08\/31\/security_misconfiguration_vulnerability_in_various_doctrine_projects.html",
"cve": "CVE-2015-5723"
}
}
}
}

自動化やバッチ処理での用途を想定されているんでしょうか。


面倒な人にはオンライン版もあり

コマンドじゃなくてもいいという方は、オンライン版も用意されています。

元々、このオンライン版をこちらのスライド ぼくの考えたさいきょうの開発フロー - PHP編 // Speaker Deck で知ったんですが、日本語の情報を検索した限りではあまり広まってなさそうな気がしたので、改めて紹介した次第です。