Use Case

Vulnerability finding CVE and EPSS enrichment
attach upstream advisory references to every finding on one record

Most programmes inherit findings from scanners with a CVSS number and nothing else: no CVE on the record, no EPSS percentile refreshed against the daily FIRST feed, no CISA KEV reconciliation against the catalog refresh, no vendor PSIRT bulletin reference, and no clear treatment for the long tail of findings that never carry a CVE. Run enrichment as a defensible workflow on the workspace: six upstream signals captured against every finding (CVE identifier, CVSS 3.1 vector, EPSS probability and percentile, KEV catalog status, CWE classification, vendor advisory reference), five enrichment tiers the queue resolves into (fully enriched, partial enrichment, no applicable CVE, stale enrichment, enrichment conflict), and an activity log that captures every refresh, reconciliation, and calibration decision.

No credit card required. Free plan available forever.

Enrich every finding with CVE, CVSS, EPSS, KEV, CWE, and vendor advisory references

Most security programmes inherit findings from scanners and pentest reports with one or two severity numbers attached and nothing else. The queue is sorted by a CVSS score that bears no relationship to the upstream advisory landscape: no EPSS percentile, no KEV reconciliation against the catalog refresh, no vendor bulletin reference, no CWE classification, and no clear treatment for the long tail of findings that never carry a CVE in the first place. The result is a backlog where theoretical criticals sit above actively exploited highs and the audit cannot reproduce why the team worked the queue in the order it did.

This is the enrichment workflow that lives between intake and prioritisation. For the upstream intake discipline that captures findings from every source class, read the vulnerability finding intake workflow. For the downstream priority logic that reads the enriched record, read the vulnerability prioritisation workflow. For the triage step that validates whether a finding is real before enrichment, read the scanner result triage workflow. For the deeper background on each upstream signal, read the EPSS score explained guide and the CISA KEV catalog guide.

Six enrichment signals every defensible finding record carries

Enrichment is not a single field. It is the deliberate combination of upstream advisory references, severity calibration, exploitation signals, and root-cause classification. The six signals below are the inputs every defensible programme records against each finding. Anything missing reduces the priority decision to a guess that will not survive an audit read or a board question.

CVE identifier

The canonical reference that ties a finding to the upstream advisory ecosystem. Without a CVE on the record, the finding cannot be matched against the CISA KEV catalog, the FIRST EPSS feed, vendor PSIRT bulletins, the NVD entry, or the upstream proof-of-concept landscape. Capturing the CVE at intake (or marking explicitly that no CVE applies for custom application findings) is the first enrichment step and the one most often skipped because the scanner output already feels complete.

CVSS 3.1 base, temporal, and environmental vector

The intrinsic technical severity of the vulnerability under different operating contexts. The base vector answers "how bad if exploited"; the temporal vector layers exploit code maturity and remediation level signals over time; the environmental vector recalibrates the score for the deployed estate by adjusting CIA requirements and modified attack vector or scope. SecPortal stamps the full vector on every finding so the residual severity is auditable rather than narrative.

EPSS probability and percentile

The FIRST Exploit Prediction Scoring System estimate of the probability the CVE will be exploited in the wild over the next thirty days, paired with the percentile that places the CVE in the population of all scored CVEs. EPSS updates daily. The enrichment step records both the probability and the percentile against the finding so the queue can sort by either and so the audit can verify the priority decision was based on a fresh value rather than a snapshot pulled at import.

CISA KEV catalog status

Whether the underlying CVE sits in the CISA Known Exploited Vulnerabilities catalog at the time of the latest catalog refresh. KEV is the strongest single signal a finding can carry because it records observed exploitation rather than predicted exploitation. KEV status is recorded as a boolean, the date the CVE was added to KEV, the BOD 22-01 remediation deadline if applicable, and the catalog vendor and product fields so the audit trail reads as a fact rather than as a claim.

CWE classification

The Common Weakness Enumeration category the finding maps to. CWE classification feeds clustering across findings, secure-code training content, framework control mapping (OWASP Top 10, OWASP ASVS, NIST SP 800-53 SI controls, ISO 27001 Annex A 8.28), and the root-cause view leadership reads when asked which weakness families dominate the backlog. CWE is captured at intake against the 300+ remediation templates and at import against the source tool mapping.

Vendor advisory and patch reference

The vendor PSIRT bulletin, the official patch reference, the workaround instruction, the vendor severity rating, and the fixed-in version. The vendor reference is what the remediation owner reads when deciding whether to upgrade, patch, or apply the workaround, and what the audit reads when asking how the team verified the upstream advice. Generic claims that "the vendor recommends an upgrade" without naming the bulletin are the most common path from a defensible remediation to a finding the audit cannot defend.

