未分類

minimistのupgrade問題を解決(a new security advisory from github)

※以下誤りがあり、パッケージをアップデートする際は、

ncu -uの後にnpm installを実行するのが正しいやり方のようだ。

$ ncu -u
Upgrading package.json
[====================] 1/1 100%
 
 express           4.12.x  →   4.13.x
 
Run npm install to install new versions.
 
$ npm install      # update installed packages and package-lock.json 

参考:公式サイト

すでにncu -uの後にnpm updateを行っているが、公式サイトのやり方にならって、ncu -uの後にnpm installを実行する。


先日、githubより以下のようなメールが届いた。

このメールのリンク先を開くと、どうやら現行バージョンのminimistに問題があるからアップデートが必要なようだ。

Remediation

Upgrade minimist to version 1.2.3 or later. For example:

"dependencies": {
  "minimist": ">=1.2.3"
}
or…
"devDependencies": {
  "minimist": ">=1.2.3"
}

Always verify the validity and compatibility of suggestions with your codebase.


Details

high severity
Vulnerable versions: >= 1.0.0, < 1.2.3
Patched version: 1.2.3

minimist before 1.2.2 could be tricked into adding or modifying properties of Object.prototype using a “constructor” or “proto” payload.

 

とりあえず、minimistをupdateすればいいのではと思い
Node.jsのcommand prompt画面にて
対象プロジェクトのフォルダに移動し、
npm update minimist
を実行したが、うまくいかない。

調べていくと、以下の記事に行き着き
npm-check-updatesというパッケージを使うことで
アップデートが可能なパッケージが分かるようだ。https://tech.glatchdesign.com/how-to-npm-check-updates

npm-check-updatesを使用すれば、package.jsonに記載されているパッケージのバージョンを最新にしてくれます。

 

ただ、このパッケージnpm-check-updatesをインストールして実行したが
アップデート可能なパッケージ欄にminimistの名前がない.

そこで、対象プロジェクトのpackage.jsonを確認すると
minimistがなく、package-lock.jsonで検索すると”dependencies”プロパティにminimistの記載があった。

このminimistだが、”@vue/cli-service”などの
他のパッケージの”requires”に記載がある。

だから、このminimistも含めて@vue/cli-serviceをアップデートすればいいのではと考えた。

そして、さらに調べていくと以下公式サイトに行き当たり

npm@2.6.1以降、npmアップデートはトップレベルのパッケージのみを検査します。以前のバージョンのnpmは、すべての依存関係を再帰的に検査していました。古い動作を取得するには、npm –depth 9999 updateを使用します。

そのため、minimistをアップデートするには
minimistを利用しているパッケージをすべて見つけて
そのdepthを指定する必要がありそうだ。

 

まず、minimistを利用しているパッケージは
以下の通りだ。
@vue/cli-plugin-babel@4.0.5
@vue/cli-service@4.0.5
eslint@5.16.0

ここで、minimistのdepthを調べると
@vue/cli-plugin-babel@4.0.5 の一番深いところでdepth 4
@vue/cli-service@4.0.5の一番深いところでdepth 6。

というわけで、minimistのアップデートを行うには
npm update @vue/cli-plugin-babel@4.0.5 –depth 4
npm update @vue/cli-service@4.0.5 –depth 6
npm update eslint@5.16.0 –depth 2を実行すればよいのではと思う。

ちなみに、depth=0とdepth=1のパッケージは以下の通り。

ただ、現役エンジニアに聞くと、このやり方は一般的な方法ではないらしい。

ncuコマンドを使って

ncu -u @vue/cli-plugin-babel@4.0.5

ncu -u @vue/cli-service@4.0.5

ncu -u eslint@5.16.0

npm update

でOKだとのこと。

なお、ncu -uの後にnpm updateを実行すると、npmパッケージを更新できるようだ。

ちなみに、上記を実行すると以下のようにminimistもminimist@1.2.0から以下のように
minimist@1.2.5にアップデートされる。

 

参考URL

https://omachizura.com/2016/02/npm-package-new.html

https://docs.npmjs.com/cli-commands/update.html

https://tech.glatchdesign.com/how-to-npm-check-updates

補足

ncu:アップデート可能なパッケージを確認する。package.jsonは更新されない。

ncu -u :package.json全体が更新される。実際のパッケージはまだ更新されない.

ncu -u パッケージ名package.jsonのパッケージ名を指定して更新する.

npm update:パッケージが更新されます。