ダメ元エンジニアのお勉強おメモ

ほとんど自分用のメモです。AWS をよく触ります。Web アプリとか作ります。Raspberry Pi も好きです。

依存関係に潜在的なセキュリティ脆弱性が見つかりました

【概要】

...を解決した際のメモ。↓これ。

f:id:rkr0314:20200318231418p:plain

結構色んなリポジトリに影響があって直すのが大変だった。
2つパターンがあったので書いていこうと思います。

【NCUを使って解決する】

NCU (npm-check-updates) を使ってパッケージのバージョンを
上げることで簡単に解決できるらしい。

早速インストールして、

$ yarn global add npm-check-updates

バージョンが上がるパッケージを確認して、

$ ncu

core-js                  ^3.3.2  →   ^3.6.4 
vue                     ^2.6.10  →  ^2.6.11 
@vue/cli-plugin-babel    ^4.0.0  →   ^4.2.3 
@vue/cli-plugin-eslint   ^4.0.0  →   ^4.2.3 
@vue/cli-service         ^4.0.0  →   ^4.2.3 
babel-eslint            ^10.0.3  →  ^10.1.0 
eslint                  ^5.16.0  →   ^6.8.0 
eslint-plugin-vue        ^5.0.0  →   ^6.2.2 
vue-template-compiler   ^2.6.10  →  ^2.6.11 

Run ncu -u to upgrade package.json

OKであれば package.json を更新します。

$ ncu -u

core-js                  ^3.3.2  →   ^3.6.4 
vue                     ^2.6.10  →  ^2.6.11 
@vue/cli-plugin-babel    ^4.0.0  →   ^4.2.3 
@vue/cli-plugin-eslint   ^4.0.0  →   ^4.2.3 
@vue/cli-service         ^4.0.0  →   ^4.2.3 
babel-eslint            ^10.0.3  →  ^10.1.0 
eslint                  ^5.16.0  →   ^6.8.0 
eslint-plugin-vue        ^5.0.0  →   ^6.2.2 
vue-template-compiler   ^2.6.10  →  ^2.6.11 

Run npm install to install new versions.

最後にパッケージを再インストールします。

$ yarn install

これでほとんどのリポジトリは解決してくれました!

【yarn の resolutions を使って解決する】

パッケージがメンテされていなくて、問題のあるパッケージに依存し続けてしまう場合の解決方法。
僕の場合は、去年の7月頃から全く更新されていない OnsenUI がこれにあたり、
NCU じゃ解決することができなくて色々調べたら出てきました。

公式の「なぜこれがしたいのか?」にも以下のことが書いてあります。

選択的な依存関係の解決 | Yarn

プロジェクトでサブ依存関係にあるパッケージが重要なセキュリティ上の更新があり、依存関係にあるパッケージが最小のバージョン更新を行うまで待てないことがあります。

「選択的な依存関係の解決」という名の通り、
バージョンを指定して無理やり更新するといった感じで少し荒療治です。

package.json に更新したいパッケージ名とバージョンを追記します。

  ...
  "resolutions": {
    "minimist": "^1.2.2"
  }
  ...

そしてパッケージを再インストールします。

$ yarn install

ちょっと無理やり感があり、デグレ起こしていないかなどは確認する必要がありそうですが、ひとまず脆弱性に関する問題は解決できました!

【参考サイト】

www.l08084.com

dev.to