🙀

久しぶりに使うレポジトリの脆弱性報告が有りまくったので npm package をアップデートをしてスッキリする

2021/01/07に公開

久しぶりに npm を用いたプロジェクトを開き、npm i すると、警告を受けることがあります。

% npm i
audited 1292 packages in 5.692s

113 packages are looking for funding
  run `npm fund` for details

found 2 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

vulnerabilities を訳すと「脆弱性」です。やばいですね。

npm audit コマンドを使うと、脆弱性に問題のあるパッケージを一覧できます。

% npm audit

=== npm audit security report ===

... (中略)

found 25 vulnerabilities (2 low, 23 high) in 1293 scanned packages
  run `npm audit fix` to fix 23 of them.
  2 vulnerabilities require manual review. See the full report for details.

すごい見つかって草

GitHub でも怒られまくってますね(ごめんなさい)

NG

アップデートしましょう

npm-check-updates というツールが便利なのでこれを使います。

% npm i -g npm-check-updates

ncu コマンドが使えるようになるので、打ちます。

% ncu
Checking /Users/feb19/git/web/nuxt-content-web/package.json
[====================] 2/2 100%

 @nuxt/content   ^1.0.0  →   ^1.11.1     
 nuxt           ^2.12.2  →  ^2.14.12     

Run ncu -u to upgrade package.json

ncu -u したらいいんじゃね?って言われるのでします。

% ncu -u
Upgrading /Users/takahashi.nobuhiro/git/web/nuxt-content-web/package.json
[====================] 2/2 100%

 @nuxt/content   ^1.0.0  →   ^1.11.1     
 nuxt           ^2.12.2  →  ^2.14.12     

Run npm install to install new versions.

こいつとこいつが悪いことが分かりました。

このタイミングで package.json が書き換えられます。

  "dependencies": {
-    "@nuxt/content": "^1.0.0",
-    "nuxt": "^2.12.2"
+    "@nuxt/content": "^1.11.1",
+    "nuxt": "^2.14.12"
   }
 }

npm install したらいいんじゃね?って言われるのでします。

% npm i
...(中略

added 245 packages from 316 contributors, removed 129 packages, updated 304 packages, moved 14 packages and audited 1408 packages in 34.762s

100 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

このタイミングでパッケージのアップデートが走って、 package-lock.json も書き換えられます。

再度 npm audit してみました。

% npm audit
                                                                                
                       === npm audit security report ===                        
                                                                                
found 0 vulnerabilities
 in 1408 scanned packages

よかったね。

というわけで commit

https://github.com/feb19/nuxt-content-web/commit/771b7b59da41149ea229f0d1b36f8e3489cbe2cc

GitHub さんも安心してくれました。

OK

注意点

メジャーバージョンまであげてしまうので、breaking changing があって、更新してしまったが故のバグを発生する可能性があります。

Unit テストや E2E テスト、チームでのレビュー、CI などを行って、安定的にシステムが更新できるよう、対策をしておくとよいです。(やりすぎも注意)

自動で常に ncu -u するような CI を組んでいる場合は要注意です。

その他

  • npm-check というツールもあるのでこちらが好きな人はこちらを。
  • npm i した時に怒られる前に npm outdated コマンドで古いぞーってのを一覧することもできます
% npm outdated
Package        Current   Wanted   Latest  Location
@nuxt/content    1.2.0   1.11.1   1.11.1  nuxt-content-web
nuxt            2.12.2  2.14.12  2.14.12  nuxt-content-web
  • npm audit fix コマンドで直せるものもありますが、パッチが取得できず自動で修正できないものもあるので、直せないことがあります。
% npm audit fix
removed 1 package and updated 4 packages in 4.848s

113 packages are looking for funding
  run `npm fund` for details

fixed 23 of 25 vulnerabilities in 1293 scanned packages
  2 vulnerabilities required manual review and could not be updated

% npm audit
                                                                                
                       === npm audit security report ===                        
                                                                                
... (中略)

found 2 high severity vulnerabilities in 1292 scanned packages
  run `npm audit fix` to fix 2 of them.

そして無限へ...

かんそう

  • 参考になればと思いますが、この記事を鵜呑みにしないでほしい気持ちがあります
  • ncu って 3 文字どっかのコマンドと被りそう
    • なぜか私の頭の中の m.c.A・T がちらつく

Discussion