中安拓也のブログ

プログラミングについて書くブログ

GitHubから通知が来た:依存関係の1つに潜在的なセキュリティ脆弱性があります

GitHubの通知欄にめずらしく(本当に)通知が来ていた。

Potential security vulnerability found in the ssri dependency

実際の通知画面はこんな感じ

f:id:l08084:20180309105303p:plain

通知をクリックして詳細を見ると、「./package-lock.jsonで定義されている依存関係には既知のセキュリティ脆弱性があり、更新する必要があります。」とのことでした。

We found a potential security vulnerability in one of your dependencies.
A dependency defined in ./package-lock.json has known security vulnerabilities and should be updated.

以前作ったAngular Tetris./package-lock.jsonで定義された依存関係の中に、脆弱性のあるモジュールが含まれているようです。

f:id:l08084:20180309105721p:plain

「Review vulnerable dependency」ボタンを押すと、問題のあったモジュール名とバージョンも教えてくれます。

f:id:l08084:20180309121114p:plain

ssriのバージョンを5.2.2以上にすれば、脆弱性は解決するとのこと。

脆弱性のあるモジュールのバージョンを上げる

package.jsonの定義しているライブラリのバージョンを最新にしてくれるnpm-check-updatesを使います。

# インストール
npm install -g npm-check-updates

npm-check-updatesをインストールした後、ncuコマンドでバージョンのアップデートが可能なライブラリを調べることができます。

$ ncu
/angular-tetris/package.json
⸨░░░░░░░░░░░░░░░░░░⸩ ⠦ :
 @angular/cli                  1.7.3  →   1.7.4
 karma-jasmine-html-reporter  ^0.2.2  →  ^1.0.0
 ts-node                      ~5.0.1  →  ~6.0.0
 typescript                   ~2.7.2  →  ~2.8.3

The following dependencies are satisfied by their declared version range, but the installed versions are behind. You can install the latest versions without modifying your package file by using npm update. If you want to update the dependencies in your package file anyway, run ncu -a.

 @angular/animations                 ^5.2.8  →  ^5.2.10
 @angular/common                     ^5.2.8  →  ^5.2.10
 @angular/compiler                   ^5.2.8  →  ^5.2.10
 @angular/core                       ^5.2.8  →  ^5.2.10
 @angular/forms                      ^5.2.8  →  ^5.2.10
 @angular/http                       ^5.2.8  →  ^5.2.10
 @angular/platform-browser           ^5.2.8  →  ^5.2.10
 @angular/platform-browser-dynamic   ^5.2.8  →  ^5.2.10
 @angular/router                     ^5.2.8  →  ^5.2.10
 core-js                             ^2.5.3  →   ^2.5.5
 rxjs                                ^5.5.6  →  ^5.5.10
 zone.js                            ^0.8.20  →  ^0.8.26
 @angular/compiler-cli               ^5.2.8  →  ^5.2.10
 @angular/language-service           ^5.2.8  →  ^5.2.10
 @types/jasminewd2                   ~2.0.2  →   ~2.0.3
 @types/node                         ^9.4.7  →   ^9.6.6
 codelyzer                           ^4.2.1  →   ^4.3.0
 karma                               ~2.0.0  →   ~2.0.2
 karma-jasmine                       ~1.1.0  →   ~1.1.1
 protractor                          ~5.3.0  →   ~5.3.1

Run ncu with -u to upgrade package.json

問題がなければ、ncu -uコマンドでpackage.jsonの更新を行います

$ ncu -u
/angular-tetris/package.json
⸨░░░░░░░░░░░░░░░░░░⸩ ⠇ :
 @angular/cli                  1.7.3  →   1.7.4
 karma-jasmine-html-reporter  ^0.2.2  →  ^1.0.0
 ts-node                      ~5.0.1  →  ~6.0.0
 typescript                   ~2.7.2  →  ~2.8.3
 @angular/animations                 ^5.2.8  →  ^5.2.10
 @angular/common                     ^5.2.8  →  ^5.2.10
 @angular/compiler                   ^5.2.8  →  ^5.2.10
 @angular/core                       ^5.2.8  →  ^5.2.10
 @angular/forms                      ^5.2.8  →  ^5.2.10
 @angular/http                       ^5.2.8  →  ^5.2.10
 @angular/platform-browser           ^5.2.8  →  ^5.2.10
 @angular/platform-browser-dynamic   ^5.2.8  →  ^5.2.10
 @angular/router                     ^5.2.8  →  ^5.2.10
 core-js                             ^2.5.3  →   ^2.5.5
 rxjs                                ^5.5.6  →  ^5.5.10
 zone.js                            ^0.8.20  →  ^0.8.26
 @angular/compiler-cli               ^5.2.8  →  ^5.2.10
 @angular/language-service           ^5.2.8  →  ^5.2.10
 @types/jasminewd2                   ~2.0.2  →   ~2.0.3
 @types/node                         ^9.4.7  →   ^9.6.6
 codelyzer                           ^4.2.1  →   ^4.3.0
 karma                               ~2.0.0  →   ~2.0.2
 karma-jasmine                       ~1.1.0  →   ~1.1.1
 protractor                          ~5.3.0  →   ~5.3.1

Upgraded /angular-tetris/package.json

ここで念のため、packacge-lock.jsonを一度削除します。

削除した後、npm updateコマンドで更新したライブラリをインストールします(削除したpackage-lock.jsonもここで再作成されます)

$ npm update

package-lock.jsonの中身を確認すると、脆弱性のあったssriのバージョンが上がっていることがわかります。

package-lock.json:

    "ssri": {
      "version": "5.3.0",
      "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
      "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
      "dev": true,
      "requires": {
        "safe-buffer": "5.1.1"
      }
    },

変更をコミットしてプッシュすると、GitHub上の警告メッセージも無事消えます。