手動で 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 で自動で解決してくれない場合の対応でした。
いつも忘れちゃうのでメモしておきます。

(最近はメモしたことも忘れてしまうが・・・)

Subscribe to 猫好きが猫以外のことも書く

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe