Analyse de vulnérabilités des dépendances
Vérifiez jusqu'à 50 dépendances open source auprès d'OSV.dev en un seul appel. Renvoie les alias CVE, un score de base CVSS calculé, les identifiants CWE et les versions exactes qui corrigent chaque avis.
Pas encore de clé API ?
Connectez-vous à votre compte pour créer et gérer vos clés API.
Guide d'intégration
Copiez un extrait, remplacez votre clé API, exécutez. Fonctionne avec n'importe quel client HTTP — exemples ci-dessous en cURL, JavaScript et Python.
/api/scan-dependencieshttps://www.apipick.comCheck open-source packages against the OSV.dev vulnerability database
packagesarrayrequisUp 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
}Conçu pour des cas d'usage réels
Contrôle des mises en production
Faites échouer un build dès qu'une dépendance dépasse un seuil CVSS. Avec un score numérique, la règle tient en une comparaison, au lieu d'un test sur une chaîne de caractères.
Agents de développement
Laissez un agent vérifier une version avant de l'écrire dans un manifeste, et proposer la version corrigée dans le même échange.
Audit de lockfiles
Envoyez un manifeste entier par lots de 50 et obtenez une synthèse par gravité pour chaque service, sans faire tourner un scanner dans la CI.
Due diligence fournisseurs
Notez le jeu de dépendances déclaré par un tiers au regard des avis publics avant de signer, avec des données que vous pouvez citer.
Champs de la réponse
| Champ | Type | Description |
|---|---|---|
| summary.vulnerable_packages | integer | Nombre de paquets soumis présentant au moins un avis |
| summary.by_severity | object | Nombre d'avis par critical / high / medium / low / none / unknown |
| summary.highest_cvss_score | number | null | Score de base CVSS le plus élevé de toute l'analyse |
| results[].vulnerable | boolean | Indique si cette version du paquet fait l'objet d'un avis non retiré |
| results[].vulnerabilities[].id | string | Identifiant de l'avis OSV, par ex. GHSA-35jh-r3h4-6jhm |
| results[].vulnerabilities[].cve | string | null | Alias CVE lorsqu'il en existe un |
| results[].vulnerabilities[].severity | string | CRITICAL, HIGH, MEDIUM, LOW, NONE ou UNKNOWN |
| results[].vulnerabilities[].cvss_score | number | null | Score de base CVSS v3.1 calculé à partir du vecteur de l'avis |
| results[].vulnerabilities[].cwe_ids | string[] | Classifications de faiblesse CWE de l'avis |
| results[].vulnerabilities[].fixed_versions | string[] | Versions de ce paquet qui corrigent l'avis |
| results[].error | string | null | Renseigné lorsque ce paquet précis n'a pas pu être vérifié ; les autres sont bien renvoyés |
| credits_used | integer | Crédits déduits pour cette requête |
| remaining_credits | integer | Crédits restants sur votre compte |
Limites de débit
La limitation est par clé API, fenêtre glissante de 60 secondes. En cas de dépassement, vous recevez un 429 propre avec un en-tête Retry-After.
20req/min
Par clé API, par endpoint. Fenêtre glissante de 60 secondes.
3concurrent
Nombre maximal de requêtes simultanées en cours par clé API.
X-RateLimit-LimitNombre maximal de requêtes autorisées par minuteX-RateLimit-RemainingRequêtes restantes dans la fenêtre actuelleX-RateLimit-ResetSecondes avant la réinitialisation de la fenêtre actuelleRetry-AfterSecondes à attendre avant de réessayer (uniquement sur 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
}Source des données et licence
Les avis proviennent d'OSV.dev, la base de vulnérabilités ouverte de Google, publiée sous CC-BY-4.0. OSV réunit dans un schéma unique la GitHub Advisory Database, la base de vulnérabilités Go, RustSec, PyPA et les suivis de sécurité des principales distributions. Nous y ajoutons le calcul du score de base CVSS et la synthèse par paquet.
Questions fréquentes
Q : D'où viennent les données de vulnérabilités ?
R : D'OSV.dev, la base de vulnérabilités ouverte de Google. Elle réunit dans un schéma unique la GitHub Advisory Database, la base de vulnérabilités Go, RustSec, PyPA et les suivis de sécurité des distributions, et la publie sous CC-BY-4.0. Les avis sont généralement disponibles quelques heures après leur publication.
Q : Comment le score CVSS est-il calculé ?
R : Les avis OSV contiennent la chaîne du vecteur CVSS, mais pas le nombre. Nous calculons le score de base CVSS v3.1 à partir de ce vecteur selon la formule officielle : vous obtenez donc une valeur directement utilisable comme seuil. Lorsqu'un avis n'a pas de vecteur v3 (uniquement v4, ou avis d'écosystème sans vecteur), cvss_score vaut null et severity reprend la notation de l'éditeur de l'avis.
Q : Puis-je analyser un lockfile complet ?
R : Oui : analysez-le de votre côté et envoyez jusqu'à 50 paquets par appel. Un appel coûte 5 crédits quel que soit le nombre de paquets, donc un lot de 50 revient à 0,1 crédit par paquet. Pour des manifestes plus volumineux, découpez en lots de 50.
Q : Les plages de versions sont-elles prises en charge ?
R : Non. Envoyez la version exacte installée, telle qu'elle figure dans votre lockfile (4.17.15, pas ^4.17.0). OSV compare les plages à une version concrète pour déterminer si celle-ci est affectée : une plage en entrée n'a donc pas de réponse unique.
Q : Que se passe-t-il si la recherche d'un paquet échoue ?
R : L'analyse est tout de même renvoyée. Ce paquet porte un champ error et est exclu des totaux de la synthèse, tandis que tous les autres remontent normalement. La réponse contient aussi packages_failed pour vous signaler que la synthèse est incomplète.