Skip to content

excanear/CVEs-Engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔥 CVE Intelligence Engine

Motor local de inteligência de vulnerabilidades com 347.000+ CVEs, API REST, busca full-text e interface desktop dark theme.

.NET SQLite WPF Python NVD

CVE Intelligence Engine Screenshot


Visão Geral

O CVE Intelligence Engine é uma ferramenta local de alta performance para pesquisa e análise de vulnerabilidades (CVEs). Importa a base completa da National Vulnerability Database (NVD) do NIST para um banco SQLite local com índice FTS5, expõe os dados via API REST e oferece uma interface WPF com tema escuro para consulta, filtragem e tradução automática das descrições para português.

Destaques

  • 347.000+ CVEs importados e indexados localmente
  • Busca full-text com ranking BM25 via SQLite FTS5
  • Sem dependência de internet após o import inicial
  • API REST documentada com Swagger
  • Interface WPF dark theme com painel de detalhes completo
  • Tradução automática de descrições para português (PT-BR)
  • Self-contained — publica como .exe único sem precisar do .NET instalado

Arquitetura

CVEIntelligenceEngine.sln
│
├── src/
│   ├── CVE.Domain          # Entidades, enums e interfaces do domínio
│   ├── CVE.Application     # CQRS — Queries, Commands, Handlers, DTOs (MediatR 12)
│   ├── CVE.Infrastructure  # EF Core 8 + SQLite, FTS5, NVD API Client
│   ├── CVE.API             # ASP.NET Core 8 REST API (localhost:5000)
│   ├── CVE.Ingestion       # Worker Service — sincronização incremental com NVD
│   └── CVE.Desktop         # Interface WPF dark theme (CommunityToolkit.Mvvm)
│
├── scripts/
│   ├── nvd_fast_import.py  # Import completo/incremental via NVD API v2
│   ├── start-api.ps1       # Inicia apenas a API
│   ├── start-ingestion.ps1 # Inicia apenas o Worker
│   └── start-all.ps1       # Inicia tudo junto
│
└── data/
    └── cve.db              # Banco SQLite (gerado localmente, não incluso no repo)

Stack Tecnológica

Camada Tecnologia
API Backend ASP.NET Core 8, MediatR 12, Serilog
Banco de Dados SQLite 3 + EF Core 8 + FTS5
Desktop WPF .NET 8, CommunityToolkit.Mvvm 8.4
Import Python 3.10+, aiohttp, NVD API v2
Tradução MyMemory API (gratuita, sem chave)

Pré-requisitos

Requisito Versão Uso
.NET 8 SDK 8.0+ Compilar e rodar a API e o Desktop
Python 3.10+ Script de import dos CVEs
NVD API Key Opcional — aumenta o rate limit de 5 para 50 req/30s

Início Rápido

1. Clonar o repositório

git clone https://github.com/seu-usuario/CVEsEngine.git
cd "CVEsEngine"

2. Instalar dependências Python

pip install aiohttp aiosqlite

3. Importar os CVEs (necessário apenas uma vez)

# Com chave NVD (recomendado — ~10 minutos)
$env:NVD_API_KEY = "SUA_CHAVE_AQUI"
python scripts\nvd_fast_import.py --db data\cve.db --api-key $env:NVD_API_KEY

# Sem chave (rate limit reduzido — pode levar horas)
python scripts\nvd_fast_import.py --db data\cve.db

Obter chave NVD gratuita: acesse nvd.nist.gov/developers/request-an-api-key e cadastre seu e-mail. A chave chega em minutos.

4. Iniciar a API

$env:CVE_DB_PATH    = "$PWD\data\cve.db"
$env:ASPNETCORE_URLS = "http://localhost:5000"
dotnet run --project src\CVE.API --no-launch-profile

5. Iniciar a interface desktop

# Em outro terminal
$env:CVE_API_URL = "http://localhost:5000/"
dotnet run --project src\CVE.Desktop

Executável (.exe) — Modo de Distribuição

Para rodar sem o SDK .NET instalado, publique os executáveis self-contained:

# Interface Desktop
dotnet publish src\CVE.Desktop -c Release -r win-x64 --self-contained true `
    -p:PublishSingleFile=true -o publish\Desktop

# API Backend
dotnet publish src\CVE.API -c Release -r win-x64 --self-contained true `
    -p:PublishSingleFile=true -o publish\API

Os arquivos ficam em publish\. Dê 2x clique em publish\Iniciar.bat para subir tudo automaticamente.

Requisito de distribuição: copie também a pasta data\ (contém o banco cve.db) junto com publish\.


API REST

Base URL: http://localhost:5000
Documentação interativa: http://localhost:5000/swagger

Endpoints

Método Rota Descrição
GET /api/cve/{id} Detalhes completos de um CVE pelo ID
GET /api/search?q={termo}&page={n}&size={n} Busca full-text em ID, descrição e produtos
GET /api/severity/{level}?page={n}&size={n} CVEs filtrados por severidade
GET /api/product/{name}?page={n}&size={n} CVEs que afetam determinado produto
GET /swagger Swagger UI

Severidades válidas: Critical · High · Medium · Low

Exemplos

# Busca full-text
Invoke-RestMethod "http://localhost:5000/api/search?q=apache&size=5"

# CVE específico
Invoke-RestMethod "http://localhost:5000/api/cve/CVE-2021-44228"

# Todos os críticos (página 2)
Invoke-RestMethod "http://localhost:5000/api/severity/Critical?page=2&size=20"

# Por produto
Invoke-RestMethod "http://localhost:5000/api/product/nginx?size=10"

Resposta de Busca (exemplo)

{
  "items": [
    {
      "id": "CVE-2021-44228",
      "description": "Apache Log4j2 JNDI features...",
      "cvssScore": 10.0,
      "severity": "Critical",
      "publishedDate": "2021-12-10"
    }
  ],
  "totalCount": 3118,
  "page": 1,
  "pageSize": 20,
  "totalPages": 156
}

Interface Desktop

A interface WPF dark theme oferece:

Funcionalidade Detalhe
Busca full-text Resultados rankeados por BM25, paginados
Filtro por severidade Critical / High / Medium / Low / All
Painel de detalhes Score CVSS, vetor de ataque, CPEs, CWEs, referências
Tradução PT-BR Botão "🌐 Traduzir para Português" — via MyMemory API
Tabela CPE Vendor, produto e versão afetados — dark theme completo
Load More Carregamento incremental de resultados

Variáveis de Ambiente

Variável Padrão Descrição
NVD_API_KEY Chave NVD (rate limit: 5 → 50 req/30s)
CVE_DB_PATH cve.db (cwd) Caminho absoluto para o banco SQLite
ASPNETCORE_URLS http://localhost:5000 URL de escuta da API
CVE_API_URL http://localhost:5000/ URL base usada pelo Desktop

Banco de Dados

O banco SQLite é criado automaticamente na primeira execução da API. Estrutura principal:

-- CVEs principais
CREATE TABLE cves (
    id TEXT PRIMARY KEY,
    description TEXT,
    cvss_score REAL,
    severity TEXT,
    vector TEXT,
    cvss_version TEXT,
    published_date TEXT,
    last_modified TEXT,
    exploit_score REAL,
    has_public_exploit INTEGER
);

-- Índice Full-Text Search (FTS5) — busca em cve_id, description e product
CREATE VIRTUAL TABLE cves_fts USING fts5(cve_id, description, product);

-- Triggers de sincronização automática FTS5 ↔ cves
CREATE TRIGGER cves_fts_insert AFTER INSERT ON cves ...
CREATE TRIGGER cves_fts_update AFTER UPDATE ON cves ...
CREATE TRIGGER cves_fts_delete AFTER DELETE ON cves ...

O arquivo data/cve.db não é incluído no repositório (.gitignore). Execute o script de import para gerá-lo.


Segurança

  • Nenhuma credencial hardcoded — todas as chaves são passadas via variável de ambiente
  • API local only — por padrão escuta apenas localhost, sem exposição à rede
  • Dados somente leitura — a API não expõe endpoints de escrita
  • Parâmetros sanitizados — queries FTS5 com escape de caracteres especiais
  • OWASP Top 10 — sem SQL injection (uso de parâmetros), sem dados sensíveis em logs

