手動で npm audit fix
キーボードのビルドガイド公開用に docsaurus
を使っています。
npm audit fix
を流したら以下のように15の high
警告が出ました。
# npm audit report
path-to-regexp 2.0.0 - 3.2.0
Severity: high
path-to-regexp outputs backtracking regular expressions - https://github.com/advisories/GHSA-9wv6-86v2-598j
No fix available
node_modules/serve-handler/node_modules/path-to-regexp
serve-handler *
Depends on vulnerable versions of path-to-regexp
~~以下略~~
どうやら、path-to-regexp
というモジュールに脆弱性があるようです。
No fix available
とあるので、 npm audit fix --force
では自動適用されません。
レポートにあるhttps://github.com/advisories/GHSA-9wv6-86v2-598jを確認すると
とあります。
package-lock.json
を開き、path-to-regexp
で探してみます。
$ grep path-to-regexp package-lock.json
"path-to-regexp": "0.1.10",
"node_modules/express/node_modules/path-to-regexp": {
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
"node_modules/path-to-regexp": {
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz",
"path-to-regexp": "^1.7.0",
"path-to-regexp": "2.2.1",
"node_modules/serve-handler/node_modules/path-to-regexp": {
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz",
脆弱性があるのは serve-handler
が依存している "path-to-regexp": "2.2.1"
のようです。
package-lock.json を書き換える
2.2.1
の場合、 3.3.0
がパッチ済みバージョンであると公開されているので、 package-lock.json
の中身を書き換えます。
dependencies
の中だけ書き換え、解決されるパッケージの詳細情報は触らないでおきます。
"node_modules/serve-handler": {
"version": "6.1.5",
"resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz",
"integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==",
"license": "MIT",
"dependencies": {
"bytes": "3.0.0",
"content-disposition": "0.5.2",
"fast-url-parser": "1.1.3",
"mime-types": "2.1.18",
"minimatch": "3.1.2",
"path-is-inside": "1.0.2",
"path-to-regexp": "3.3.0", ← ここを書き換え
"range-parser": "1.2.0"
}
},
"node_modules/serve-handler/node_modules/path-to-regexp": {
"version": "2.2.1", ← こちらは気にしない
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz",
"integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==",
"license": "MIT"
},
npm install する
npm install
します。
$ npm i
changed 1 package, and audited 1207 packages in 2s
296 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
警告がなくなりました!
package-lock.jsonも更新されている
自動的にパッケージ詳細も更新されています。
"node_modules/serve-handler": {
"version": "6.1.5",
"resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz",
"integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==",
"license": "MIT",
"dependencies": {
"bytes": "3.0.0",
"content-disposition": "0.5.2",
"fast-url-parser": "1.1.3",
"mime-types": "2.1.18",
"minimatch": "3.1.2",
"path-is-inside": "1.0.2",
"path-to-regexp": "3.3.0",
"range-parser": "1.2.0"
}
},
↓↓↓ 以下が更新された ↓↓↓
"node_modules/serve-handler/node_modules/path-to-regexp": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz",
"integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==",
"license": "MIT"
},
npm ci
ではうまくいかないので注意してください。
完了!
というわけで、npm audit fix
で自動で解決してくれない場合の対応でした。
いつも忘れちゃうのでメモしておきます。
(最近はメモしたことも忘れてしまうが・・・)