Six failure modes that quietly break vulnerability enrichment

Every enrichment programme that drifts back into scanner-severity ordering drifts there for one of the same reasons. The six modes below recur whenever the upstream references live outside the finding record or refresh infrequently. Each one is invisible at the time and visible at the next breach, audit, or post-incident review.

Findings carry only the CVSS score the scanner produced

The scanner output lands with a severity and the workflow stops at intake. Six months later the team is sorting the backlog by a CVSS number that bears no relationship to the CVE, the KEV catalog, the EPSS percentile, or the vendor advice. The fix is making CVE capture and upstream enrichment a queue-entry signal so every finding lands with the full set of external references the priority decision actually needs.

EPSS values are pulled once at import and never refreshed

A team integrates an EPSS pull at the moment of intake and then forgets to schedule the refresh. EPSS is updated daily and a stale percentile from three months ago can be wrong by tens of points. The fix is recording the EPSS refresh cadence on the engagement and scheduling a recurring reconciliation job so the live value on the finding reflects the live FIRST feed rather than the snapshot.

KEV reconciliation runs at scan time, not on catalog updates

The team checks KEV only when a scan produces a new finding. A non-KEV finding from yesterday becomes a KEV finding tomorrow when CISA updates the catalog, and the queue keeps reading the stale tag. The fix is running KEV reconciliation on a separate cadence keyed off the catalog refresh rather than off the scan cycle, so catalog-side additions promote existing findings without waiting for the next scan.

Findings without a CVE silently slip out of enrichment

Custom application findings, configuration findings, weak header findings, and most pentest writeups do not carry a CVE. The pipeline treats the absence as a no-op and these findings end up in the queue without any external enrichment. The fix is making the no-CVE state explicit, recording why the CVE is not applicable, and enriching against CWE, OWASP, and asset context so the queue ordering is still defensible.

Multiple CVEs collapse to the first one in the list

A single finding can reference multiple CVEs (a vulnerable dependency where several versions share a chain of CVEs, a misconfiguration that maps to multiple advisories). The pipeline reads only the first identifier and the rest are lost. The fix is recording every CVE on the finding, taking the highest EPSS percentile across the list as the priority signal, and citing the source CVE explicitly so the rationale is reproducible.

The enrichment lives in a separate analytics tool, not on the finding record

A standalone risk-based vulnerability management analytics layer sits on top of the scanner data and produces a prioritised list in a dashboard. The remediation team works from a different system that does not see the enrichment, so the queue ordering and the dashboard ordering drift apart within a quarter. The fix is making CVE, CVSS, EPSS, KEV, CWE, and vendor references first-class fields on the finding record so the same trail the queue runs on is the trail the audit reads.

Six upstream sources the enrichment pipeline reconciles against

Enrichment is a reconciliation discipline. The sources below are the canonical feeds most enterprise programmes pull against on a defined cadence so the finding record stays aligned with the live advisory landscape rather than the moment of the original scan.

Upstream sourceFields captured on the findingReconciliation pattern
NVD CVE databaseCVE identifier, description, CWE classification, CVSS 3.1 base vector, references, configurationsThe National Vulnerability Database is the canonical source for CVE metadata. NVD publishes the CVE record alongside CVSS 3.1 base vectors, CWE mappings, configuration data (CPE), and reference URLs. The worker reconciles NVD records against findings carrying a CVE identifier and stamps the canonical metadata on the finding record.
FIRST EPSS feedEPSS probability, EPSS percentile, daily refresh timestampThe Forum of Incident Response and Security Teams publishes EPSS as a daily CSV (a few tens of megabytes) and as a JSON API for per-CVE lookups. Most programmes pull the full CSV nightly, reconcile against the finding inventory, and stamp the latest probability and percentile against the finding alongside the refresh timestamp. The refresh cadence is recorded on the engagement so the audit can verify the value was current at the time of decision.
CISA KEV catalogKEV boolean, date added, remediation deadline, catalog vendor and product referencesCISA publishes the Known Exploited Vulnerabilities catalog as JSON and CSV at a stable URL with no rate limit. The reconciliation runs on its own daily cadence, separate from the scan cycle, so catalog-side additions promote existing findings as soon as the catalog updates. BOD 22-01 deadlines copy onto the finding for federal civilian executive branch alignment and for any organisation that adopts the same floor.
CWE catalogueCWE identifier, weakness name, parent and child relationships, OWASP categoryThe MITRE Common Weakness Enumeration catalogue is captured against every finding at intake. CWE feeds the secure-code training references, the OWASP Top 10 grouping, and the audit-ready control mapping (OWASP ASVS, NIST SP 800-53 SI, ISO 27001 Annex A 8.28). Findings without an upstream CVE still earn a CWE so the root-cause view stays meaningful.
Vendor PSIRT bulletins and advisoriesBulletin identifier, vendor severity, fixed-in version, workaround instructionsMicrosoft, Oracle, Cisco, Red Hat, Atlassian, and other vendor PSIRT teams publish advisories for vulnerabilities in their products. The remediation owner reads the vendor advisory to decide between an upgrade, a patch, or a workaround. The advisory reference, the fixed-in version, the vendor severity, and the workaround instruction are captured against the finding so the remediation rationale is auditable.
Source scanner severity and metadataSource-tool severity, scan ID, module name, original detection timestampThe scanner that produced the finding (external scanning module, authenticated DAST, code scanning via Semgrep, bulk import from Nessus or Burp Suite) writes its native severity, the rule or plugin identifier, the scan or import ID, and the module name onto the finding alongside the workspace-calibrated CVSS vector. The source severity is preserved so the audit can compare the source claim against the calibrated claim and reproduce the calibration logic.

