Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

maxime67/ONE_sync

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CVE Importer

Un système d'importation automatisé pour synchroniser les données CVE (Common Vulnerabilities and Exposures) depuis le dépôt GitHub de MITRE vers une base de données MongoDB.

📋 Table des Matières

🔍 Aperçu

Ce projet automatise l'importation et la synchronisation des données de vulnérabilités CVE depuis le dépôt officiel CVEProject/cvelistV5 vers une base de données MongoDB structurée.

Le système propose deux modes de fonctionnement :

  • Synchronisation incrémentale : traite uniquement les fichiers modifiés
  • Synchronisation complète : traite tous les fichiers CVE disponibles

✨ Fonctionnalités

  • 🔄 Synchronisation automatique avec le dépôt GitHub officiel CVE
  • 📊 Traitement par lots configurable pour optimiser les performances
  • 🏢 Gestion des vendors et produits avec relations normalisées
  • 🔍 Support des formats CVE v4 et v5
  • Planification via cron jobs
  • 🛡️ Mécanisme de retry pour la gestion d'erreurs
  • 📈 Statistiques et compteurs automatiques
  • 🔧 Sparse checkout Git pour optimiser le clonage

🏗️ Architecture

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Git Service  │───▶│  File Service   │───▶│   DB Service    │
│                 │    │                 │    │                 │
│ - Clone/Pull    │    │ - JSON parsing  │    │ - CVE upsert    │
│ - Diff tracking │    │ - Batch process │    │ - Vendor/Product│
│ - Sparse checkout│   │ - Error retry   │    │ - Relationships │
└─────────────────┘    └─────────────────┘    └─────────────────┘
         │                       │                       │
         └───────────────────────┼───────────────────────┘
                                 ▼
                    ┌─────────────────────────┐
                    │      MongoDB            │
                    │                         │
                    │ Collections:            │
                    │ - cves                  │
                    │ - vendors               │
                    │ - products              │
                    └─────────────────────────┘

📦 Installation

Prérequis

  • Node.js
  • MongoDB
  • Git

Installation des dépendances

npm install

Dépendances principales

  • mongoose : ODM pour MongoDB
  • simple-git : Interface Git pour Node.js
  • fs-extra : Extensions du système de fichiers
  • node-cron : Planificateur de tâches
  • dotenv : Gestion des variables d'environnement

⚙️ Configuration

Variables d'environnement

Créez un fichier .env à la racine du projet :

# Base de données MongoDB
MONGODB_URI=mongodb://localhost:27017/ONE-DEV

# Configuration du cron job
CRON_SCHEDULE=0 2 * * *
LOG_LEVEL=info

Configuration avancée

Le fichier config/config.js permet de personnaliser :

module.exports = {
    mongodb: {
        uri: process.env.MONGODB_URI || 'mongodb://localhost:27017/ONE-DEV'
    },
    github: {
        repoUrl: 'https://github.com/CVEProject/cvelistV5.git',
        localPath: './tmp/cvelist',
        targetFolder: 'cves',
    },
    batch: {
        size: 200 // Taille des lots de traitement
    },
    cron: {
        schedule: process.env.CRON_SCHEDULE || '* * * * *'
    }
};

🚀 Utilisation

Synchronisation manuelle

# Synchronisation incrémentale (recommandée)
npm start

# Synchronisation complète (première fois ou reconstruction)
node server.js --full-sync

Mode développement

npm run dev

Planification automatique

# Démarrer le service cron
npm run cron

📁 Structure du Projet

cve-importer/
├── config/
│   └── config.js              # Configuration centralisée
├── models/
│   ├── cveModel.js            # Modèle CVE avec extraction de données
│   ├── vendorModel.js         # Modèle Vendor
│   └── productModel.js        # Modèle Product avec méthode findOrCreate
├── services/
│   ├── gitService.js          # Gestion Git et synchronisation
│   ├── fileService.js         # Traitement des fichiers JSON
│   ├── dbService.js           # Interface base de données
│   ├── productService.js      # Logique métier vendors/products
│   └── cron.js               # Planificateur de tâches
├── server.js                  # Point d'entrée principal
├── package.json
└── README.md

