Appearance
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.confFile Placement
| Location | Purpose |
|---|---|
templates/report_config.conf.example | Template (committed to repo, all values commented) |
~/netvuln-tool/configs/<client>.conf | Per-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
| Variable | Description |
|---|---|
CLIENT_NAME | Client organization name |
CLIENT_CONTACT | Primary contact name |
CLIENT_EMAIL | Contact email |
CLIENT_ID | Unique client identifier for portal multi-tenancy scoping (v2.14+); sessions are scoped to this client in the portal when set |
Assessment Details
| Variable | Description |
|---|---|
ASSESSMENT_START | Engagement start date (e.g. 2026-02-24) |
ASSESSMENT_END | Engagement end date |
ASSESSMENT_SCOPE | Networks and hosts in scope |
ASSESSMENT_TYPE | Engagement type label (e.g. Internal Network Penetration Test) |
Targets
| Variable | Description |
|---|---|
TARGETS | Comma-separated targets defined in config instead of, or in addition to, CLI -t/-T. CLI options override this value |
Assessor Information
| Variable | Description |
|---|---|
ASSESSOR_NAME | Assessor name |
ASSESSOR_COMPANY | Assessor company |
ASSESSOR_EMAIL | Assessor email |
Report Settings
| Variable | Default | Description |
|---|---|---|
REPORT_CLASSIFICATION | CONFIDENTIAL | Classification banner |
REPORT_TITLE | Network Vulnerability Assessment Report | Report title |
REPORT_VERSION | 1.0 | Report 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.
| Variable | Description | Example |
|---|---|---|
COMPANY_NAME | Branding company name | Bullium Consulting LLC |
COMPANY_LOGO | Path to a logo file (base64-embedded in the report) | /path/to/logo.png |
COMPANY_URL | Company website URL | https://www.bullium.com |
REPORT_PRIMARY_COLOR | Accent color for banners, borders, and highlights | #ea1347 |
REPORT_HEADER_BG | Header background color | #ffffff |
REPORT_HEADER_TEXT | Header text color | #1a1a1a |
REPORT_SUBTITLE | Subtitle under the report title | Prepared for Acme Corp |
REPORT_FOOTER_TEXT | Custom footer text | Acme Corp Security Assessment |
REPORT_FOOTER_URL | Custom footer link URL | https://acme-corp.example.com |
REPORT_FOOTER_EMAIL | Custom footer email | security@acme.example.com |
Report Expiration and Scheduling
| Variable | Default | Description |
|---|---|---|
REPORT_VALIDITY_DAYS | 30 | Days before a report is considered expired |
SCAN_SCHEDULE | 0 2 * * 0 | Cron expression for scheduled scans (default: Sunday 2am) |
SCAN_PROFILE | full_recon | Scan profile for scheduled scans |
REMINDER_DAYS_BEFORE | 7 | Days before expiry to send a reminder |
REMINDER_EMAIL | Email 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.
| Variable | Default | Description |
|---|---|---|
DAEMON_ENABLED | false | Enable daemon mode for this config |
DAEMON_POLL_INTERVAL | 60 | Seconds between schedule checks |
DAEMON_HEARTBEAT_INTERVAL | 300 | Seconds between portal heartbeats |
DAEMON_SCAN_RETRY_MAX | 3 | Max retry attempts on scan failure |
DAEMON_SCAN_RETRY_BACKOFF | 60 | Initial backoff seconds, doubles each retry |
DAEMON_LOG_LEVEL | info | Verbosity: 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.
| Variable | Default | Description |
|---|---|---|
EXEC_SUMMARY_ENABLED | false | Generate an executive summary during the pipeline |
EXEC_SUMMARY_RECIPIENTS | Comma-separated email recipients | |
EMAIL_FROM | netvuln@bullium.com | Sender address |
EMAIL_SUBJECT | auto-generated | Custom email subject |
EXEC_SUMMARY_TEMPLATE | built-in | Path to a custom HTML template |
EXEC_SUMMARY_PDF | false | Generate 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.
| Variable | Description |
|---|---|
CONSULTATION_API_URL | Portal upload endpoint (e.g. https://your-site.netlify.app/api/upload or https://bullium.com/api/upload) |
NV_API_KEY | Canonical license key. Authenticates portal uploads and unlocks tier-gated features locally. Format nvt_{tier}_{hex} (e.g. nvt_pro_<hex>) |
CONSULTATION_API_KEY | Legacy alias for NV_API_KEY, still supported. Non-nvt keys run as the legacy tier with all features and a deprecation warning |
NV_LICENSE_KEY | Explicit 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
| Variable | Default | Description |
|---|---|---|
BENCHMARK_ENABLED | false | Fetch 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.
| Variable | Default | Description |
|---|---|---|
ALERT_ENABLED | false | Enable threshold-based alerting after scans |
ALERT_RISK_THRESHOLD | 60 | Risk score threshold to trigger an alert (0-100) |
ALERT_ON_NEW_CRITICAL | true | Alert on new Critical/High findings vs the prior scan |
ALERT_ON_SCAN_COMPLETE | false | Notify on any scan completion |
ALERT_EMAIL | Email for alerts (falls back to REMINDER_EMAIL) | |
ALERT_SLACK_WEBHOOK | Slack Incoming Webhook URL | |
ALERT_WEBHOOK_URL | Generic webhook URL (PagerDuty, Teams, etc.) |
Schedule Monitoring
| Variable | Default | Description |
|---|---|---|
SCHEDULE_MONITOR_TOLERANCE | 2 | Hours before a scheduled scan is marked as missed |
Enterprise License
| Variable | Description |
|---|---|
NV_LICENSE_KEY | License 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.
| Variable | Default | Description |
|---|---|---|
ORC_964_ENABLED | false | Master switch for ORC 9.64 readiness reporting |
CLIENT_TYPE | Set to political_subdivision to enable ORC 9.64 automatically | |
ORC_SUBDIVISION_CLASS | other | county_city (deadline Jan 1 2026) or other (deadline Jul 1 2026) |
ORC_ATTEST_TRAINING | unknown | 9.64(C)(6) annual training in place: true/false/unknown |
ORC_ATTEST_NOTIFY_HLS | unknown | 9.64(D)(1) 7-day Ohio Homeland Security notification capability |
ORC_ATTEST_NOTIFY_AUDITOR | unknown | 9.64(D)(2) 30-day Auditor of State notification capability |
ORC_ATTEST_RANSOM_POLICY | unknown | 9.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.