Five enrichment tiers a defensible queue resolves findings into

Not every finding lands fully enriched on day one. A defensible policy names the enrichment states the queue actually carries so the team can route each tier to the right next action. The five tiers below are the shape most enterprise and consultancy programmes converge on once the workflow runs on the live engagement record rather than across a side analytics tool.

Enrichment tierWhen the tier appliesWhat the tier means in practice
Fully enrichedFindings with CVE, CVSS, EPSS, KEV status, CWE, and vendor advisory capturedStandard CVE-bearing findings from any source where all six signals are present on the record. The priority decision reads against the full set, the audit trail cites the named bulletin and the catalog refresh timestamp, and the queue ordering is reproducible. Fully enriched findings should make up the majority of CVE-bearing items in the queue.
CVE present, partial enrichmentCVE captured but one or more signals missing (no EPSS yet for a freshly-published CVE, no vendor advisory for a brand-new disclosure)Newly published CVEs sometimes lack an EPSS percentile in the first few days of publication, and brand-new disclosures may not yet have a vendor PSIRT bulletin. The finding lands with the missing signals flagged and a re-enrichment trigger set so the record refreshes once the upstream data becomes available. The queue treats partial enrichment as a known temporary state, not a silent gap.
No applicable CVECustom application findings, misconfiguration findings, weak header findings, pentest write-upsFindings produced by manual pentest work, code review, configuration review, or scanner modules that do not map to a public CVE. The record carries the explicit "no CVE applicable" marker, captures the CWE and the OWASP category against the finding template, and inherits asset and exposure context so the priority decision still reads as a defensible calibration rather than as an unenriched orphan.
Stale enrichment flagged for refreshFindings whose EPSS or KEV reconciliation is overdue against the engagement policyFindings whose last EPSS refresh predates the engagement-defined cadence (weekly, daily for tier-zero assets) or whose KEV reconciliation is overdue land on the stale-enrichment queue. The queue surfaces the records that need a re-pull before the next priority review reads them. Stale enrichment is treated as a queue-state signal, not an analyst memory item.
Enrichment conflict requiring decisionFindings where source-tool severity disagrees materially with the calibrated CVSS or where KEV and EPSS point in different directionsA scanner-reported Medium that maps to a CVE with EPSS percentile 97 and KEV listing. A vendor-marked Critical that the deployed environment renders unreachable. These cases need an explicit calibration decision and a recorded rationale rather than a silent overwrite. The enrichment-conflict queue surfaces them for a named triager to resolve and write the decision against the finding.

Six fields every enrichment policy has to record on the engagement

A defensible enrichment policy is six concrete fields on the engagement record, not an abstract sentence in a security policy document. Anything missing from the list below is a known gap in the audit trail rather than a question a reviewer will phrase generously.

CVE capture requirement at intake

Whether the workflow accepts findings without a CVE identifier, and what the explicit treatment is for findings that cannot carry a CVE. The policy lists the source classes where CVE is mandatory (external scanning, code scanning SCA, bulk import from CVE-keyed tools) and the source classes where CVE is optional but the no-CVE state is recorded explicitly (manual pentest, configuration review, custom application logic).

EPSS refresh cadence

How often the platform refreshes EPSS percentile and probability against the live finding inventory. EPSS is updated daily by FIRST; a defensible policy reconciles at least weekly, more often for tier-zero assets and KEV-listed findings. The cadence is recorded on the engagement so the audit verifies the priority decision was based on a current value rather than a months-old snapshot.

KEV reconciliation trigger

The triggers that re-run KEV reconciliation against the open queue. Standard triggers are the daily catalog refresh, every new finding at intake, and any explicit operator request. The policy lists the trigger ladder so the audit can verify the queue is reading a current KEV state rather than the state at the moment of the last scan.

