[ seguridad · cadena de suministro ]● 5 créd. · 20 sol./min

Escaneo de vulnerabilidades en dependencias

Comprueba hasta 50 dependencias de código abierto contra OSV.dev en una sola llamada. Devuelve alias CVE, una puntuación base CVSS calculada, identificadores CWE y las versiones exactas que corrigen cada aviso.

Avisos de OSV.devPuntuado con CVSS v3.113 ecosistemas
auth · x-api-key

¿No tienes una clave API?

Inicia sesión en tu cuenta para crear y gestionar tus claves API.

[ 02 · integrate ]

Guía de integración

Copia un fragmento, sustituye tu clave de API y ejecútalo. Funciona en cualquier cliente HTTP — ejemplos abajo en cURL, JavaScript y Python.

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

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

parámetros
packagesarrayobligatorio

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

Diseñada para casos de uso reales

🚦

Control de despliegues

Detén una compilación cuando alguna dependencia supere un umbral CVSS. Con una puntuación numérica, la política es una comparación de una línea en vez de un cotejo de cadenas.

🤖

Agentes de programación

Deja que un agente compruebe una versión antes de escribirla en un manifiesto y proponga la versión corregida en el mismo turno.

📋

Auditoría de lockfiles

Envía un manifiesto completo en lotes de 50 y obtén un resumen por gravedad para cada servicio, sin ejecutar un escáner en CI.

🔍

Diligencia debida de proveedores

Puntúa el conjunto de dependencias declarado por un tercero frente a avisos públicos antes de firmar, con datos que puedes citar.

Campos de la respuesta

CampoTipoDescripción
summary.vulnerable_packagesintegerCuántos de los paquetes enviados tienen al menos un aviso
summary.by_severityobjectRecuento de avisos por critical / high / medium / low / none / unknown
summary.highest_cvss_scorenumber | nullPuntuación base CVSS más alta de todo el escaneo
results[].vulnerablebooleanSi esta versión del paquete tiene algún aviso no retirado
results[].vulnerabilities[].idstringIdentificador del aviso en OSV, p. ej. GHSA-35jh-r3h4-6jhm
results[].vulnerabilities[].cvestring | nullAlias CVE cuando existe
results[].vulnerabilities[].severitystringCRITICAL, HIGH, MEDIUM, LOW, NONE o UNKNOWN
results[].vulnerabilities[].cvss_scorenumber | nullPuntuación base CVSS v3.1 calculada a partir del vector del aviso
results[].vulnerabilities[].cwe_idsstring[]Clasificaciones de debilidad CWE del aviso
results[].vulnerabilities[].fixed_versionsstring[]Versiones de este paquete que resuelven el aviso
results[].errorstring | nullSe rellena cuando ese paquete concreto no se pudo comprobar; el resto sí se devuelve
credits_usedintegerCréditos descontados por esta solicitud
remaining_creditsintegerCréditos restantes en tu cuenta
[ 03 · limits ]

Límites de tasa

La limitación es por clave de API, ventana deslizante de 60 segundos. Al alcanzar el límite recibes un 429 limpio con una cabecera Retry-After.

tasa de peticiones

20req/min

Por clave de API, por endpoint. Ventana deslizante de 60 segundos.

concurrencia

3concurrent

Máximo de peticiones simultáneas en curso por clave de API.

cabeceras de respuesta
X-RateLimit-LimitMáximo de peticiones permitidas por minuto
X-RateLimit-RemainingPeticiones restantes en la ventana actual
X-RateLimit-ResetSegundos hasta que se reinicia la ventana actual
Retry-AfterSegundos a esperar antes de reintentar (solo en 429)
● 429 · demasiadas peticiones
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
}

Fuente de datos y licencia

Los avisos proceden de OSV.dev, la base de datos abierta de vulnerabilidades de Google, publicada bajo CC-BY-4.0. OSV unifica en un solo esquema la GitHub Advisory Database, la base de vulnerabilidades de Go, RustSec, PyPA y los rastreadores de seguridad de las principales distribuciones. Nosotros añadimos el cálculo de la puntuación base CVSS y el resumen por paquete.

Preguntas frecuentes

P: ¿De dónde salen los datos de vulnerabilidades?

R: De OSV.dev, la base de datos abierta de vulnerabilidades de Google. Unifica en un solo esquema la GitHub Advisory Database, la base de vulnerabilidades de Go, RustSec, PyPA y los rastreadores de seguridad de las distribuciones, y la publica bajo CC-BY-4.0. Los avisos suelen estar disponibles pocas horas después de su publicación.

P: ¿Cómo se calcula la puntuación CVSS?

R: Los avisos de OSV incluyen la cadena del vector CVSS, pero no el número. Calculamos la puntuación base CVSS v3.1 a partir de ese vector con la fórmula oficial, de modo que obtienes un valor sobre el que fijar umbrales directamente. Si un aviso no tiene vector v3 (solo v4, o un aviso de ecosistema que no lo incluye), cvss_score es null y severity recurre a la calificación del propio publicador.

P: ¿Puedo escanear un lockfile completo?

R: Sí: analízalo por tu lado y envía hasta 50 paquetes por llamada. Cada llamada cuesta 5 créditos con independencia de cuántos paquetes lleve, así que un lote de 50 sale a 0,1 créditos por paquete. Para manifiestos mayores, divídelos en lotes de 50.

P: ¿Admite rangos de versiones?

R: No. Envía la versión exacta instalada, tal como aparece en tu lockfile (4.17.15, no ^4.17.0). OSV compara los rangos con una versión concreta para decidir si está afectada, así que un rango como entrada no tiene una única respuesta.

P: ¿Qué pasa si falla la consulta de un paquete?

R: El escaneo se devuelve igualmente. Ese paquete lleva un campo error y queda excluido de los recuentos del resumen, mientras que el resto se informa con normalidad. La respuesta también incluye packages_failed para que sepas que el resumen está incompleto.