技術系TIPS
PR

npm install時にnpm auditのセキュリティ警告が出る場合の対処法

saratogax
記事内に商品プロモーションを含む場合があります

最近になって、npm install 時に以下の警告が出て WARN レベルの警告が発生するようになりました。

found 25 vulnerabilities (2 low, 2 moderate, 20 high, 1 critical)
run npm audit fix to fix them, or npm audit for details

どうやら、脆弱性が疑われるライブラリバージョンを使っていると警告が出るようになったようです。

これは GHE(GitHub Enterprise)でも確認できていて、Node.js だけでなく他の言語(python, javaなど)でも同じでした。

今回はこの問題を解決していきたいと思います。

セキュリティ警告があるライブラリの確認

警告の通り、npm audit を実行することで大半のことは解決できるのですが、まずは該当のライブラリをチェックしてみましょう。

npm audit コマンドで詳細なレポートが確認できます。

不要な方は、いきなり npm audit fix で解決しちゃってください。

$ npm audit

結果レポートの一部を抜粋します。lodash や marked が指摘されていますね。

これは newman をメインに使っているリポジトリですが、newman 自体もアップデートしていなかったのでちょうどいい機会です。

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ newman                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ newman > postman-runtime > postman-sandbox > uvm > lodash    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/782                             │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ marked                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ newman                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ newman > postman-collection > marked                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/812                             │
└───────────────┴──────────────────────────────────────────────────────────────┘

セキュリティ警告の対応

では、コマンドに頼って解決しましょう。

$ npm audit fix

+ newman@4.5.4
added 18 packages from 29 contributors, removed 60 packages and updated 50 packages in 8.282s
fixed 19 of 20 vulnerabilities in 466 scanned packages
  1 vulnerability required manual review and could not be updated

ライブラリの更新を行ってくれたようですが、1 個だけ解決できなかったライブラリがあるようです。

詳しく見てみましょう。

$ npm audit

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ csv-parse                                                    │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.4.6                                                      │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ newman                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ newman > csv-parse                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/1171                            │
└───────────────┴──────────────────────────────────────────────────────────────┘
found 1 high severity vulnerability in 404 scanned packages
  1 vulnerability requires manual review. See the full report for details.

404 scanned packages と言われていて、package-lock.json を見てもバージョンは古いままになっています。

サイトにアクセスして 4.4.6 のバージョンパッケージを探してみます。警告内容と Google 翻訳の結果は以下の通り。

Versions of csv-parse prior to 4.4.6 are vulnerable to Regular Expression Denial of Service. The __isInt() function contains a malformed regular expression that processes large specially-crafted input very slowly, leading to a Denial of Service. This is triggered when using the cast option.

4.4.6より前のcsv-parseのバージョンは、正規表現のサービス拒否に対して脆弱です。 __isInt()関数には、特別に細工された大きな入力を非常にゆっくりと処理する不正な正規表現が含まれており、サービス拒否につながります。これは、キャストオプションを使用するとトリガーされます。

csv-parse(Regular Expression Denial of Service)

最新バージョンは 4.4.6 で用意されているようですね。

npm update や npm dedupe で依存関係の修復を期待したのですが、状況が変わらなかったので直接コマンドからアップデートしてみます。

$ npm install -U csv-parse

+ csv-parse@4.4.6
added 1 package from 16 contributors, updated 1 package and audited 389 packages in 1.25s
found 1 high severity vulnerability
  run `npm audit fix` to fix them, or `npm audit` for details

package-lock.json にも反映されています。

これで newman 実行時の警告はなくなったので様子見してみます。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました