[ 보안 · 공급망 ]● 5 크레딧 · 분당 20회

의존성 취약점 스캔 API

최대 50개의 오픈소스 의존성을 한 번의 호출로 OSV.dev에 조회합니다. CVE 별칭, 계산된 CVSS 기본 점수, CWE 분류, 그리고 각 권고를 해결하는 정확한 버전을 반환합니다.

OSV.dev 권고CVSS v3.1 점수 산출13개 생태계
auth · x-api-key

API 키가 없으신가요?

계정에 로그인하여 API 키를 생성하고 관리하세요.

[ 02 · integrate ]

통합 가이드

스니펫을 복사하고 API 키를 교체한 뒤 실행하세요. 모든 HTTP 클라이언트에서 작동합니다 — 아래에 cURL, JavaScript, Python 예제가 있습니다.

spec
POST/api/scan-dependencies
base
https://www.apipick.com

Check 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"
    }
  ]
}'
● 200 · 응답
{
  "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에서 스캐너를 돌리지 않고도 서비스별 심각도 요약을 얻을 수 있습니다.

🔍

공급업체 실사

계약 전에 제3자가 신고한 의존성 목록을 공개 권고와 대조해, 출처를 밝힐 수 있는 데이터로 위험도를 평가하세요.

응답 필드

필드타입설명
summary.vulnerable_packagesinteger제출한 패키지 중 권고가 하나 이상 해당하는 개수
summary.by_severityobjectcritical / high / medium / low / none / unknown 별 권고 건수
summary.highest_cvss_scorenumber | null스캔 전체에서 가장 높은 CVSS 기본 점수
results[].vulnerableboolean이 패키지 버전에 철회되지 않은 권고가 있는지 여부
results[].vulnerabilities[].idstringOSV 권고 ID (예: GHSA-35jh-r3h4-6jhm)
results[].vulnerabilities[].cvestring | null해당하는 CVE 별칭 (있는 경우)
results[].vulnerabilities[].severitystringCRITICAL, HIGH, MEDIUM, LOW, NONE, UNKNOWN 중 하나
results[].vulnerabilities[].cvss_scorenumber | null권고의 벡터 문자열에서 계산한 CVSS v3.1 기본 점수
results[].vulnerabilities[].cwe_idsstring[]해당 권고의 CWE 약점 분류
results[].vulnerabilities[].fixed_versionsstring[]해당 권고를 해결하는 이 패키지의 버전
results[].errorstring | null그 패키지만 조회에 실패했을 때 설정됩니다. 나머지는 정상적으로 반환됩니다
credits_usedinteger이 요청으로 차감된 크레딧
remaining_creditsinteger계정에 남은 크레딧
[ 03 · limits ]

요청 제한

스로틀링은 API 키 단위, 60초 슬라이딩 윈도우입니다. 한도에 도달하면 Retry-After 헤더가 포함된 깔끔한 429를 받습니다.

요청 속도

20req/min

API 키별, 엔드포인트별. 60초 슬라이딩 윈도우.

동시성

3concurrent

API 키당 동시에 처리 중인 최대 요청 수.

응답 헤더
X-RateLimit-Limit분당 허용되는 최대 요청 수
X-RateLimit-Remaining현재 윈도우에 남은 요청 수
X-RateLimit-Reset현재 윈도우가 초기화되기까지의 초
Retry-After재시도 전 대기 초 (429일 때만)
● 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
}

데이터 출처 및 라이선스

권고는 CC-BY-4.0으로 공개되는 구글의 오픈 취약점 데이터베이스 OSV.dev에서 가져옵니다. OSV는 GitHub Advisory Database, Go 취약점 데이터베이스, RustSec, PyPA, 주요 배포판 보안 트래커를 하나의 스키마로 통합합니다. 여기에 저희가 CVSS 기본 점수 계산과 패키지별 집계를 더했습니다.

자주 묻는 질문

Q: 취약점 데이터는 어디서 오나요?

A: 구글의 오픈 취약점 데이터베이스 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: 네. 파싱은 직접 하시고 호출당 최대 50개까지 보내세요. 패키지 수와 관계없이 한 번 호출에 5크레딧이므로 50개 묶음은 패키지당 0.1크레딧입니다. 더 큰 매니페스트는 50개 단위로 나누세요.

Q: 버전 범위를 지원하나요?

A: 지원하지 않습니다. 락파일에 적힌 그대로 설치된 정확한 버전을 보내세요(^4.17.0이 아니라 4.17.15). OSV는 구체적인 버전을 영향 범위와 대조해 판정하므로, 범위를 입력하면 답이 하나로 정해지지 않습니다.

Q: 패키지 하나의 조회가 실패하면 어떻게 되나요?

A: 스캔 결과는 그대로 반환됩니다. 해당 패키지에는 error 필드가 붙고 요약 집계에서 제외되며, 나머지 패키지는 정상적으로 보고됩니다. 응답에 packages_failed도 설정되어 요약이 불완전함을 알 수 있습니다.