コース目次 / 第1章

npm audit — 既知の脆弱な依存を見つける

既知の脆弱バージョンのlodashを実際にインストールし、npm auditで検出、npm audit fixで直すまでを一通り行います。重大度・アドバイザリの読み方を押さえます。

第1章 / 全5章目安 約10分この章のゴール: npm auditで既知の脆弱性を検出し、npm audit fixで修正できるようになる

npm audit は、あなたのプロジェクトの依存に、既知の脆弱性が報告されているものが無いかを、公開されているデータベースと照合してくれるコマンドです。実際に試します。

演習用フォルダを、作る

mkdir sca-practice && cd sca-practice
npm init -y

あえて、既知の脆弱性が報告されている古いバージョンを指定してインストールします。

npm install lodash@4.17.15

npm audit を、読む

npm audit
# npm audit report

lodash  <=4.17.23
Severity: high
Command Injection in lodash - https://github.com/advisories/GHSA-35jh-r3h4-6jhm
Prototype Pollution in lodash - https://github.com/advisories/GHSA-p6mc-m468-83gw
Regular Expression Denial of Service (ReDoS) in lodash - https://github.com/advisories/GHSA-29mw-wpgm-hmr9
...
fix available via `npm audit fix`

1 high severity vulnerability

読み方は、こうです。
Severity: high — 重大度。low・moderate・high・critical の4段階(sec-report で学んだ影響評価と同じ発想です)。
アドバイザリのタイトルとリンク — 「何の脆弱性か」の名前(コマンドインジェクション、プロトタイプ汚染など)と、詳細が書かれた GitHub Advisory Database へのリンク。
fix available via … — 直す方法。多くの場合、対象パッケージを新しいバージョンに上げれば直ります。

npm audit fix — 直す

npm audit fix
changed 1 package, and audited 2 packages in 1s
found 0 vulnerabilities
npm audit
found 0 vulnerabilities

npm audit fix は、報告されている脆弱性を解消できる範囲で、依存を自動的にアップグレードしてくれます。今回は lodash が 4.18.1 に上がり、脆弱性が解消されました。
注意点。アップグレードは、そのパッケージの挙動が変わる可能性を伴います(とくにメジャーバージョンが変わる場合)。npm audit fix の実行後は、アプリが正しく動くか、必ずテストで確かめてください。–force を付けると、より大きなバージョン差でも強制的に上げますが、互換性が壊れるリスクも上がります。

定期的に確認する習慣

依存関係の脆弱性は、あなたが何もしなくても、ある日突然「既知」になります。今日は安全でも、明日、その依存パッケージに新しい脆弱性が発見・報告されるかもしれません。だから npm audit は一度きりではなく、定期的に(できれば CI に組み込んで、コードを変更するたびに)確認するのが実務の作法です。

持ち帰る一言

依存の脆弱性は、npm auditで機械的に見つかる。 重大度・アドバイザリを読み、npm audit fixで直し、直したらテストで確認する。次は、この「直った状態」を、他の開発者やデプロイ先でも確実に再現するための仕組み——lockfileを見ます。

こうなっていればOK

卒業まであと3章です。

この章はまだ完了していません。