🔧 API et Services

GitService

  • cloneTargetFolder() : Clone uniquement le dossier cves/ avec sparse checkout
  • syncRepository() : Synchronise et retourne les fichiers modifiés
  • getChangedFilesBetweenCommits() : Détecte les changements entre commits

FileService

  • processBatch(files, processFunction) : Traitement par lots avec retry automatique
  • processFileWithRetry() : Mécanisme de retry pour fichiers individuels

DBService

  • upsertCVE(cveData, sourceFile) : Insert/Update intelligent des CVE
  • getCVEsByVendor(vendorName) : Requêtes par vendor
  • getCVEsByProduct(productName, vendorName) : Requêtes par produit

ProductService

  • processVendorProducts(cveData) : Traite les relations vendor/product
  • findOrCreateVendor(vendorName) : Gestion des vendors
  • getVendorStats() / getProductStats() : Statistiques agrégées

🗄️ Base de Données

Schéma CVE

{
  cveId: "CVE-2024-12345",
  description: "Vulnerability description",
  assigner: "vendor@example.com",
  state: "PUBLIC",
  publishedDate: Date,
  cvssScore: 8.5,
  severity: "HIGH",
  affectedProducts: [
    {
      product: ObjectId,
      vendor: ObjectId,
      productName: "Product Name",
      vendorName: "Vendor Name",
      versions: [...]
    }
  ],
  raw_data: { /* Données JSON originales */ }
}

Schéma Vendor

{
  name: "Vendor Name",
  productCount: 42,
  cveCount: 158,
  firstSeen: Date,
  lastSeen: Date
}

Schéma Product

{
  name: "Product Name",
  vendor: ObjectId,
  vendorName: "Vendor Name",
  versions: [
    { version: "1.0.0", affected: true }
  ],
  cveCount: 15
}

🛡️ Gestion des Erreurs

Mécanismes de Resilience

  • Retry automatique : 3 tentatives pour les erreurs récupérables
  • Gestion des collisions : Traitement des conflits de clés dupliquées
  • Validation des données : Vérification de la cohérence des CVE
  • Logging détaillé : Traçabilité complète des erreurs

Types d'erreurs gérées

  • Conflits de concurrence MongoDB
  • Erreurs de parsing JSON
  • Timeouts réseau Git
  • Contraintes d'unicité

📊 Monitoring

Métriques de Performance

# Exemple de sortie lors du traitement
Processing batch 1/50
Batch complete. Success: 195, Failed: 5
Overall progress: 200/10000 (2%)
Processing complete! Total: 10000, Success: 9850, Failed: 150

Logs Structurés

  • Progression par lots
  • Fichiers en échec avec raisons
  • Statistiques de performance
  • Détection des changements Git

📝 Scripts Disponibles

Script Description
npm start Synchronisation incrémentale
npm run dev Mode développement avec nodemon
npm run cron Démarrage du planificateur
node server.js --full-sync Synchronisation complète

🔍 Exemples d'Usage

Recherche de CVE par vendor

const dbService = require('./services/dbService');

// CVE affectant un vendor spécifique
const cves = await dbService.getCVEsByVendor('microsoft');

// CVE affectant un produit spécifique
const productCves = await dbService.getCVEsByProduct('windows', 'microsoft');

Statistiques

const productService = require('./services/productService');

const vendorStats = await productService.getVendorStats();
console.log(`Total vendors: ${vendorStats.totalVendors}`);
console.log('Top vendors:', vendorStats.topVendors);

🚨 Notes Importantes

  1. Première synchronisation : Utilisez --full-sync pour la configuration initiale
  2. Ressources : Le traitement complet peut prendre plusieurs heures selon la taille du dataset
  3. Performances : Ajustez batch.size selon les capacités de votre infrastructure

About

ONE_sync permit to synchronize CVE from mitre database to local mongoDB

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.