[ segurança · cadeia de suprimentos ]● 5 créd. · 20 req/min

Varredura de vulnerabilidades em dependências

Verifique até 50 dependências de código aberto no OSV.dev em uma única chamada. Retorna apelidos CVE, uma pontuação-base CVSS calculada, identificadores CWE e as versões exatas que corrigem cada boletim.

Boletins do OSV.devPontuado em CVSS v3.113 ecossistemas
auth · x-api-key

Não tem uma API key?

Faça login na sua conta para criar e gerenciar suas API keys.

[ 02 · integrate ]

Guia de integração

Copie um trecho, troque sua API key e execute. Funciona em qualquer cliente HTTP — exemplos abaixo em cURL, JavaScript e Python.

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

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

parâmetros
packagesarrayobrigatório

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

Feita para Casos de Uso Reais

🚦

Travas de release

Faça o build falhar quando qualquer dependência ultrapassar um limite de CVSS. Com a pontuação numérica, a política vira uma comparação de uma linha em vez de conferir texto.

🤖

Agentes de programação

Deixe o agente verificar uma versão antes de escrevê-la no manifesto e sugerir a versão corrigida na mesma resposta.

📋

Auditoria de lockfiles

Envie o manifesto inteiro em lotes de 50 e receba um resumo por severidade para cada serviço, sem rodar um scanner na CI.

🔍

Due diligence de fornecedores

Avalie o conjunto de dependências declarado por um terceiro à luz de boletins públicos antes de assinar, com dados que você pode citar.

Campos da resposta

CampoTipoDescrição
summary.vulnerable_packagesintegerQuantos dos pacotes enviados têm ao menos um boletim
summary.by_severityobjectContagem de boletins por critical / high / medium / low / none / unknown
summary.highest_cvss_scorenumber | nullMaior pontuação-base CVSS de toda a varredura
results[].vulnerablebooleanSe esta versão do pacote tem algum boletim não retirado
results[].vulnerabilities[].idstringIdentificador do boletim no OSV, ex.: GHSA-35jh-r3h4-6jhm
results[].vulnerabilities[].cvestring | nullApelido CVE, quando existe
results[].vulnerabilities[].severitystringCRITICAL, HIGH, MEDIUM, LOW, NONE ou UNKNOWN
results[].vulnerabilities[].cvss_scorenumber | nullPontuação-base CVSS v3.1 calculada a partir do vetor do boletim
results[].vulnerabilities[].cwe_idsstring[]Classificações de fraqueza CWE do boletim
results[].vulnerabilities[].fixed_versionsstring[]Versões deste pacote que resolvem o boletim
results[].errorstring | nullPreenchido quando este pacote específico não pôde ser verificado; os demais continuam sendo retornados
credits_usedintegerCréditos deduzidos por esta requisição
remaining_creditsintegerCréditos restantes na sua conta
[ 03 · limits ]

Rate limits

O throttling é por API key, em janela deslizante de 60 segundos. Ao atingir o limite, você recebe um 429 limpo com um header Retry-After.

taxa de requisições

20req/min

Por API key, por endpoint. Janela deslizante de 60 segundos.

concorrência

3concurrent

Máximo de requisições simultâneas em andamento por API key.

headers de resposta
X-RateLimit-LimitMáximo de requisições permitidas por minuto
X-RateLimit-RemainingRequisições restantes na janela atual
X-RateLimit-ResetSegundos até a janela atual reiniciar
Retry-AfterSegundos a aguardar antes de tentar novamente (apenas em 429)
● 429 · requisições em excesso
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
}

Fonte dos dados e licença

Os boletins vêm do OSV.dev, a base aberta de vulnerabilidades do Google, publicada sob CC-BY-4.0. O OSV reúne em um único esquema o GitHub Advisory Database, a base de vulnerabilidades do Go, o RustSec, o PyPA e os rastreadores de segurança das principais distribuições. Nós acrescentamos o cálculo da pontuação-base CVSS e o resumo por pacote.

Perguntas Frequentes

P: De onde vêm os dados de vulnerabilidades?

R: Do OSV.dev, a base aberta de vulnerabilidades do Google. Ela reúne em um único esquema o GitHub Advisory Database, a base de vulnerabilidades do Go, o RustSec, o PyPA e os rastreadores de segurança das distribuições, e publica tudo sob CC-BY-4.0. Os boletins costumam ficar disponíveis poucas horas após a publicação.

P: Como a pontuação CVSS é calculada?

R: Os boletins do OSV trazem a string do vetor CVSS, mas não o número. Calculamos a pontuação-base CVSS v3.1 a partir desse vetor pela fórmula oficial, então você recebe um valor sobre o qual pode aplicar um limite diretamente. Quando um boletim não tem vetor v3 (só v4, ou boletim de ecossistema sem vetor), cvss_score vem null e severity recorre à classificação do próprio publicador.

P: Posso varrer um lockfile inteiro?

R: Sim: faça o parse do seu lado e envie até 50 pacotes por chamada. Cada chamada custa 5 créditos, não importa quantos pacotes leve, então um lote de 50 sai a 0,1 crédito por pacote. Para manifestos maiores, divida em lotes de 50.

P: Há suporte a intervalos de versão?

R: Não. Envie a versão exata instalada, como aparece no seu lockfile (4.17.15, não ^4.17.0). O OSV compara os intervalos com uma versão concreta para decidir se ela é afetada, então um intervalo como entrada não tem resposta única.

P: O que acontece se a consulta de um pacote falhar?

R: A varredura é retornada mesmo assim. Aquele pacote recebe o campo error e fica de fora das contagens do resumo, enquanto todos os outros são reportados normalmente. A resposta também traz packages_failed para você saber que o resumo está incompleto.