Vendor advisory ingestion sources

The named vendor PSIRT feeds the workspace tracks (Microsoft Security Update Guide, Oracle Critical Patch Updates, Cisco PSIRT, Red Hat Security Advisories, Atlassian Security Advisories, and others relevant to the deployed estate). The list is part of the engagement record so the audit can verify the programme is reading the advisory landscape that matches the technology footprint.

Calibration rule for source-versus-workspace severity

The rule for when the workspace-calibrated CVSS overrides the source-tool severity and when the conflict is escalated to an enrichment-conflict triage. Common patterns are: workspace overrides for environmental adjustments, source severity preserved as a comparison field, conflicts above a delta threshold (say, two severity bands) trigger explicit calibration. The rule lives on the engagement record so the decision is reproducible.

Re-enrichment triggers

The events that force a finding back through the enrichment pipeline: a new EPSS percentile crossing a policy threshold, a new KEV listing for the underlying CVE, a new vendor advisory updating the recommended fix, a CVE being assigned to an existing custom finding after public disclosure. Trigger-driven re-enrichment keeps the queue accurate between scheduled reviews rather than waiting for the next cycle.

Enrichment checklist

Before any engagement opens new findings into the priority queue, and at every quarterly review, the engagement lead and the remediation owner walk through a short checklist. Each item takes minutes; missing any one of them is the source of the failure modes above and the audit gaps that follow.

  • The CVE capture requirement is recorded on the engagement record, not in a separate policy document.
  • Every CVE-bearing finding carries the canonical NVD metadata stamped against the record at intake.
  • EPSS probability and percentile are reconciled against the live FIRST feed at the engagement-defined cadence.
  • KEV reconciliation runs on the catalog refresh schedule, not only on the scan cycle.
  • Findings without a CVE land with an explicit no-CVE marker and inherit CWE and OWASP enrichment from the finding template.
  • Findings with multiple CVEs record every identifier and use the highest EPSS percentile across the list as the priority signal.
  • Vendor advisory references are captured by named bulletin identifier rather than as a generic claim.
  • The source-tool severity is preserved alongside the workspace-calibrated CVSS so the calibration logic is reproducible.
  • Enrichment conflicts (source severity disagreeing with the calibrated CVSS, KEV-versus-EPSS disagreement) land on a named queue for explicit decision.
  • Stale enrichment (overdue EPSS refresh, overdue KEV reconciliation) is a queue-state signal that surfaces records needing a refresh.
  • The activity log captures every enrichment refresh, every re-enrichment trigger fire, and every calibration decision with timestamp and user.
  • The AI-generated reports cite the upstream enrichment references (CVE, KEV listing, EPSS percentile, vendor advisory) alongside the closure metrics.

How enrichment looks in SecPortal

Enrichment is one workflow stitched into five feature surfaces: the finding record, the engagement record, the source scanner integrations, bulk finding import for prior tool output, and the activity log that captures every refresh and calibration event. The work at each stage uses capabilities the platform already supports for everyday operations; the enrichment layer just makes the upstream advisory capture, the refresh cadence, and the calibration rationale explicit on the record.

CVE and metadata on the finding

Every CVE-bearing finding carries the CVE identifier and the workspace-calibrated severity on the same record. The findings record stamps the CVE, the CVSS 3.1 vector, the CWE, and the no-CVE marker where applicable so the queue reads a consistent shape across scanner and manual sources.

CVSS calibration with environmental context

CVSS 3.1 base, temporal, and environmental vectors land on every finding. The base severity reads the intrinsic technical impact; the environmental severity recalibrates against the deployed estate. The audit trail captures both so the calibration is reproducible from the same record the queue runs on.

Bulk finding import preserves source metadata

Findings imported in bulk from Nessus, Burp Suite, or any CSV land with the source severity, CVE, and CWE captured by bulk finding import against a reusable column mapping. Refreshed enrichment from a worker job uses the same intake path so the live record reflects the latest upstream values.

Code scanning lands CVE attribution at source

Findings produced by code scanning via Semgrep against connected repositories carry the CVE identifier on every SCA dependency finding alongside the file path, the package, and the recommended upgrade. The repository binding pairs to the application service so downstream prioritisation reads the right asset context.

Re-enrichment via bulk import refresh

Programmes pulling daily NVD, EPSS, and KEV feeds reconcile the live values against the open queue and land the refreshed enrichment using bulk finding import against the saved template. The refresh timestamp is captured against the engagement record so the audit can verify the priority decision was based on a current value rather than a stale snapshot.

Audit trail in the activity log

