依存パッケージ 脆弱性スキャン API
最大 50 件のオープンソース依存パッケージを 1 回の呼び出しで OSV.dev に照会します。CVE 別名、算出した CVSS 基本値、CWE 分類、そして各アドバイザリを解消する正確なバージョンを返します。
統合ガイド
スニペットをコピーし、APIキーを差し替えて実行するだけ。任意のHTTPクライアントで動作します — 以下にcURL、JavaScript、Pythonの例を掲載。
/api/scan-dependencieshttps://www.apipick.comCheck open-source packages against the OSV.dev vulnerability database
packagesarray必須Up to 50 objects, each with ecosystem, name, and an exact installed version. [{"ecosystem":"npm","name":"lodash","version":"4.17.15"}]
curl -X POST "https://www.apipick.com/api/scan-dependencies" \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"packages": [
{
"ecosystem": "npm",
"name": "lodash",
"version": "4.17.15"
},
{
"ecosystem": "PyPI",
"name": "requests",
"version": "2.19.0"
}
]
}'{
"summary": {
"packages_scanned": 2,
"vulnerable_packages": 2,
"total_vulnerabilities": 8,
"by_severity": {
"critical": 1,
"high": 3,
"medium": 4,
"low": 0,
"none": 0,
"unknown": 0
},
"highest_cvss_score": 9.8
},
"results": [
{
"ecosystem": "npm",
"name": "lodash",
"version": "4.17.15",
"vulnerable": true,
"highest_severity": "HIGH",
"highest_cvss_score": 7.4,
"vulnerability_count": 6,
"vulnerabilities": [
{
"id": "GHSA-35jh-r3h4-6jhm",
"aliases": [
"CVE-2021-23337"
],
"cve": "CVE-2021-23337",
"summary": "Command Injection in lodash",
"severity": "HIGH",
"cvss_score": 7.2,
"cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H",
"cwe_ids": [
"CWE-77"
],
"published": "2021-02-15T00:00:00Z",
"fixed_versions": [
"4.17.21"
],
"advisory_url": "https://osv.dev/vulnerability/GHSA-35jh-r3h4-6jhm"
}
],
"error": null
}
],
"source": "OSV.dev (Google Open Source Vulnerabilities, CC-BY-4.0)",
"credits_used": 5,
"remaining_credits": 95
}実際のユースケースに対応
リリース判定
いずれかの依存パッケージが CVSS のしきい値を超えたらビルドを失敗させます。数値スコアがあるため、ポリシーは文字列照合ではなく一行の数値比較で済みます。
コーディングエージェント
エージェントがマニフェストにバージョンを書き込む前に照会し、同じやり取りの中で修正済みバージョンを提案できます。
ロックファイル監査
マニフェスト全体を 50 件ずつに分けて送信すれば、CI でスキャナーを動かさずに、サービスごとの深刻度サマリーが得られます。
取引先デューデリジェンス
契約前に、第三者が申告した依存パッケージ一式を公開アドバイザリと突き合わせ、出典を示せるデータで評価します。
レスポンスのフィールド
| フィールド | 型 | 説明 |
|---|---|---|
| summary.vulnerable_packages | integer | 送信したパッケージのうち、アドバイザリが 1 件以上該当した数 |
| summary.by_severity | object | critical / high / medium / low / none / unknown 別のアドバイザリ件数 |
| summary.highest_cvss_score | number | null | スキャン全体で最も高い CVSS 基本値 |
| results[].vulnerable | boolean | このバージョンに撤回されていないアドバイザリがあるかどうか |
| results[].vulnerabilities[].id | string | OSV のアドバイザリ ID(例: GHSA-35jh-r3h4-6jhm) |
| results[].vulnerabilities[].cve | string | null | 対応する CVE 別名(存在する場合) |
| results[].vulnerabilities[].severity | string | CRITICAL、HIGH、MEDIUM、LOW、NONE、UNKNOWN のいずれか |
| results[].vulnerabilities[].cvss_score | number | null | アドバイザリのベクター文字列から算出した CVSS v3.1 基本値 |
| results[].vulnerabilities[].cwe_ids | string[] | そのアドバイザリの CWE 脆弱性分類 |
| results[].vulnerabilities[].fixed_versions | string[] | そのアドバイザリを解消する当該パッケージのバージョン |
| results[].error | string | null | そのパッケージだけ照会に失敗した場合に設定されます。他のパッケージは通常どおり返ります |
| credits_used | integer | このリクエストで差し引かれたクレジット |
| remaining_credits | integer | アカウントに残っているクレジット |
レート制限
スロットリングはAPIキー単位、60秒のスライディングウィンドウです。上限に達すると、Retry-Afterヘッダー付きのクリーンな429が返されます。
20req/min
APIキー単位・エンドポイント単位。60秒のスライディングウィンドウ。
3concurrent
APIキーごとの同時進行リクエストの最大数。
X-RateLimit-Limit1分あたりに許可される最大リクエスト数X-RateLimit-Remaining現在のウィンドウで残っているリクエスト数X-RateLimit-Reset現在のウィンドウがリセットされるまでの秒数Retry-After再試行までの待機秒数(429の場合のみ)HTTP/1.1 429 Too Many Requests
Retry-After: 12
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 12
{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded: 20 requests/minute per API key. Retry after 12s.",
"retry_after": 12
}データ提供元とライセンス
アドバイザリは Google のオープン脆弱性データベース OSV.dev(CC-BY-4.0 で公開)に由来します。OSV は GitHub Advisory Database、Go 脆弱性データベース、RustSec、PyPA、主要ディストリビューションのセキュリティトラッカーを単一のスキーマに統合しています。当社はそこに CVSS 基本値の算出とパッケージ単位の集計を加えています。
よくある質問
Q: 脆弱性データの出典はどこですか?
A: Google のオープン脆弱性データベース OSV.dev です。GitHub Advisory Database、Go 脆弱性データベース、RustSec、PyPA、各ディストリビューションのセキュリティトラッカーを単一のスキーマに統合し、CC-BY-4.0 で公開しています。新しいアドバイザリは通常、公開から数時間以内に参照できます。
Q: CVSS スコアはどのように算出していますか?
A: OSV のアドバイザリには CVSS のベクター文字列は含まれますが、数値は含まれません。当社はそのベクターから公式の計算式で CVSS v3.1 基本値を算出するため、そのまましきい値判定に使える数値が得られます。v3 のベクターがないアドバイザリ(v4 のみ、あるいはベクターを持たないエコシステム由来のもの)では cvss_score は null となり、severity は公開元自身の評価にフォールバックします。
Q: ロックファイル全体をスキャンできますか?
A: はい。お客様側でパースしたうえで、1 回の呼び出しにつき最大 50 件を送信してください。パッケージ数にかかわらず 1 回 5 クレジットなので、50 件なら 1 件あたり 0.1 クレジットです。それより大きいマニフェストは 50 件ずつに分割してください。
Q: バージョン範囲には対応していますか?
A: 対応していません。ロックファイルに記載されているとおりの、インストール済みの正確なバージョンを送信してください(^4.17.0 ではなく 4.17.15)。OSV は具体的なバージョンを影響範囲と突き合わせて判定するため、範囲を入力しても答えは一意に定まりません。
Q: 1 件のパッケージの照会が失敗したらどうなりますか?
A: スキャン結果はそのまま返ります。該当パッケージには error フィールドが付き、サマリーの集計からは除外されますが、他のパッケージは通常どおり報告されます。レスポンスには packages_failed も設定され、集計が不完全であることが分かります。