Skip to content

Report Configuration

Per-engagement configuration is managed through config files that are never committed to the repository. The repo ships only the templates/report_config.conf.example template with every value commented out. A populated config carries client metadata, license keys, and notification credentials, so it stays local.

The same config file drives the whole pipeline: report branding, portal upload, alerting, scheduling, the executive summary, and license-gated features. Pass it with -c on any scan or post-scan command.

Setup

bash
# 1. Create a per-engagement configs directory (first time only)
mkdir -p ~/netvuln-tool/configs

# 2. Copy the template for your engagement
cp templates/report_config.conf.example ~/netvuln-tool/configs/acme_corp.conf

# 3. Edit and fill in client details, license key, etc.
vim ~/netvuln-tool/configs/acme_corp.conf

# 4. Pass it when running a scan
./scripts/vulnscan_recon.sh -t 192.168.1.0/24 --full -R report.html \
    -c ~/netvuln-tool/configs/acme_corp.conf

File Placement

LocationPurpose
templates/report_config.conf.exampleTemplate (committed to repo, all values commented)
~/netvuln-tool/configs/<client>.confPer-engagement configs (local only, never committed)

WARNING

.gitignore excludes *.conf files to prevent accidental commits of populated configs containing client data or license keys. Never inline a live key in a tracked file. See Secrets Management.

Settings Reference

The tables below group every variable in the template. All are optional; unset values fall back to built-in defaults.

Client Information

VariableDescription
CLIENT_NAMEClient organization name
CLIENT_CONTACTPrimary contact name
CLIENT_EMAILContact email
CLIENT_IDUnique client identifier for portal multi-tenancy scoping (v2.14+); sessions are scoped to this client in the portal when set

Assessment Details

VariableDescription
ASSESSMENT_STARTEngagement start date (e.g. 2026-02-24)
ASSESSMENT_ENDEngagement end date
ASSESSMENT_SCOPENetworks and hosts in scope
ASSESSMENT_TYPEEngagement type label (e.g. Internal Network Penetration Test)

Targets

VariableDescription
TARGETSComma-separated targets defined in config instead of, or in addition to, CLI -t/-T. CLI options override this value

Assessor Information

VariableDescription
ASSESSOR_NAMEAssessor name
ASSESSOR_COMPANYAssessor company
ASSESSOR_EMAILAssessor email

Report Settings

VariableDefaultDescription
REPORT_CLASSIFICATIONCONFIDENTIALClassification banner
REPORT_TITLENetwork Vulnerability Assessment ReportReport title
REPORT_VERSION1.0Report version label

Branding and White-Label

Override the default Bullium Consulting theme with custom brand colors and text. These values are injected as CSS custom properties directly in the HTML report, so they persist through portal upload, download, and sharing. See White-Labeling for the full mechanism.

VariableDescriptionExample
COMPANY_NAMEBranding company nameBullium Consulting LLC
COMPANY_LOGOPath to a logo file (base64-embedded in the report)/path/to/logo.png
COMPANY_URLCompany website URLhttps://www.bullium.com
REPORT_PRIMARY_COLORAccent color for banners, borders, and highlights#ea1347
REPORT_HEADER_BGHeader background color#ffffff
REPORT_HEADER_TEXTHeader text color#1a1a1a
REPORT_SUBTITLESubtitle under the report titlePrepared for Acme Corp
REPORT_FOOTER_TEXTCustom footer textAcme Corp Security Assessment
REPORT_FOOTER_URLCustom footer link URLhttps://acme-corp.example.com
REPORT_FOOTER_EMAILCustom footer emailsecurity@acme.example.com

Report Expiration and Scheduling

VariableDefaultDescription
REPORT_VALIDITY_DAYS30Days before a report is considered expired
SCAN_SCHEDULE0 2 * * 0Cron expression for scheduled scans (default: Sunday 2am)
SCAN_PROFILEfull_reconScan profile for scheduled scans
REMINDER_DAYS_BEFORE7Days before expiry to send a reminder
REMINDER_EMAILEmail for expiration reminders

Daemon Mode (v3.0.0)

Replace cron-based scheduling with a persistent daemon process. Enable per-config and manage with netvuln_daemon_ctl.sh. See Daemon Mode and Scheduling.

VariableDefaultDescription
DAEMON_ENABLEDfalseEnable daemon mode for this config
DAEMON_POLL_INTERVAL60Seconds between schedule checks
DAEMON_HEARTBEAT_INTERVAL300Seconds between portal heartbeats
DAEMON_SCAN_RETRY_MAX3Max retry attempts on scan failure
DAEMON_SCAN_RETRY_BACKOFF60Initial backoff seconds, doubles each retry
DAEMON_LOG_LEVELinfoVerbosity: debug, info, warning, error

Executive Summary and Email

Generate a one-page executive summary alongside the full report and optionally email it. See Executive Summary.

