Logo Arboris
Auth & SécuritéSûr100100/100

Cve Scan

Scans project dependencies against CVE databases (OSV.dev, NVD) from package.json and other lockfiles. Use when the user asks for CVE, vulnerabilities, security advisories, OSV, NVD, npm audit, or /cve.

ou envoie-le directement à ton agent.

Installer dans ton projet

$ curl -fsSL https://arboristhree.xyz/cli/install-skill.mjs -o /tmp/arboris-install-skill.mjs && node /tmp/arboris-install-skill.mjs cve-scan
Logo Arboris
Arboris
affaan-m/ECC
Contenu à copier
---
name: cve-scan
description: >-
  Scans project dependencies against CVE databases (OSV.dev, NVD) from
  package.json and other lockfiles. Use when the user asks for CVE, vulnerabilities,
  security advisories, OSV, NVD, npm audit, or /cve.
metadata:
  origin: Arboris
---

# CVE scan — dépendances

Interroge les **API CVE** (source de vérité : [OSV.dev](https://osv.dev)) à partir des manifests du repo. Ne pas se limiter à `npm audit`.

## When to Activate

- Scan CVE / vulnérabilités de dépendances (`/cve`, « y a-t-il une faille ? »)
- Revue d’un `package.json`, lockfile, SBOM ou bump de deps
- Avant merge / release, ou après une alerte (GHSA, CVE-…)
- Projet polyglot (npm, PyPI, Maven, Go, Cargo, Ruby, PHP, NuGet, …)

## 1. Inventaire des manifests

Cherche à la racine **et** dans les workspaces (ignore `node_modules`, `vendor`, `dist`, `.git`) :

| Écosystème OSV | Manifests / lockfiles |
|---|---|
| `npm` | `package.json`, `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `bun.lock` |
| `PyPI` | `requirements.txt`, `poetry.lock`, `Pipfile.lock`, `pyproject.toml` |
| `Maven` | `pom.xml`, `gradle.lockfile` |
| `Go` | `go.mod`, `go.sum` |
| `crates.io` | `Cargo.lock` |
| `RubyGems` | `Gemfile.lock` |
| `Packagist` | `composer.lock` |
| `NuGet` | `packages.lock.json`, `*.csproj` |
| `Hex` | `mix.lock` |
| `Pub` | `pubspec.lock` |

**Versions résolues** : lockfile > manifest. Sans lockfile, scanner au moins les deps **directes** et le signaler (faux négatifs transitifs).

Prod + dev par défaut (supply chain). Prod-only seulement si l’utilisateur le demande.

## 2. Extraire `(ecosystem, name, version)`

Pour npm, extraire depuis le lockfile (pas à la main sur un gros `package-lock.json`) :

```bash
node --input-type=module -e '
import { readFileSync } from "node:fs"
const lock = JSON.parse(readFileSync("package-lock.json","utf8"))
const pkgs = lock.packages ?? {}
const out = []
for (const [path, meta] of Object.entries(pkgs)) {
  if (!path || path === "") continue
  const name = path.replace(/^node_modules\//, "").replace(/\/node_modules\//g, "/")
  if (meta.version) out.push({ name, version: meta.version, ecosystem: "npm" })
}
console.log(JSON.stringify(out))
'
```

Déduplique `(ecosystem, name, version)`. Cap : lots de **1000** max pour `querybatch`.

## 3. Interroger OSV (obligatoire)

Base : `https://api.osv.dev` — pas de clé. Ne pas inventer de CVE.

**Un package** (détail complet) :

```bash
curl -sS https://api.osv.dev/v1/query \
  -H 'Content-Type: application/json' \
  -d '{"version":"4.17.20","package":{"name":"lodash","ecosystem":"npm"}}'
```

**Lot** (IDs seulement, même ordre que `queries`) :

```bash
curl -sS https://api.osv.dev/v1/querybatch \
  -H 'Content-Type: application/json' \
  -d '{"queries":[{"package":{"name":"lodash","ecosystem":"npm"},"version":"4.17.20"}]}'
```

Règles OSV :

- `name` + `ecosystem` **ou** `purl`, pas les deux
- `version` **ou** purl versionné, pas les deux
- écosystème et nom **case-sensitive** (`npm`, `PyPI`, `Maven`, `Go`, `crates.io`, `RubyGems`, `Packagist`, `NuGet`, `Hex`, `Pub`)

**Détail** pour chaque ID touché (critique/haut en priorité) :

```bash
curl -sS "https://api.osv.dev/v1/vulns/GHSA-xxxx-xxxx-xxxx"
```

Champs utiles : `id`, `aliases` (CVE-…), `summary`, `severity`, `affected[].ranges`, `references`.

Pagination `querybatch` : si `next_page_token` sur un item, relancer **cet** item avec `page_token`.

## 4. Enrichir (optionnel)

- **NVD** (score CVSS d’un CVE connu) :
  `curl -sS "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2024-XXXXX"`
  Rate-limit sans clé : rester sobre (seulement les HIGH/CRITICAL).
- **Audit natif** en complément, pas en remplacement :
  - npm / pnpm / yarn / bun → `npm audit --json` (ou équivalent)
  - Python → `pip-audit` si dispo
  - Go → `govulncheck` si dispo
  - Rust → `cargo audit` si dispo

Ne pas installer d’outil lourd (`osv-scanner` Go, Docker) si l’API suffit.

## 5. Compte-rendu

Trier **CRITICAL → HIGH → MODERATE → LOW**. Ignorer le bruit LOW hors runtime sauf demande.

Tableau :

| Package | Version | Éco | ID (CVE / GHSA) | Sévérité | Fix | Action |
|---|---|---|---|---|---|---|

Pour chaque finding actionnable :

1. version corrigée (`affected` / `database_specific` / advisory)
2. directe vs transitive
3. action : bump ciblé, `overrides`/`resolutions`, ou *risk accepted* (justifié)

**Ne pas** modifier `package.json` / lockfiles sauf si l’utilisateur demande le fix. Proposer `/audit-deps` (fix npm) et `/ncu` (maj versions).

Si aucun manifest : expliquer et s’arrêter. Si l’API échoue : coller l’erreur, basculer sur l’audit natif, le dire.

## Compléments

- Revue code (auth, XSS, secrets) → skill `security-review`, commande `/security-diff`
- Config agent (`.claude/`) → skill `security-scan` — **pas** un scan de deps
Colle ce Markdown dans ton agent ou utilise les boutons ci-dessus pour l’écrire dans ton projet.

Ce que fait Cve Scan

Scan CVE / vulnérabilités de dépendances (`/cve`, « y a-t-il une faille ? »)
Revue d’un `package.json`, lockfile, SBOM ou bump de deps
Avant merge / release, ou après une alerte (GHSA, CVE-…)
Projet polyglot (npm, PyPI, Maven, Go, Cargo, Ruby, PHP, NuGet, …)

Comment utiliser Cve Scan

1
Copie le prompt
Un clic copie le prompt packagé (ou l'envoie à ton agent).
2
L'agent installe le skill
Il ajoute le SKILL.md et ses ressources à ton projet.
3
Activation automatique
Le skill s'active dès que le contexte correspond.

Déclencheurs pour Cve Scan

Dis simplement à ton agent quelque chose comme :

Applique le skill cve-scan à cette tâche
Utilise cve-scan pour améliorer cette implémentation
Passe en revue ce sujet avec cve-scan

Skills liés à Cve Scan