OSV で依存関係の脆弱性をチェック
マニフェストやロックファイルを読み込むと、記載されたパッケージ名・バージョン・エコシステムを OSV に問い合わせ、返されたアドバイザリを深刻度と修正版とともに表に表示します。ロックファイルは解決済みのバージョンを使い、マニフェストの範囲は宣言された最も低いバージョンで確認します。
マニフェストやロックファイルを読み込むと、記載されたパッケージ名・バージョン・エコシステムを OSV に問い合わせ、返されたアドバイザリを深刻度と修正版とともに表に表示します。ロックファイルは解決済みのバージョンを使い、マニフェストの範囲は宣言された最も低いバージョンで確認します。
マニフェストまたはロックファイルを読み込んで[依存関係をスキャン]を押すと、読み取れたパッケージ名・バージョン・エコシステムが OSV API に問い合わせされ、返されたアドバイザリが深刻度と修正版とともに表に並びます。解析はページ内で行われ、送信されるのはパッケージ名・バージョン・エコシステムだけです。
実測: 依存関係 8 件の package.json は 13 件の検出結果を返し、requirements.txt は 5 パッケージで 107 件、express 5.1.0・minimist 1.2.8・chalk 5.3.0 を記したマニフェストは 0 件でした。
npm は package.json(dependencies と devDependencies)と 3 種類のロックファイル(package-lock v1/v2/v3、yarn.lock、pnpm-lock.yaml)、PyPI は requirements.txt、Maven は pom.xml(範囲指定を含む)、CycloneDX の bom.json は npm・PyPI・Maven・NuGet・Go・crates.io を対象にします。「npm lodash 4.17.15」のような行も読み取ります。実際にインストールされる版が入るロックファイルのほうが正確な入力です。
読み取れない入力は例外ではなく一文で返ります: プレーンテキスト、壊れた JSON、@ でつないだ行はいずれも「バージョン付きの依存関係が見つかりませんでした」と表示し、表は空のままでした。
範囲は宣言された最も低いバージョンで問い合わせます。Django>=2.2,<3.0 は 2.2、Maven の [4.3.0,4.3.30] は 4.3.0 です。Version 列は問い合わせた値ではなくマニフェストの原文(「>=2.2」「[4.3.0,4.3.30]」)を表示するので、元のファイルと見比べられます。
レジストリのバージョンとして読めない行は除外され、注記に件数が出ます: タグ付き git URL、file:、workspace:*、latest、*、pom の ${property} 参照、purl のない CycloneDX コンポーネントなどです。問い合わせは最大 100 パッケージで、120 件のマニフェストはちょうど 100 件を送り、その旨を指標の下に表示しました。
1 行が 1 件のアドバイザリです: パッケージ、確認したバージョン、アドバイザリの ID と概要、深刻度、修正版。以前は詳細の取得が 40 件までで、それ以降の行は深刻度が Unknown、修正版が「—」のままでした。83 件のアドバイザリを持つマニフェストでは 83 件すべてを取得し、各行に深刻度と、そのパッケージについて OSV が示す修正版が入っています。
検出結果が 0 でも安全という意味ではありません: その後に公開されたアドバイザリは含まれず、範囲を最も低いバージョンで確認した場合、残りの範囲は未確認のままです。OSV API に接続できないときは空の結果ではなくその旨を表示し、HTTP 503 は 503 として報告します。アドバイザリは 6 件ずつ、1 件あたり 20 秒の制限で取得するため、接続が止まってもスキャンが回り続けることはなく、該当行は深刻度 Unknown で返ります。