Every enrichment refresh, every re-enrichment trigger fire, and every calibration decision lands on the activity log with timestamp and user. The CSV export is the trail an ISO 27001, SOC 2, PCI DSS, or NIST audit reads when asking how upstream advisory references were reconciled against the open queue.

Reporting views the enrichment record actually drives

The reports that drive enrichment performance are not the static PDF that lands at the end of an engagement. They are the live views owners, security leads, and auditors look at every week. The five below are the ones every meaningful programme settles on, and they all derive from the live findings record rather than a parallel analytics tool.

KEV coverage report

Open findings whose underlying CVE sits in the CISA KEV catalog, ordered by exposure and asset tier. KEV coverage is the report a CISO presents to the risk committee when asked whether the programme covers actively exploited vulnerabilities.

EPSS top-percentile view

Open findings whose EPSS percentile sits above the programme threshold. The view surfaces the small set of vulnerabilities most likely to be exploited in the next thirty days so the team can address them before the probability becomes an incident.

Stale-enrichment queue

Findings whose EPSS refresh or KEV reconciliation is overdue against the engagement policy. The queue surfaces records that need a re-pull before the next priority review reads them, so stale values do not drive an audit gap or a missed escalation.

Enrichment-conflict queue

Findings where source severity disagrees materially with the workspace-calibrated CVSS or where KEV and EPSS point in different directions. The queue surfaces records for a named triager to write an explicit calibration decision rather than letting the disagreement live as a silent overwrite.

CWE distribution view

Open findings grouped by CWE classification. The root-cause view leadership reads when asked which weakness families dominate the backlog, the view AppSec reads to choose the next secure-code training topic, and the view GRC reads to map findings against OWASP ASVS and NIST SP 800-53 SI control families.

Activity log export

Every enrichment refresh, every re-enrichment trigger fire, and every calibration decision lands on the activity log. The CSV export is the audit evidence ISO 27001, SOC 2, PCI DSS, and NIST assessors expect to see when they ask how external advisory references were reconciled against the open queue.

What auditors expect from an enrichment programme

Vulnerability enrichment evidence appears in audit reads whenever an external assessor reviews the security programme. The frameworks below all expect a documented policy plus enforcement evidence rather than a slide that names the targets without proving them.

FrameworkWhat the audit expects
ISO/IEC 27001:2022Annex A 8.8 expects technical vulnerability management informed by the criticality of assets, the exposure of systems, and the availability of fixes. Recording the CVE, the latest CVSS calibration, the EPSS percentile, the KEV status, and the vendor advisory against every finding produces the trail an Annex A 8.8 audit reads as evidence the technical vulnerability management process is operating against the live external advisory landscape rather than against the scanner output alone.
SOC 2Common Criteria CC7.1 expects the entity to detect vulnerabilities and to remediate them in a timely manner. CC3.2 expects risks to be identified and analysed against entity objectives. The auditor reads the enrichment trail as evidence detection led to risk-prioritised response. Capturing CVE, EPSS, KEV, and vendor advisory against the finding produces the trail CC7.1 and CC3.2 audits expect to see alongside the closure timestamps.
PCI DSS v4.0Requirement 6.3.1 expects a process for identifying security vulnerabilities and assigning a risk ranking based on industry best practices. Requirement 6.3.3 expects critical vulnerabilities to be addressed in a timely manner. The risk-ranking expectation is the enrichment expectation: combining CVSS, EPSS, KEV, and vendor severity into a documented ranking against each finding satisfies the assessor read of requirement 6.3.1, and the closure timestamps tied to the ranking satisfy the assessor read of requirement 6.3.3.
NIST SP 800-53 Rev. 5RA-3 expects risk to be assessed considering threat, vulnerability, likelihood, and impact. RA-5 expects vulnerability scanning and the analysis of scan reports to drive remediation actions. SI-2 expects flaw remediation informed by risk. The enrichment workflow is the connective tissue between RA-3 (likelihood and impact informed by EPSS and KEV), RA-5 (analysis of scan reports informed by CVE and CWE), and SI-2 (flaw remediation informed by vendor advisory and patch availability).
CISA BOD 22-01Federal civilian executive branch agencies and any organisation aligning to the Known Exploited Vulnerabilities catalog are expected to remediate KEV-listed vulnerabilities within the catalog deadline. KEV reconciliation on every finding, the BOD 22-01 deadline captured against the finding, and the activity log showing the reconciliation cadence produce the trail BOD 22-01 alignment expects.

Where enrichment fits across the vulnerability lifecycle

Enrichment composes with the rest of the vulnerability lifecycle on the same engagement record so the upstream advisory references stay connected to the work that produced the finding and the work that eventually closes it.

Upstream and adjacent

