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.
Não tem uma API key?
Faça login na sua conta para criar e gerenciar suas API keys.
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.
/api/scan-dependencieshttps://www.apipick.comCheck open-source packages against the OSV.dev vulnerability database
packagesarrayobrigatórioUp 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
}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
| Campo | Tipo | Descrição |
|---|---|---|
| summary.vulnerable_packages | integer | Quantos dos pacotes enviados têm ao menos um boletim |
| summary.by_severity | object | Contagem de boletins por critical / high / medium / low / none / unknown |
| summary.highest_cvss_score | number | null | Maior pontuação-base CVSS de toda a varredura |
| results[].vulnerable | boolean | Se esta versão do pacote tem algum boletim não retirado |
| results[].vulnerabilities[].id | string | Identificador do boletim no OSV, ex.: GHSA-35jh-r3h4-6jhm |
| results[].vulnerabilities[].cve | string | null | Apelido CVE, quando existe |
| results[].vulnerabilities[].severity | string | CRITICAL, HIGH, MEDIUM, LOW, NONE ou UNKNOWN |
| results[].vulnerabilities[].cvss_score | number | null | Pontuação-base CVSS v3.1 calculada a partir do vetor do boletim |
| results[].vulnerabilities[].cwe_ids | string[] | Classificações de fraqueza CWE do boletim |
| results[].vulnerabilities[].fixed_versions | string[] | Versões deste pacote que resolvem o boletim |
| results[].error | string | null | Preenchido quando este pacote específico não pôde ser verificado; os demais continuam sendo retornados |
| credits_used | integer | Créditos deduzidos por esta requisição |
| remaining_credits | integer | Créditos restantes na sua conta |
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.
20req/min
Por API key, por endpoint. Janela deslizante de 60 segundos.
3concurrent
Máximo de requisições simultâneas em andamento por API key.
X-RateLimit-LimitMáximo de requisições permitidas por minutoX-RateLimit-RemainingRequisições restantes na janela atualX-RateLimit-ResetSegundos até a janela atual reiniciarRetry-AfterSegundos a aguardar antes de tentar novamente (apenas em 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
}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.