npm パッケージの脆弱性報告対応をした
utilities
という npm パッケージの脆弱性報告の対応を、ここ1週間くらい断続的にやってました。
2022年末に、npm などオープンソースのパッケージのセキュリティアップデートを自動通知してくれるツール (Dependabot や Renovate の類) を提供する会社である Snyk から、utilities
パッケージの脆弱性の報告を受けたから対応してくれとのメールが、私を含む何名かに届きました。
このパッケージのオーナーである mde こと Matthew Eernisse 氏とは、以前同氏の開発していた Node.js のバックエンドフレームワーク Geddy などにコントリビュートしたことがあり、多少の交流がありました。
utilities
パッケージについては特に心当たりがなく、何故私にもメールが来ているのかわからなかったのですが、確認したところ utilities
には8年以上前に1コミットだけコントリビュートしたことがあり、そのため npmjs.com におけるオーナー権限を与えられていたからでした。
この脆弱性は mde 氏が対応するだろうと思って放置していたのですが、2月末になっても音沙汰はなく、Snyk から催促のメールが来てしまいましたので、私の方で対応することにしました。
Step 1. 方針策定
GitHub のコミットログを見る限り、utilities
は最近はほとんどメンテされておらず、また依存しているパッケージも14個とそれほど多くはありません。
基本的にこれは mde 氏の個人用パッケージの性格が強く、現在であれば @mde/utilities
などとして、scoped パッケージになっているべきものとも言えます。(このパッケージが作成された当時は、npm には scoped パッケージは導入されていませんでした。)
そのため、脆弱性は修正せず、パッケージを deprecate させる方針で考えました。
Step 2. Deprecation
mde 氏に許可を得て、パッケージを deprecate させました。
普通に npm deprecate
コマンドで deprecate させます。
$ npm deprecate utilities "This package is no longer maintained and vulnerability exists."
参考:
今思うとちょっと deprecation message の英語がおかしいような…
Step 3. CVE の登録
パッケージを deprecated にしたことを Snyk に報告すると、Snyk の方で CVE を登録してくれました。
npm audit
や Dependabot でアラートが出るようにする
Step 4. npm の CLI には npm audit
というコマンドがあり、使用しているパッケージに脆弱性のあるものがないかチェックしてくれます。今回の脆弱性も、npm audit
で表示されるようにしたいところです。
また、Dependabot でも脆弱性がある旨、アラートを出してほしいところです。
CVE を登録しただけでは npm audit
には反映されないとのことでしたので、npm サポートに問い合わせました。
まず案内されたのは、GitHub リポジトリーの Security タブから、セキュリティアドバイザリーを登録する方法です。
しかし、私は GitHub リポジトリーの方はオーナー権限がないので、私の方では登録できませんでした。
mde 氏に登録を依頼したのですが、また1週間ほど音沙汰がなく…
そうこうしているうちに、自分が GitHub Issue に投稿したメッセージに書いた CVE-2023-26105
という文字列にリンクが付いていることに気が付きました。
リンク先は下記のページで、GitHub のセキュリティアドバイザリーのページのようです。
現在はパッケージ名が指定されているのですが、最初は Unreviewed という状態になっており、npm パッケージ名も登録されていませんでした。そしてパッケージ名が表記される部分のところには、Suggest a Package というリンクがあり、私の方でパッケージ名を登録することができました。
下記は別の脆弱性のページですが、元々は下記のスクリーンショットのような状態でした。
(参考までに、Unreviewed のセキュリティアドバイザリーページはこちらの一覧から見ることができます。)
パッケージ名等の登録フォームを埋めていくと、下記のような Pull Request が作成されました。
半日ほど経つとマージされたので、npm audit
の結果を確認してみたところ、正常に utilities
パッケージの脆弱性が報告されるようになっていました。
$ cat package.json
{
"name": "test",
"version": "1.0.0",
"license": "UNLICENSED",
"dependencies": {
"utilities": "latest"
}
}
$ npm install
npm WARN deprecated utilities@1.0.6: This package is no longer maintained and vulnerability exists.
added 1 package, and audited 2 packages in 394ms
1 high severity vulnerability
Some issues need review, and may require choosing
a different dependency.
Run `npm audit` for details.
$ npm audit
# npm audit report
utilities *
Severity: high
mde utilities contains Prototype Pollution - https://github.com/advisories/GHSA-wxfj-84xf-7gxv
No fix available
node_modules/utilities
1 high severity vulnerability
Some issues need review, and may require choosing
a different dependency.
Dependabot のアラートも出ました。
私の保有しているリポジトリーでも、1つだけ古いものでこの utilities
パッケージを使っていたものがあり、GitHub から脆弱性がある旨通知メールが届いていました。
Step 5. README に deprecated である旨書く
取り敢えず Pull Request 出してマージされました。
これにて対応完了のはず。
Discussion