Enrichment depends on vulnerability finding intake landing a CVE identifier and the source-tool severity on the record, on bulk finding import preserving the original tool metadata, on scanner result triage validating false positives before enrichment effort is spent, and on threat intelligence driven prioritisation ingesting structured CTI signals (KEV additions, EPSS shifts, CERT advisories, vendor PSIRT bulletins) alongside the enrichment values.

Downstream and reporting

The enriched record feeds vulnerability prioritisation because the priority logic reads CVE, EPSS, KEV, and CWE as inputs. It feeds vulnerability SLA management because KEV listing and EPSS uplift modify the SLA tier. It feeds vulnerability acceptance and exception management because residual risk decisions cite the enriched values. AI report generation produces the leadership and audit narratives from the same enriched record.

Pair the workflow with the long-form guides and the framework references

Enrichment is operational; the surrounding guides explain the upstream signals and the framework clauses that mandate risk-informed remediation. Pair this workflow with the EPSS score explained guide for the probability-versus-percentile mechanics and threshold choices, the CISA KEV catalog guide for the operational walkthrough of KEV ingestion and KEV-aligned SLAs, the CVE numbering authority explainer for how CVE records get assigned and rejected, the Common Weakness Enumeration explainer for the CWE catalogue mechanics, the CVSS scoring explained guide for the severity vector deep dive, the SSVC stakeholder-specific vulnerability categorization guide for an alternative decision model that reads against the same enrichment, and the reachability analysis guide for the dependency-side filter that pairs naturally with CVE and EPSS enrichment. The framework references that mandate risk-informed enrichment include ISO 27001 for Annex A 8.8 technical vulnerability management, SOC 2 for CC7.1 vulnerability detection and CC3.2 risk identification, PCI DSS for requirement 6.3.1 risk ranking and 6.3.3 timely remediation, and NIST SP 800-53 for RA-3, RA-5, and SI-2 flaw remediation expectations. Programme owners running a continuous exposure cycle around the same enrichment record will find the Continuous Threat Exposure Management (CTEM) framework a useful sequencing layer that ties scope, discovery, prioritisation, validation, and mobilisation into a single cycle.

Buyer and operator pairing

Vulnerability enrichment is the workflow vulnerability management teams run to keep the backlog aligned with the live upstream advisory landscape, the workflow internal security teams and AppSec teams run alongside their scanner pipelines, the workflow product security teams run alongside PSIRT intake to capture vendor PSIRT references for the same finding their customers will read about, and the workflow security engineering teams and DevSecOps teams run to keep the SCA backlog readable rather than overwhelming. CISOs and security leaders read the KEV coverage and the EPSS top-percentile view as the live posture rather than as a quarterly snapshot. GRC and compliance teams read the enrichment trail as audit evidence that risk-informed prioritisation is in operation rather than aspiration.

What good enrichment feels like

Enrichment is a property of the finding

Every CVE-bearing finding carries CVE, CVSS calibration, EPSS, KEV status, CWE, and vendor advisory references on its own record. The priority decision is not an output of a separate analytics tool; it is a property of the finding the queue inherits at all times.

Refresh cadence is explicit

The EPSS and KEV refresh cadence is recorded on the engagement, the last reconciliation timestamp lands on the finding, and the stale-enrichment queue surfaces records that need a re-pull. Nobody assumes the values are current; the workflow proves they are.

Calibration is reproducible

Source severity and workspace severity sit side by side on the record. Disagreements land on the enrichment-conflict queue with an explicit calibration decision, the prior severity, the calibrated severity, and the rationale. The audit reads the calibration as deliberate rather than as a quiet overwrite.

Evidence is derivative of the work

The KEV coverage view, the EPSS top-percentile view, the stale-enrichment queue, the enrichment-conflict queue, the CWE distribution view, and the activity log export all derive from the live record. Nobody assembles the enrichment evidence at the end of the quarter from a spreadsheet; the activity log is the trail and the AI report is the narrative.

Vulnerability enrichment is the discipline that turns scanner output into a decision-ready record. Run it on the engagement, and every priority signal carries the upstream advisory references, the refresh cadence, and the audit trail that the programme and the audit both expect. For the upstream intake step that captures findings from every source class, pair this workflow with the vulnerability finding intake workflow. For the downstream priority logic that reads the enriched record, pair it with the vulnerability prioritisation workflow. The two workflows compose into the spine of a defensible find-track-fix-verify loop.

Frequently asked questions about CVE and EPSS enrichment

What is vulnerability finding enrichment?

