Self-hosted CVE tracker — syncs NVD, scans assets via OpenVAS/OVAL/Insights, raises GitHub Issues on matches, ships a live status page.
Project description
ign8cve-tracker
Self-hosted CVE tracker. Syncs the full NVD feed, discovers vulnerable software across your fleet via OpenVAS, OVAL scanning, and Red Hat Insights, raises a GitHub Issue for every new match, and ships a live status page.
pipx install "ign8cve-tracker[infra]"
ign8cve deploy # provision Hetzner + deploy full stack
What it does
| Component | What it does |
|---|---|
nvd-sync |
Full NVD sync on first run, incremental (lastModified) hourly after |
inventory-sync |
Pulls host + software records from OpenVAS via python-gvm, upserts assets |
oscap-sync |
Runs oscap oval eval on remote hosts over SSH, imports results |
insights-sync |
Fetches CVE exposure lists from Red Hat Insights for enrolled RHEL systems |
matcher |
Cross-joins assets × CVEs on CPE vendor+product, opens GitHub Issues for new matches |
status-page |
aiohttp dashboard: CVE counts by severity, match list, 30-day sparklines |
ign8cve |
CLI to provision/destroy the whole stack on Hetzner Cloud |
Install
# just the daemons + status page
pip install ign8cve-tracker
# + deploy CLI (hcloud, paramiko, typer)
pip install "ign8cve-tracker[infra]"
Deploy
Requires Hetzner Cloud and (optionally) Cloudflare credentials as environment variables:
export HETZNER_TOKEN=...
export IGN8_CLOUDFLARE_TOKEN=... # optional — for DNS
export IGN8_CLOUDFLARE_ZONE_ID=... # optional
export IGN8_DOMAIN=example.com # optional
ign8cve deploy
Provisions a Hetzner cx23, installs Docker, uploads the stack, obtains a Let's Encrypt cert, and runs all services. DNS is configured in Cloudflare before TLS so certbot can complete the HTTP-01 challenge.
State is written to .ign8cve/state.json. SSH key at .ign8cve/keys/ign8cve.
ign8cve destroy # tear down server + DNS
Run locally
cp .env.example .env # fill in credentials
# individual daemons
nvd-sync
inventory-sync
matcher
# or all via Docker Compose
docker compose up
Database migrations:
alembic upgrade head
Configuration
All settings via environment variables (or .env). Key variables:
| Variable | Default | Description |
|---|---|---|
DATABASE_URL |
postgresql+asyncpg://ign8cve:ign8cve@localhost:5432/ign8cve |
PostgreSQL connection string |
NVD_API_KEY |
— | Raises NVD rate limit from 5 to 50 req/30 s |
NVD_SYNC_INTERVAL |
3600 |
Seconds between NVD syncs |
OPENVAS_HOST |
localhost |
OpenVAS/GVM host |
OPENVAS_PORT |
9390 |
OpenVAS/GVM port |
OPENVAS_USERNAME |
admin |
|
OPENVAS_PASSWORD |
— | |
GITHUB_TOKEN |
— | For opening Issues on new CVE matches |
GITHUB_REPO |
— | org/repo — e.g. acme/vulnerabilities |
INSIGHTS_OFFLINE_TOKEN |
— | Red Hat Insights offline token |
INSIGHTS_SYSTEMS |
— | JSON array: [{"id": "<uuid>", "display_name": "<host>"}] |
Architecture
Three independent async daemons share a PostgreSQL database:
NVD API ──► nvd-sync ──► cves table
┐
OpenVAS/OVAL/Insights ──► inventory-sync / oscap-sync / insights-sync
──► assets table ──► matcher ──► matches table ──► GitHub Issues
CPE matching is intentionally loose: vendor + product must match, version is ignored. This catches CVEs whose CPE wildcards the version. Precise version-range matching (versionStartIncluding / versionEndExcluding) is the main area for future improvement.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ign8cve_tracker-0.1.0.tar.gz.
File metadata
- Download URL: ign8cve_tracker-0.1.0.tar.gz
- Upload date:
- Size: 34.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.4 CPython/3.14.4 Darwin/25.4.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06cb26c3fc4302975dffe0d758b4fa6b206a56812e0ee0e00f697a90881e8435
|
|
| MD5 |
32fd2e31e9c088a547bc2e688ded2aeb
|
|
| BLAKE2b-256 |
3e24a9871acb829ffc65ca05638e2a423fd4bb60bab55eb0681b02743c302003
|
File details
Details for the file ign8cve_tracker-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ign8cve_tracker-0.1.0-py3-none-any.whl
- Upload date:
- Size: 41.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.4 CPython/3.14.4 Darwin/25.4.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a411ee07fa5ff7c3d16268f97862748f899ac3f4f62483655490036bf7758936
|
|
| MD5 |
22cd24b7a433bac268426a95a2638252
|
|
| BLAKE2b-256 |
9f36bfe3488566e770ea9b59a23854c86dfdfe59c6c7c978506d51b65e672994
|