対象:自分のアプリやサービスの依存パッケージに、既知の脆弱性(CVE)が紛れていないかを点検したい人。とくに「AIに手伝ってもらって作ったが、依存の安全性は手探り」という人向けです。ここでは攻撃手順は一切扱いません。自分の足元(自分のロックファイル)を点検する防御だけを扱います。
当サイトの視点:ツール選びの正解は『あなたの構成』で決まる
正直に言うと、当サイト自身はosv-scannerではなく pnpm audit を使っています(当サイトはGitHubにリポジトリを置かない構成で、npm単一だから同梱のauditで足りる)。osv-scannerが正解になるのは ①複数言語が混在(npm+PyPI+Goなど)②GitHubに依存しない単体スキャンが欲しい③コンテナイメージごと点検したい ——このどれかに当てはまる時です。「人気だから入れる」ではなく、自分の構成に合うかで選んでください。
1. osv-scannerとは
GoogleがGo言語で開発しているオープンソースの脆弱性スキャナです。脆弱性データは、言語横断のオープンな脆弱性データベース OSV.dev を使います。npmだけでなく、PyPI(Python)、Go、Rust、Maven(Java)など多くのエコシステムのロックファイルを横断的に読めるのが、npm audit のような言語固有ツールとの一番の違いです。
仕組みはシンプルです。ロックファイルに書かれた「実際に解決されたバージョン」を一覧化し、各パッケージ+バージョンをOSVのデータと照合して、該当するCVEと修正版を返します。マニフェスト(package.json の ^ 表記=下限)ではなくロックファイルを見る点が重要で、これは 実稼働版で判定するという原則 とも一致します。
2. 導入する
OSやお好みで方法を選べます。どれも公式に提供されています。
Homebrew(macOS / Linux)
brew install osv-scannerScoop(Windows)
scoop install osv-scannerGo
go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latestバイナリ / Docker
releases から直接DL、または ghcr.io/google/osv-scanner何も常駐させたくない・CIだけで使いたい場合は、インストールせずDockerイメージで走らせる手もあります。
# 入ったか確認
osv-scanner --version3. 走らせる
基本は「ディレクトリを丸ごと再帰スキャン」か「ロックファイルを名指し」のどちらかです。
# プロジェクト全体を再帰的に走査(ロックファイルを自動検出)
osv-scanner scan -r ./
# ロックファイルを名指し(npm / pnpm / yarn など)
osv-scanner scan -L pnpm-lock.yaml
# 結果を JSON で出す(CIや別ツールに渡す時)
osv-scanner scan -L package-lock.json --format json
# コンテナイメージごと点検する
osv-scanner scan image my-app:latestDockerイメージで(インストール不要で)動かす例:
docker run --rm -v "$(pwd):/src" ghcr.io/google/osv-scanner:latest scan -r /src出力の読み方
該当があれば、パッケージ名・現在のバージョン・CVE/Advisory ID・修正版が表で出ます。やることは1つ——修正版以上へ上げて、ロックファイルを更新し、もう一度走らせて消えたことを確認する。CVE番号の中身(深刻度や悪用状況)を詳しく見たい時は、番号を CVE/KEVルックアップ に貼ると、CVSSや悪用中(KEV)かどうかまで一画面で確認できます。
全部を今すぐ直す必要はない
検出が大量に出ても、慌てて全部上げる必要はありません。優先順位は「実際に悪用されているか(KEV)」×「CVSSの高さ」で決めます。使っていない経路の高スコアより、悪用中の中スコアが先。直し方の詳しい考え方は Next.jsのCVE対策 に整理してあります。
4. 継続させる(CI / cron に組み込む)
一度手で走らせて終わり、では意味がありません。毎回のビルド前か、毎日のcronで自動実行してこそ効きます。osv-scannerは脆弱性を見つけると終了コードを0以外で返すので、CIのステップにそのまま置けば、危険な依存が混ざった時にビルドを止められます。
CIの1ステップとして置く
osv-scanner scan -r ./ を1ステップ追加。非ゼロ終了でパイプラインが失敗=危険な依存をマージ前に止められる。GitHubなら公式Actionでも可
google/osv-scanner-action を使う手もある。ただしGitHubに依存しない単体実行こそosv-scannerの強み。GitHubを使わないなら cron で
5. 他ツールとの使い分け
「とりあえずosv-scanner」ではなく、自分の構成で一番素直なものを選ぶのが正解です。
osv-scanner が向く
- npm以外も混ざる(PyPI / Go / Rust / Java など多言語)
- GitHubに依存しない単体スキャンが欲しい(cron・任意CI)
- コンテナイメージごと点検したい
- 追加SaaSや課金なしで、無料データ源(OSV.dev)で済ませたい
無理に使わなくてよい
- 単一のnpm/pnpmプロジェクト → 同梱の
npm audit/pnpm auditで足りることが多い - GitHub中心の開発 → Dependabot が自動PRまでやってくれて楽
- 「人気だから」だけが理由 → それは選定理由にならない
要は、osv-scanner・pnpm audit・Dependabotは競合ではなく役割違いです。多言語横断とGitHub非依存が要るならosv-scanner、単一npmなら同梱audit、GitHub中心ならDependabot——重ねて使ってもかまいません。大事なのは「何か1つを必ず自動で回し続ける」ことです。サプライチェーン経由の混入(Codecov事件やxz-utilsバックドアのような)に対しても、依存の継続点検は最初の防衛線になります。
当サイト自身はどうしているか
当サイトは依存の自己監査を、pnpm audit を毎デプロイ前に必ず実行+日次cronで回しています(high/criticalが出たらビルドを止め、メールで通知)。osv-scannerを選ばなかったのは、当サイトがGitHubにリポジトリを置かない構成で、依存もnpm単一だから——「無料・追加バイナリ不要・GitHub非依存」という条件を pnpm audit が満たすからです。これは 記事に書いた基準 を自分たちに適用した結果で、製品の説得力にしています。なお、インストールせず今すぐ手元で1回試したいだけなら、ブラウザ内で完結する 依存パッケージ脆弱性スキャナ(ロックファイルを貼るだけ・送信なし)も用意しています。
次に読む
- 技術別:Next.jsのCVE対策(実稼働版で判定・機械監視)
- 用語:CVE / CVSS
- 事故:Codecov — サプライチェーン汚染
- ツール:依存脆弱性スキャナ(ブラウザ完結) / CVE/KEVルックアップ
よくある質問
Qosv-scannerは何をするツールですか?
あなたのプロジェクトのロックファイル(package-lock.json / pnpm-lock.yaml など)を読み、使っている依存パッケージのバージョンに既知の脆弱性(CVE)が無いかをGoogleのOSV.devデータベースと照合する無料のコマンドラインツールです。攻撃のためのツールではなく、自分の足元を点検する防御ツールです。
QDependabotと何が違いますか?
Dependabotはリポジトリを置く前提のGitHub専用機能で、該当CVEを自動でPR通知します。osv-scannerはGitHubに依存しない単体バイナリで、ローカルや任意のCI・cronから実行できます。GitHubを使わない構成や、npm以外も混ざる構成ではosv-scannerが向きます。
Qnpm audit / pnpm audit があれば十分では?
単一のnpm/pnpmプロジェクトなら、同梱のauditで十分なことが多いです。osv-scannerが効くのは、npm・PyPI・Go・Rustなどが混在する場合や、追加ツールを入れずGitHubにも依存しない単体スキャンが欲しい場合です。データ源(OSV.dev)も無料です。