Vulnerability finding enrichment is the workflow that attaches upstream advisory references (CVE, CVSS calibration, EPSS percentile, KEV catalog status, CWE classification, vendor PSIRT bulletins) onto every finding the operating record carries. The enrichment is what turns a scanner output into a decision-ready record: the same finding without enrichment is a severity number; the same finding with enrichment is a record the priority queue, the SLA workflow, the exception register, and the audit trail can all read consistently.

How is enrichment different from prioritisation?

Enrichment captures the external references against the finding record. Prioritisation orders the enriched queue against asset context, exposure, and compensating controls. Enrichment answers "what does the wider ecosystem say about this CVE"; prioritisation answers "what is the next finding to work given our environment". Enrichment runs at intake and on a refresh cadence; prioritisation runs continuously against the enriched record. Both live on the same engagement so the priority decision is auditable back to the enrichment values it read.

How is enrichment different from triage?

Triage is the validation step that decides whether a finding is real, a false positive, a duplicate, or out of scope. Enrichment is the capture step that attaches upstream references to validated findings. Triage answers "is this a finding"; enrichment answers "what does the ecosystem know about this CVE". Triage typically runs before enrichment for manual and bulk-imported findings; for scanner-produced findings with a known CVE, enrichment runs at intake and triage validates the calibrated record.

How often should EPSS values be refreshed?

EPSS is updated daily by FIRST. A defensible programme refreshes EPSS against the live finding inventory at least weekly, more often for tier-zero assets and KEV-listed findings. The refresh cadence is recorded on the engagement so an audit can verify the priority decision was based on a current value rather than a snapshot from months ago. Pulling EPSS once at import and never refreshing produces a queue whose ordering decays with every passing week.

How is KEV reconciliation kept fresh?

KEV reconciliation runs on the catalog refresh schedule rather than only on the scan cycle. CISA publishes catalog updates without rate-limit, and most programmes reconcile daily. The reconciliation is a separate trigger from scanning so a non-KEV finding from yesterday becomes KEV-tagged tomorrow when CISA adds the underlying CVE, without waiting for the next scan run. The cadence and the last reconciliation timestamp live on the engagement record so the audit reads a current state rather than a stale one.

What happens for findings that have no CVE?

Findings without a CVE (custom application logic flaws, configuration findings, weak header findings, most manual pentest writeups) land with an explicit no-CVE marker rather than being silently skipped. The CWE classification, the OWASP category from the finding template, the asset and exposure context, and the calibrated CVSS still apply. The priority queue reads the enriched CVSS plus asset context plus exposure, and the audit reads the no-CVE rationale as a defensible explicit decision rather than as a gap.

How are findings with multiple CVEs handled?

A finding can reference multiple CVEs (a vulnerable dependency where several CVE entries share a chain, a misconfiguration that maps to multiple advisory references). Every CVE is recorded against the finding, the highest EPSS percentile across the list is taken as the priority signal with the source CVE cited, and the KEV listing is taken across any of the CVEs. The rationale (which CVE drove the priority signal) is captured on the finding so the decision is reproducible without re-reading the upstream catalogs.

What if the source scanner severity disagrees with the workspace CVSS?

The source-tool severity is preserved on the finding as a comparison field. The workspace-calibrated CVSS reflects environmental adjustments (asset criticality, exposure annotation, compensating controls). A disagreement that crosses a delta threshold (commonly two severity bands) triggers the enrichment-conflict queue for a named triager to write an explicit calibration decision. The decision lands on the activity log with the prior severity, the calibrated severity, the rationale, and the timestamp so the audit reads the calibration as deliberate.

How are vendor advisories captured?

The vendor PSIRT bulletin identifier, the fixed-in version, the workaround reference, and the vendor severity are recorded against every CVE-bearing finding where a vendor advisory exists. Generic claims like "the vendor recommends upgrade" without naming the bulletin are not defensible. The remediation owner reads the named advisory when deciding between upgrade, patch, or workaround; the audit reads the same advisory when asking how the team verified the upstream advice.

How does SecPortal support CVE and EPSS enrichment?

SecPortal records the CVE on every finding that carries one, calibrates CVSS 3.1 base, temporal, and environmental vectors per finding, captures CWE against the finding template, supports bulk finding import to land prior scanner output with the original severity and CVE references intact, runs Semgrep code scanning against connected repositories to land SCA findings with CVE attribution, exports the activity log to CSV so the enrichment cadence is auditable, and generates AI-driven reports that cite the upstream enrichment alongside the closure metrics. SecPortal does not ship with a packaged real-time EPSS or KEV ingestion engine; programmes that need scheduled NVD, EPSS, and KEV reconciliation typically run a worker against the public feeds and use bulk-finding-import to land the refreshed enrichment against the workspace.

How it works in SecPortal

A streamlined workflow from start to finish.

1

Capture the CVE identifier at intake or mark the no-CVE state explicitly

