コース目次 / 第1章
npm audit — 既知の脆弱な依存を見つける
既知の脆弱バージョンのlodashを実際にインストールし、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章です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。