Security Progress Report
{{ scope_label | default('All Projects') }} — Security Posture Over Time
Per-project vulnerability change between baseline and current versions. Sorted by most improved.
| Project | Baseline Open | Current Open | Resolved | New | Net Change |
|---|---|---|---|---|---|
| {{ p.get('project_name', '—') }} | {{ p_baseline }} | {{ p_current }} | {{ p_resolved }} | {{ p_new }} | {% if p_net > 0 %}+{% endif %}{{ p_net }} |
| {{ ns.hidden }} project{{ 's' if ns.hidden != 1 else '' }} with no findings or changes not shown | |||||
CVE database changes detected during the reporting window that affect open findings.
| Category | Description | Count |
|---|---|---|
| Newly Added CVEs | Newly added to NVD during this period. | {{ cve_update_summary.get('added', 0) }} |
| Retracted CVEs | Rejected or withdrawn by NVD during this period. | {{ cve_update_summary.get('retracted', 0) }} |
| Severity Escalated | CVSS score increased — re-prioritize remediation. | {{ cve_update_summary.get('severity_escalated', 0) }} |
| Severity Downgraded | CVSS score decreased — may relax priority. | {{ cve_update_summary.get('severity_downgraded', 0) }} |
| Exploit Gained | New exploit signal (KEV listing, weaponization, threat-actor attribution). | {{ cve_update_summary.get('exploit_gained', 0) }} |
| Exploit Subsided | Exploit signal retracted — pressure reduced. | {{ cve_update_summary.get('exploit_subsided', 0) }} |
| Other Updates | Other NVD metadata changes (CWE, description, references, etc.). | {{ cve_update_summary.get('other_updates', 0) }} |
| Total | {{ cve_update_summary.get('total', 0) }} |
Expand a project to see how vulnerability counts changed across firmware versions.
{{ p.get('project_name', '—') }}
| Version | Date | Open | Resolved | New | Critical | High | Medium | Low |
|---|---|---|---|---|---|---|---|---|
| {{ v.get('version', '--') }} | {{ v.get('date_display') or v.get('date') or '--' }} | {{ v.get('open_count', 0) }} | {{ v.get('resolved', 0) }} | {{ v.get('new', 0) }} | {{ v.get('critical', 0) }} | {{ v.get('high', 0) }} | {{ v.get('medium', 0) }} | {{ v.get('low', 0) }} |