Every finding lands with the CVE identifier as a first-class field where one applies, or with the explicit no-CVE marker where one does not. External scanning, code scanning SCA, and bulk import from CVE-keyed tools require the CVE; manual pentest writeups, configuration findings, and custom application findings carry the no-CVE marker plus the CWE and OWASP category from the finding template. The capture rule is a property of the engagement record so every finding inherits the same intake discipline.

2

Reconcile the finding against the NVD record for canonical CVE metadata

For every CVE-bearing finding the workflow stamps the canonical NVD metadata against the record: the CVE description, the CVSS 3.1 base vector, the CWE classification, the reference URLs, and the configuration data. The reconciliation runs at intake and on a scheduled refresh against the live NVD feed so updates to the underlying CVE entry (new references, updated metadata, rejection or merge) flow through to the open queue rather than living only on the original snapshot.

3

Calibrate CVSS base, temporal, and environmental vectors against the deployed estate

The base CVSS vector reads the intrinsic technical severity. The temporal vector layers exploit code maturity and remediation level. The environmental vector recalibrates the score against asset criticality, exposure, and the modified attack vector or scope where the deployed configuration differs from the generic case. The calibration is captured on the finding so the residual severity reads against the live estate rather than against the generic NVD entry, and the source severity is preserved alongside so the calibration is reproducible.

4

Reconcile against the FIRST EPSS feed on the engagement-defined cadence

A worker pulls the daily EPSS CSV from FIRST, reconciles against the open queue, and stamps the latest probability and percentile against every CVE-bearing finding alongside the refresh timestamp. The cadence is recorded on the engagement (weekly minimum, daily for tier-zero assets and KEV-listed findings). The stale-enrichment queue surfaces records whose last EPSS refresh predates the policy so re-pulls happen before the next priority review reads them.

5

Reconcile against the CISA KEV catalog on the catalog refresh schedule

A separate worker pulls the CISA KEV catalog (JSON and CSV at the public CISA URL with no rate limit), reconciles against the open queue on the catalog refresh schedule, and stamps the KEV status, the date-added, the BOD 22-01 remediation deadline, the catalog vendor and product fields, and the last reconciliation timestamp against the finding. The reconciliation runs separately from the scan cycle so non-KEV findings from yesterday promote to KEV-tagged today as soon as the catalog updates.

6

Capture the vendor PSIRT bulletin and the recommended fix

For every CVE-bearing finding where a vendor advisory exists, the workflow captures the bulletin identifier (Microsoft KB, Oracle CPU reference, Cisco PSIRT identifier, Red Hat RHSA identifier, Atlassian advisory identifier), the vendor severity, the fixed-in version, and the workaround instruction. The remediation owner reads the named advisory when deciding between upgrade, patch, or workaround. Generic claims that "the vendor recommends upgrade" without naming the bulletin do not enter the record.

7

Route enrichment conflicts to the named triager for an explicit calibration decision

A scanner-reported Medium mapped to a CVE with EPSS percentile 97 and KEV listing, or a vendor-marked Critical the deployed environment renders unreachable: these are enrichment-conflict cases. The conflict queue surfaces them for a named triager to write an explicit calibration decision against the finding. The activity log captures the prior severity, the calibrated severity, the rationale, and the timestamp so the audit reads the calibration as deliberate.

8

Trigger re-enrichment on upstream changes between scheduled refreshes

Trigger events that re-fire enrichment between scheduled cycles include: a new EPSS percentile crossing a policy threshold, a new KEV listing for the underlying CVE, an updated vendor advisory, a CVE being assigned to an existing custom finding after public disclosure, and an explicit operator request. The trigger ladder is recorded on the engagement so the audit reads the re-enrichment cadence as policy-driven rather than analyst-driven.

9

Read the enrichment trail against the activity log on every audit cycle

The activity log captures every enrichment refresh, every re-enrichment trigger fire, every calibration decision, and every conflict resolution with the timestamp, the actor, and the rationale. ISO 27001 Annex A 8.8, SOC 2 CC7.1 and CC3.2, PCI DSS 6.3.1 and 6.3.3, NIST 800-53 RA-3, RA-5, and SI-2, and CISA BOD 22-01 alignment all read the enrichment trail as evidence the technical vulnerability management process is operating against the live external advisory landscape. CSV export of the activity log delivers the enrichment chronology auditors cite by line.

Enrich every finding with CVE, EPSS, KEV, CWE, and vendor advisory references

Six upstream signals on every finding, five enrichment tiers the queue resolves into, a stale-enrichment queue, an enrichment-conflict queue, and an activity log that captures every refresh and calibration decision. Start free.

No credit card required. Free plan available forever.