[ bezpieczeństwo · łańcuch dostaw ]● 5 kred. · 20 zapytań/min

Skanowanie podatności zależności

Sprawdź do 50 zależności open source w OSV.dev jednym wywołaniem. Zwraca aliasy CVE, wyliczoną ocenę bazową CVSS, identyfikatory CWE oraz dokładne wersje usuwające każdy komunikat bezpieczeństwa.

Komunikaty OSV.devOcena wg CVSS v3.113 ekosystemów
auth · x-api-key

Nie masz klucza API?

Zaloguj się na swoje konto, aby tworzyć klucze API i nimi zarządzać.

[ 02 · integrate ]

Przewodnik integracji

Skopiuj fragment kodu, podmień swój klucz API, uruchom. Działa w dowolnym kliencie HTTP — przykłady poniżej w cURL, JavaScript i Pythonie.

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

Check open-source packages against the OSV.dev vulnerability database

parametry
packagesarraywymagane

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 · odpowiedź
{
  "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
}

Stworzone do rzeczywistych przypadków użycia

🚦

Bramki wydania

Przerwij budowanie, gdy dowolna zależność przekroczy próg CVSS. Ocena liczbowa sprawia, że polityka to jedno porównanie liczb zamiast dopasowywania tekstu.

🤖

Agenci programistyczni

Pozwól agentowi sprawdzić wersję, zanim wpisze ją do manifestu, i zaproponować poprawioną wersję w tej samej odpowiedzi.

📋

Audyt plików lock

Prześlij cały manifest partiami po 50 i uzyskaj jedno podsumowanie według istotności dla każdej usługi, bez uruchamiania skanera w CI.

🔍

Due diligence dostawców

Oceń zadeklarowany przez kontrahenta zestaw zależności na podstawie publicznych komunikatów przed podpisaniem umowy — na danych, które możesz przytoczyć.

Pola odpowiedzi

PoleTypOpis
summary.vulnerable_packagesintegerIle z przesłanych pakietów ma co najmniej jeden komunikat
summary.by_severityobjectLiczba komunikatów w podziale na critical / high / medium / low / none / unknown
summary.highest_cvss_scorenumber | nullNajwyższa ocena bazowa CVSS w całym skanowaniu
results[].vulnerablebooleanCzy ta wersja pakietu ma niewycofany komunikat
results[].vulnerabilities[].idstringIdentyfikator komunikatu OSV, np. GHSA-35jh-r3h4-6jhm
results[].vulnerabilities[].cvestring | nullAlias CVE, jeśli istnieje
results[].vulnerabilities[].severitystringCRITICAL, HIGH, MEDIUM, LOW, NONE lub UNKNOWN
results[].vulnerabilities[].cvss_scorenumber | nullOcena bazowa CVSS v3.1 wyliczona z wektora z komunikatu
results[].vulnerabilities[].cwe_idsstring[]Klasyfikacje słabości CWE dla komunikatu
results[].vulnerabilities[].fixed_versionsstring[]Wersje tego pakietu usuwające problem opisany w komunikacie
results[].errorstring | nullUstawiane, gdy tego jednego pakietu nie udało się sprawdzić; pozostałe i tak są zwracane
credits_usedintegerKredyty odjęte za to żądanie
remaining_creditsintegerKredyty pozostałe na Twoim koncie
[ 03 · limits ]

Limity zapytań

Ograniczanie działa per klucz API, w przesuwnym oknie 60 sekund. Po przekroczeniu limitu otrzymasz czyste 429 z nagłówkiem Retry-After.

częstotliwość żądań

20req/min

Per klucz API, per endpoint. Przesuwne okno 60 sekund.

współbieżność

3concurrent

Maksymalna liczba jednoczesnych żądań w toku na klucz API.

nagłówki odpowiedzi
X-RateLimit-LimitMaksymalna dozwolona liczba żądań na minutę
X-RateLimit-RemainingPozostała liczba żądań w bieżącym oknie
X-RateLimit-ResetSekundy do zresetowania bieżącego okna
Retry-AfterSekundy oczekiwania przed ponowieniem (tylko przy 429)
● 429 · zbyt wiele żądań
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
}

Źródło danych i licencja

Komunikaty pochodzą z OSV.dev, otwartej bazy podatności Google, publikowanej na licencji CC-BY-4.0. OSV łączy w jeden schemat GitHub Advisory Database, bazę podatności Go, RustSec, PyPA oraz trackery bezpieczeństwa głównych dystrybucji. My dokładamy wyliczenie oceny bazowej CVSS i podsumowanie w podziale na pakiety.

Najczęściej zadawane pytania

P: Skąd pochodzą dane o podatnościach?

O: Z OSV.dev, otwartej bazy podatności Google. Łączy ona w jeden schemat GitHub Advisory Database, bazę podatności Go, RustSec, PyPA oraz trackery bezpieczeństwa dystrybucji i publikuje je na licencji CC-BY-4.0. Komunikaty są zwykle dostępne w ciągu kilku godzin od publikacji.

P: Jak wyliczana jest ocena CVSS?

O: Komunikaty OSV zawierają ciąg wektora CVSS, ale nie samą liczbę. Wyliczamy ocenę bazową CVSS v3.1 z tego wektora według oficjalnego wzoru, dzięki czemu otrzymujesz wartość, na której możesz od razu ustawić próg. Gdy komunikat nie ma wektora v3 (tylko v4 albo komunikat ekosystemowy bez wektora), cvss_score ma wartość null, a severity korzysta z oceny samego wydawcy.

P: Czy mogę przeskanować cały plik lock?

O: Tak — sparsuj go po swojej stronie i wysyłaj do 50 pakietów na wywołanie. Jedno wywołanie kosztuje 5 kredytów niezależnie od liczby pakietów, więc partia 50 sztuk wychodzi po 0,1 kredytu za pakiet. Większe manifesty dziel na partie po 50.

P: Czy obsługiwane są zakresy wersji?

O: Nie. Wysyłaj dokładnie zainstalowaną wersję w takiej postaci, w jakiej występuje w pliku lock (4.17.15, a nie ^4.17.0). OSV porównuje zakresy z konkretną wersją, aby ustalić, czy jest objęta problemem, więc zakres na wejściu nie ma jednej odpowiedzi.

P: Co się stanie, jeśli zapytanie o jeden pakiet się nie powiedzie?

O: Skanowanie i tak zwróci wynik. Ten pakiet otrzyma pole error i zostanie wyłączony z podsumowania, a wszystkie pozostałe będą raportowane normalnie. Odpowiedź ustawia też packages_failed, żebyś wiedział, że podsumowanie jest niepełne.