- web開発において、ライブラリを利用した開発はほぼ必須ですが、それらの脆弱性対応は緊急性高いものでもない限り、後回しにしがちな作業にされがちです。
- またAIによってコードを書く速度自体は上がっていますが、それに比例して脆弱な依存や更新が止まっているパッケージを踏むリスクも増えており、人の目でのレビューが追いつかなくなってきていると感じます。
- 直さないまま時間が経つと、作業量が増えるし、なんとなくの不安を抱えるので、こまめに払って手元を安全にしておく方が、結果的に安心して機能開発に集中できます。
- 今回は、OWASPのLabプロジェクトになっているcve-lite-cliを手元のPCで動かして、レポートを見ながら管理する方法を記録いたします。
概要
- JS/TS向けの、自身のPC上だけで完結する脆弱性スキャナーです。
- npmやpnpmなどのパッケージマネージャーに対応していて、直接入れているパッケージと、そのパッケージが連れてくる依存パッケージを分けて表示してくれます。
- CVEを一覧で出すだけでなく、そのままコピーして実行できる修正コマンドまで教えてくれるのが特徴です。
- OWASP Lab認定でもあり、有名OSSや公的機関等でも利用されているようです。
- 公式サイト
環境
- Node.js
- cve-lite-cli v1.33.0以上
背景
- npmでの脆弱性検知は
npm auditが標準ですが、依存表示がわかりづらく、どう直せばいいのか読み解く必要があります。 - またDependabotは便利ですが、パッケージ1つにつき1つPRが作られるので、数が多いと確認が追いつかず溜まりがちです。
- CIとかもありますが、導入コストもあるし、せっかくスキャンしても見ない場合もあります。
- そこで、pushする前に手元で完結し、修正コマンドがそのままコピペで使える
cve-lite-cliを導入することにしました。
手順
プロジェクトの作成
npm init -y
脆弱性のあるパッケージを意図的にインストール
- 動作確認のため、あえて脆弱性のあるパッケージ(例: lodash@4.17.21未満)を入れます。
- lodash@4.17.21: https://osv.dev/vulnerability/CVE-2021-23337
npm i lodash@4.17.21
cve-lite-cliの導入
- 開発時だけ使うパッケージとして追加します。
npm i -D cve-lite-cli
package.jsonにscriptsを追加
"scripts": {
"cve:report": "cve-lite . --check-maintenance --report"
}
-
--check-maintenance:更新が止まっているパッケージや、非推奨になったパッケージも一緒にチェックしてくれるオプションです。 -
--report:ブラウザでそのまま開けるHTMLレポートを作ってくれるオプションです。
レポート確認
npm run cve:report
- 実行すると
./cve-report/にHTMLレポートが作られて、ブラウザが自動で開き、以下のようなレポートが作成されます。
- 深刻度ごとのカードや、検索できる一覧、コピーして使える修正コマンドが1つの画面にまとまっていることを確認しました。
見る指標
- CVSS(脆弱性の深刻度を表すスコア)は「どれだけ危険か」を表す指標であって、「本当に狙われるか」までは教えてくれません。
- EPSSは、そのCVEが今後30日以内に実際に悪用される確率をAIモデルで計算したものです。FIRST(セキュリティ関連団体)が公開しています。
- 実際に悪用されるCVEは全体のごく一部しかないので、CVSSだけで優先順位を決めると、実際には狙われない脆弱性の対応に時間を使ってしまうことがあります。
-
cve-lite-cliはv1.33以降で、CVSSとEPSSを組み合わせた4段階の優先度タグ(fix_now/fix_soon/monitor/low_priority)を追加しています。学術的に検証された指標が、そのまま実装に反映されているので安心材料になります。 - EPSS公式サイト
まとめ
- 結果が「見える」ようにするだけで、更新や対応への意識は自然と変わっていくと感じました。
- 難しい設定なしで自分のプロジェクトを守れる状態にできるのは、1人で開発している人にとっても心理的なハードルを下げてくれると思います。
- まずはレポートで今の状態を確認するところから始めて、見る習慣をつけてCIとかAI利用とかに広げていく緩さで続けていくのがちょうどいいと感じました。