VariableDefaultDescription
EXEC_SUMMARY_ENABLEDfalseGenerate an executive summary during the pipeline
EXEC_SUMMARY_RECIPIENTSComma-separated email recipients
EMAIL_FROMnetvuln@bullium.comSender address
EMAIL_SUBJECTauto-generatedCustom email subject
EXEC_SUMMARY_TEMPLATEbuilt-inPath to a custom HTML template
EXEC_SUMMARY_PDFfalseGenerate a PDF alongside the HTML (requires wkhtmltopdf)

Consultation Upload

When configured, sessions are submitted automatically after pipeline completion, and a shareable report link is returned. These same credentials power the Submit Collection button in the HTML report, push_session.sh, and upload_session.sh. See Session Management.

VariableDescription
CONSULTATION_API_URLPortal upload endpoint (e.g. https://your-site.netlify.app/api/upload or https://bullium.com/api/upload)
NV_API_KEYCanonical license key. Authenticates portal uploads and unlocks tier-gated features locally. Format nvt_{tier}_{hex} (e.g. nvt_pro_<hex>)
CONSULTATION_API_KEYLegacy alias for NV_API_KEY, still supported. Non-nvt keys run as the legacy tier with all features and a deprecation warning
NV_LICENSE_KEYExplicit license key, highest resolution precedence. Alternatively place the key in ~/.netvuln/license.key

TIP

Key resolution precedence is NV_LICENSE_KEY, then NV_API_KEY, then CONSULTATION_API_KEY, then ~/.netvuln/license.key. The scanner validates it against GET /api/license with a 24h cache and a 72h offline grace window (~/.netvuln/license_cache.json, mode 600, fingerprint only). See License Provisioning.

Benchmark Comparison

VariableDefaultDescription
BENCHMARK_ENABLEDfalseFetch comparative benchmark data after upload (business tier; requires CONSULTATION_API_URL and a key)

Alerts and Notifications

Threshold-based, multi-channel alerting after scans. See Alert Notifications.

VariableDefaultDescription
ALERT_ENABLEDfalseEnable threshold-based alerting after scans
ALERT_RISK_THRESHOLD60Risk score threshold to trigger an alert (0-100)
ALERT_ON_NEW_CRITICALtrueAlert on new Critical/High findings vs the prior scan
ALERT_ON_SCAN_COMPLETEfalseNotify on any scan completion
ALERT_EMAILEmail for alerts (falls back to REMINDER_EMAIL)
ALERT_SLACK_WEBHOOKSlack Incoming Webhook URL
ALERT_WEBHOOK_URLGeneric webhook URL (PagerDuty, Teams, etc.)

Schedule Monitoring

VariableDefaultDescription
SCHEDULE_MONITOR_TOLERANCE2Hours before a scheduled scan is marked as missed

Enterprise License

VariableDescription
NV_LICENSE_KEYLicense key for enterprise features (compliance mapping, network topology, executive summary, portal integration, benchmark comparison). Alternatively use ~/.netvuln/license.key

Ohio Revised Code 9.64

ORC 9.64 readiness reporting for political subdivisions (business tier or higher). See Compliance Mapping.

VariableDefaultDescription
ORC_964_ENABLEDfalseMaster switch for ORC 9.64 readiness reporting
CLIENT_TYPESet to political_subdivision to enable ORC 9.64 automatically
ORC_SUBDIVISION_CLASSothercounty_city (deadline Jan 1 2026) or other (deadline Jul 1 2026)
ORC_ATTEST_TRAININGunknown9.64(C)(6) annual training in place: true/false/unknown
ORC_ATTEST_NOTIFY_HLSunknown9.64(D)(1) 7-day Ohio Homeland Security notification capability
ORC_ATTEST_NOTIFY_AUDITORunknown9.64(D)(2) 30-day Auditor of State notification capability
ORC_ATTEST_RANSOM_POLICYunknown9.64(B) ransomware payment resolution adopted

Example Config

bash
# ~/netvuln-tool/configs/acme_corp.conf
CLIENT_NAME="Acme Corporation"
CLIENT_CONTACT="Jane Smith"
CLIENT_EMAIL="security@acme.example.com"
CLIENT_ID="acme"

ASSESSMENT_START="2026-02-20"
ASSESSMENT_END="2026-02-24"
ASSESSMENT_SCOPE="192.168.1.0/24, web.acme.example.com"
ASSESSOR_NAME="Bullium Consulting"
REPORT_CLASSIFICATION="CONFIDENTIAL"
COMPANY_NAME="Bullium Consulting LLC"

# Branding
REPORT_PRIMARY_COLOR="#2c5aa0"
REPORT_SUBTITLE="Prepared for Acme Corp"
REPORT_FOOTER_TEXT="Acme Corp Quarterly Security Assessment"
REPORT_FOOTER_URL="https://acme-corp.example.com"

# Portal upload and license
CONSULTATION_API_URL="https://bullium.com/api/upload"
NV_API_KEY="nvt_pro_<hex>"

# Alerts
ALERT_ENABLED="true"
ALERT_RISK_THRESHOLD="60"
ALERT_EMAIL="soc@acme.example.com"

The full annotated template with every option lives at templates/report_config.conf.example.

Apache-2.0 licensed (appliance subtree proprietary)