Atualização dos CVEs

Para sincronizar com novos CVEs publicados pela NVD:

# Reexecutar o import (detecta automaticamente novos/modificados)
python scripts\nvd_fast_import.py --db data\cve.db --api-key $env:NVD_API_KEY

O script é idempotente — não duplica registros, apenas insere/atualiza o que mudou.


Licença

Este projeto usa dados públicos da National Vulnerability Database (NVD) do NIST.
Distribuído sob a licença MIT. Veja LICENSE para detalhes.


Feito com 🔥 para quem leva segurança a sério.

Pré-requisitos


Início Rápido

1. Clonar e compilar

cd "CVEs Engine"
dotnet build CVEIntelligenceEngine.sln

2. Configurar variáveis de ambiente

$env:NVD_API_KEY = "SUA_CHAVE_AQUI"   # opcional, mas recomendado
$env:CVE_DB_PATH = "C:\dados\cve.db"  # opcional, padrão: pasta do executável

3. Iniciar tudo de uma vez

.\scripts\start-all.ps1

Ou individualmente:

# Terminal 1 — API REST
.\scripts\start-api.ps1

# Terminal 2 — Worker de sincronização NVD
.\scripts\start-ingestion.ps1

# Terminal 3 — Interface Desktop WPF
$env:CVE_API_URL = "http://localhost:5000/"
dotnet run --project src\CVE.Desktop

Arquitetura

CVEIntelligenceEngine.sln
├── src/
│   ├── CVE.Domain          # Entidades, enums, interfaces
│   ├── CVE.Application     # CQRS — Queries, Handlers, DTOs (MediatR)
│   ├── CVE.Infrastructure  # EF Core + SQLite, NVD API Client, FTS5
│   ├── CVE.API             # ASP.NET Core REST API (localhost:5000)
│   ├── CVE.Ingestion       # Worker Service — sync automático com NVD
│   └── CVE.Desktop         # WPF dark theme (CommunityToolkit.Mvvm)
└── scripts/
    ├── start-api.ps1
    ├── start-ingestion.ps1
    └── start-all.ps1

API Endpoints

Método Rota Descrição
GET /api/cve/{id} Detalhes completos de um CVE
GET /api/search?q=&page=&size= Busca full-text (FTS5)
GET /api/severity/{level}?page=&size= CVEs por severidade
GET /api/product/{name}?page=&size= CVEs por produto/vendor
GET /api/stats Totais e última sincronização
GET /health Health check
GET /swagger Swagger UI

Níveis de severidade válidos: Critical, High, Medium, Low


Variáveis de Ambiente

Variável Padrão Descrição
NVD_API_KEY Chave da NVD API (aumenta rate limit)
CVE_DB_PATH cve_intelligence.db Caminho do banco SQLite
ASPNETCORE_URLS http://localhost:5000 URL da API
SYNC_INTERVAL_HOURS 6 Intervalo de sincronização incremental
CVE_API_URL http://localhost:5000/ URL base usada pelo Desktop

Primeira Sincronização

Na primeira execução, o Worker Service faz uma sincronização completa da NVD (≈260k CVEs). Isso pode levar 2–4 horas dependendo da conexão e do rate limit.

Execuções subsequentes fazem sincronização incremental (apenas CVEs modificados nas últimas N horas).


Banco de Dados

O SQLite é criado automaticamente na primeira execução. Inclui:

  • Tabela cves com todos os campos CVSS
  • Tabela virtual FTS5 (cves_fts) para busca full-text
  • Triggers automáticos de sincronização FTS5 ↔ cves

Stack Tecnológica

Componente Tecnologia
ORM Entity Framework Core 8 + SQLite
CQRS MediatR 12
HTTP Resilience Polly 8
Logging Serilog (Console + File rolling)
MVVM CommunityToolkit.Mvvm 8
API Docs Swashbuckle (Swagger)
UI WPF .NET 8 — Dark Theme

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors