Metadata-Version: 2.4
Name: parse-nvd
Version: 0.3.0
Summary: CLI tool to match COTS inventories against NVD CVE feeds.
Author: Phil
License: Apache-2.0
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: jsonschema>=4.23
Requires-Dist: rich>=13.6
Requires-Dist: semver>=3.0.4

<!-- SPDX-FileCopyrightText: 2026 Phil -->
<!-- SPDX-License-Identifier: Apache-2.0 -->

# parse-nvd

parse-nvd est un outil en ligne de commande qui rapproche un inventaire de COTS (Commercial Off-The-Shelf) avec les vulnérabilités CVE publiées dans les exports JSON du NVD.

## Pourquoi cet outil

Dans un contexte d'analyse de risque, il est fréquent de disposer:

- d'un inventaire produit/version (COTS),
- de flux NVD volumineux,
- de critères de criticité CVSS.

L'outil automatise ce rapprochement pour produire un rapport exploitable rapidement:

- filtrage des CVE par score, vecteur et impacts CVSS,
- filtrage optionnel sur la présence d'exploit,
- sortie JSON pour traitement machine,
- sortie Markdown/PDF pour diffusion humaine.

## Fonctionnement général

1. Validation des fichiers NVD avec le schéma officiel local.
2. Extraction des métriques CVSS pertinentes.
3. Matching COTS/CPE et comparaison de versions.
4. Application des filtres demandés.
5. Génération de rapports JSON et optionnellement Markdown.

## Installation

```bash
pip install -e .
```

## Utilisation depuis les sources (sans installation)

Depuis la racine du projet, vous pouvez lancer le CLI directement avec le code source:

```bash
PYTHONPATH=src python -m parse_nvd \
  --nvd-db nvdcve-2.0-recent.json \
  --cots-list essai-cots.json \
  --output rapport.json
```

Cela permet d'utiliser l'outil sans `pip install`, pratique pour un test rapide ou en environnement CI.

## Arguments CLI

- --nvd-db FILE [FILE ...]
  Un ou plusieurs fichiers JSON NVD.
- --cots-list FILE
  Fichier JSON listant les COTS (name/version).
- --cvss-min FLOAT
  Score CVSS minimal.
- --cvss-av VALUE
  Vecteur d'attaque minimal (NETWORK, ADJACENT, LOCAL, PHYSICAL).
- --cvss-impact-c VALUE
  Impact confidentialité minimal (NONE, LOW, HIGH).
- --cvss-impact-i VALUE
  Impact intégrité minimal (NONE, LOW, HIGH).
- --cvss-impact-d VALUE
  Impact disponibilité minimal (NONE, LOW, HIGH).
- --with-exploit
  Ne garde que les CVE présentant un indice d'exploit.
- --created-or-updated-after YYYY-MM-DD
  Ne garde que les CVE créées ou mises à jour après cette date.
- --linux-order-by-system
  Pour linux_kernel uniquement, regroupe les CVE par système Linux impacté dans le rapport Markdown.
- --output FILE
  Fichier de sortie JSON (défaut: parse-nvd-report.json).
- --md FILE
  Génère aussi un rapport Markdown.
- --html FILE
  Génère aussi un rapport XHTML autonome avec style CSS intégré, sans ressource externe.
- --verbose
  Affiche un résumé synthétique dans la console.

## Exemples d'utilisation

### JSON uniquement

```bash
parse-nvd \
  --nvd-db nvdcve-2.0-recent.json \
  --cots-list essai-cots.json \
  --output rapport.json
```

### Avec filtres CVSS et exploit

```bash
parse-nvd \
  --nvd-db nvdcve-2.0-recent.json \
  --cots-list essai-cots.json \
  --created-or-updated-after 2026-01-01 \
  --linux-order-by-system \
  --html rapport.xhtml \
  --cvss-min 7.0 \
  --cvss-av NETWORK \
  --cvss-impact-c LOW \
  --cvss-impact-i LOW \
  --cvss-impact-d LOW \
  --with-exploit \
  --verbose \
  --md rapport.md \
  --output rapport.json
```

## Structure du rapport JSON

Le rapport généré contient:

- un bloc summary avec les filtres appliqués et les compteurs globaux,
- un bloc cots contenant, pour chaque entrée COTS, la liste des CVE associées,
- pour chaque CVE: le bloc cve, la métrique cvss normalisée, les critères CPE matchés, et l'indicateur exploit_available.

## Rapport Markdown et PDF

### Générer le Markdown depuis le CLI

```bash
parse-nvd \
  --nvd-db nvdcve-2.0-recent.json \
  --cots-list essai-cots.json \
  --md report.md \
  --output report.json
```

### Générer le XHTML autonome depuis le CLI

```bash
parse-nvd \
  --nvd-db nvdcve-2.0-recent.json \
  --cots-list essai-cots.json \
  --html report.xhtml \
  --output report.json
```

Le rapport XHTML embarque son style CSS directement dans la page. Il ne dépend d'aucun accès réseau ni d'aucune ressource externe.

### Générer le PDF depuis le Markdown

```bash
pandoc report.md -o report.html
python -m weasyprint --stylesheet docs/report-a4.css report.html report.pdf
```

Le style docs/report-a4.css est prévu pour une lecture correcte à l'impression A4.

## Documentation développeur

Le projet peut générer un mini site de documentation dans docs/site:

- docs/site/index.html pour l'accueil,
- docs/site/cli-arguments.html pour les arguments CLI et leur signification,
- pages HTML des modules Python.

## Développement

```bash
tox
tox -e pydoc
tox -e report-pdf
pytest -q
python -m build
```
