npm@6で追加されたnpm auditでpackageのセキュリティ情報をチェックする

npm@6で新たにnpm auditが追加されていた。
これはliftsecurity.ioという企業が持っていたセキュリティノウハウをがnpm incが取得したことにより実現されたとのこと。

ということで自分のプロダクトでいかほどかおためしして見てみる。

ほとんど公式ドキュメントのななめ良いなんですが、ざっとまとめる。
npm installを実行することで自動的に実行され、セキュリティのレポートが出力される。
(//registry.npmjs.org/-/npm/v1/security/audits/quick あたりのAPIかな)

1
2
3
4
5
6
7
8
9
10
11
# upgrade npm@6
npm i -g npm@latest

npm -v
6.0.1

npm i
up to date in 6.424s
[!] 26 vulnerabilities found [2529 packages audited]
Severity: 16 Low | 8 Moderate | 2 High
Run `npm audit` for more detail

npm auditはインストールしたnode_moduleに対してセキュリティチェックを行いレポートを出力する。

詳細なレポートはnpm auditを実施することで確認できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
npm audit

# Run npm install --dev [email protected] to resolve 11 vulnerabilities
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ nyc [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ nyc > istanbul-lib-instrument > babel-generator > │
│ │ babel-types > lodash │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/577 │
└───────────────┴──────────────────────────────────────────────────────────────┘

...

# Run npm update fsevents --depth 3 to resolve 11 vulnerabilities
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ debug │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ ava [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ ava > chokidar > fsevents > node-pre-gyp > tar-pack > debug │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/534 │
└───────────────┴──────────────────────────────────────────────────────────────┘

...

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate │ Prototype pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ hoek │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ ava [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ ava > chokidar > fsevents > node-pre-gyp > hawk > boom > │
│ │ hoek │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/566 │
└───────────────┴──────────────────────────────────────────────────────────────┘

...

┌──────────────────────────────────────────────────────────────────────────────┐
│ Manual Review │
│ Some vulnerabilities require your attention to resolve │
│ │
│ Visit https://go.npm.me/audit-guide for additional guidance │
└──────────────────────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ deep-extend │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=0.5.1 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ b801b0cdd03e5b6e6c073421517282056f9d04c8220d55dfb4ca26be1e3… │
│ │ [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ b801b0cdd03e5b6e6c073421517282056f9d04c8220d55dfb4ca26be1e3… │
│ │ > chokidar > fsevents > node-pre-gyp > rc > deep-extend │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/612 │
└───────────────┴──────────────────────────────────────────────────────────────┘

...

[!] 26 vulnerabilities found - Packages audited: 2529 (2491 dev, 289 optional)
Severity: 16 Low | 8 Moderate | 2 High

という感じで、
npm auditでは脆弱性の深刻度とパッケージ、path情報などがレポートされる。

解決方法が提示されている場合

パッケージでの解決が可能な場合は解決方法が提示される。

1
2
3
4
5
6
7
8
9
10
11
12
# Run  npm update fsevents --depth 3  to resolve 11 vulnerabilities
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Regular Expression Denial of Service │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ debug │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ ava [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ ava > chokidar > fsevents > node-pre-gyp > tar-pack > debug │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/534 │
└───────────────┴──────────────────────────────────────────────────────────────┘

この場合は npm update fsevents --depth 3 を実施する。

自動解決方法が提供されない場合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌──────────────────────────────────────────────────────────────────────────────┐
│ Manual Review │
│ Some vulnerabilities require your attention to resolve │
│ │
│ Visit https://go.npm.me/audit-guide for additional guidance │
└──────────────────────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low │ Prototype Pollution │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package │ deep-extend │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in │ >=0.5.1 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ b801b0cdd03e5b6e6c073421517282056f9d04c8220d55dfb4ca26be1e3… │
│ │ [dev] │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path │ b801b0cdd03e5b6e6c073421517282056f9d04c8220d55dfb4ca26be1e3… │
│ │ > chokidar > fsevents > node-pre-gyp > rc > deep-extend │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info │ https://nodesecurity.io/advisories/612 │
└───────────────┴──────────────────────────────────────────────────────────────┘

自動で解決できない場合は、マニュアルで確認、調査することが可能。
nodesecurity.ioのリンクが提供されており、
CVE(Common Vulnerabilities and Exposures)情報があるので脆弱性の緩和・解決を図る。
該当するpackageのパスがあるので、必要に応じてパッケージの更新や修正を行う。

例に挙げているレポートではPrototype Pollution として[email protected] 以前のバージョンがプロトタイプ汚染に関して脆弱なためv0.5.1以上にアップデートする必要があるので、該当のパッケージ更新を行う。

またバージョンの更新ができなかったり、修正が存在してない場合は以下のいずれかの方法でた右往する。

  • 脆弱性に該当する箇所を改修し、mainteinerにプルリクエストを送り脆弱性を報告する
  • 脆弱性を修正できない場合は該当パッケージのissue trackerから脆弱性の情報を報告する

インストール時にauditを実施ない

またインストール時にauditを実施しないときは--no-auditフラグを渡してあげる。

1
npm i <PACKAGE> --no-audit

または.npmrcでauditfalseにしておくことで、すべてのインストールに対してauditは無効化できる。

1
npm set audit false

ということで、自分のpackageに対しても結構でてきたので、
セキュリティの意識を高めて開発していきたい。

参考にしたページ

Comments