As a general rule, any detected vulnerabilities of any severity should be patched as soon as possible.
CVSS (Common Vulnerability Scoring System)
Designed to be universal and standardized.
Provides a severity score (0–10) based on exploitability + impact metrics.
Issues in practice:
Many CVEs end up with high scores (7–10) → alert fatigue.
CVSS does not factor in whether a vuln is being actively exploited in the wild.
Static → doesn't change once published, even if threat landscape evolves.
EPSS (Exploit Prediction Scoring System)
Focuses on likelihood of exploitation in the next 30 days.
Uses real-world data (threat intel feeds, malware samples, honeypots, etc.).
Why it's more practical:
Lets you prioritize patching based on threat activity, not just theoretical risk.
A CVE with CVSS 9.8 but EPSS 0.2% = probably low urgency.
A CVE with CVSS 6.5 but EPSS 80% = patch immediately.
Best practice: Use CVSS for baseline severity and EPSS for prioritization.
In short: CVSS = “impact if exploited”, EPSS = “chance it will be exploited soon”.Combining both prevents wasted effort on “paper tigers”.
Option 1 – Using SOCFortress Copilot
Lon into your Copilot instance, and from there Agents – Agents List
Select an agent (left panel) and go to the “Vulnerabilities” tab:
Vulnerabilties can be listed by priority.
Select a vulnerability and a new panel will show the following information:
- General data for this particular CVE:
- External reference (vendor's info about this CVE)
- EPSS Score:
Option 2 – Using Wazuh UI
Log into your Wazuh UI instance and navigate to Threat Intelligence – Vulnerability Detection:
NOTE: The vulnerabilty module included in Wazuh does NOT include EPPS values out of the box. These scores are available via SOCFortress integration.
Option 3 – Using Grafana
Only avaiable in the MSP/MSSP organization in Grafana.
Since the vulnerability module doesn't take into account agent's group, all the vuln for all tenants will be displayed.
It is not possible to create separate dashboards for each tenant.
In this dshboard there's a panel with CVE IDs and a direct link to EPSS API to check their exploitation scores:
When deciding what to patch first, think of it as a matrix of three dimensions:
Threat likelihood → (EPSS, threat intel, active exploits).
Technical severity → (CVSS, local exploitability, privilege required).
Business impact / criticality → (asset value, role in operations, exposure).
Concrete approach:
Critical servers & internet-facing assets first (domain controllers, VPN gateways, jump hosts, web servers).
Business-critical endpoints/apps (finance systems, endpoint agents that handle sensitive data, executive laptops).
High-risk vulns (high EPSS, known exploited CVEs → per CISA KEV catalog).
Everything else → regular cycle.
A good formula for prioritization is:Risk = (CVSS Score × EPSS Probability × Asset Criticality Weight)
Risk = (CVSS Score × EPSS Probability × Asset Criticality Weight)
We'll use a 1–5 scale (1 = low, 5 = highest) that plugs into your risk formula:
Risk = (CVSS × EPSS × Criticality Weight)
Domain Controllers, AD FS, LDAP servers → Weight 5
Compromise = total domain compromise.
Identity = single point of failure for authentication.
PKI / Certificate Authorities → Weight 5
Firewalls, VPN gateways, reverse proxies, WAFs → Weight 5
Internet-exposed, first line of defense.
Compromise often leads to immediate access.
Routers, core switches → Weight 4
Network availability + traffic control.
Exploits can enable man-in-the-middle or outage.
NOTE: More on vulnerability management for network devices later in this article
Email servers (Exchange, O365 hybrid) → Weight 5
ERP, Finance, HR, CRM systems → Weight 5
File servers with sensitive/confidential data → Weight 4–5
Application servers (internal, not business-critical) → Weight 3
Executive laptops / privileged user endpoints → Weight 4–5
Standard employee workstations → Weight 2–3
Kiosk / shared devices → Weight 1–2
OT/ICS systems → Weight 5
SIEM / SOC tooling, Backup servers → Weight 5
Dev/Test environments → Weight 1–2
Tag assets in CMDB/EDR/AD with categories:
role=domain_controller
role=finance_server
role=workstation_standard
Assign weights automatically based on role → feeds into risk calculation.
Review quarterly with IT + business owners:
Refine scoring with exposure:
Critical system + internet-exposed = extra multiplier.
Example: Exchange on-prem OWA facing internet → 5 × 2.
Summary table – Asset Criticality
CVE-2025-1234
CVSS = 8.8
EPSS = 0.7 (70% chance exploited soon)
Asset = Domain Controller (weight = 5)
Risk = 8.8 × 0.7 × 5 = 30.8 (Very High Priority)
Same vuln on a test lab server (weight = 1) Risk = 8.8 × 0.7 × 1 = 6.1 (Low Priority)
Windows Patch Tuesday → Microsoft releases security updates the second Tuesday of each month.
Practical approach:
Day 0–2: Review advisories (filter by KEV catalog, EPSS, business relevance).
Day 3–5: Test patches in staging or pilot group (lab + subset of endpoints).
Week 2: Rollout to production for critical/high-risk assets.
Week 3–4: Broad deployment to all endpoints.
Out-of-band patches (for 0-days with active exploitation) → fast-track deployment, bypass cycle.
Automation:
Use WSUS, Intune, or SCCM for policy-driven rollouts.
Enforce deadlines but allow for short deferrals (to prevent downtime during key business hours).
Use reports/dashboards to confirm patch coverage (target >95%).
Metrics to track:
Mean Time to Patch (MTTP).
% of endpoints patched within 7, 14, 30 days.
Coverage of KEV vulnerabilities patched.
Compensating Controls: If patching can't happen quickly, apply endpoint firewall rules, application control, or EDR mitigations (e.g., block PoC exploit commands).
Third-Party Apps: Don't forget Adobe, Java, Chrome, Zoom, etc. → often abused and left unpatched.
Linux/macOS endpoints: Use apt, yum, brew, or enterprise patch managers to standardize.
apt
yum
brew
Communication: Coordinate with business owners. Sometimes delaying a non-exploited patch is better than disrupting a critical workflow.
Use NetDisco (SNMP/CLI/API discovery) to collect and keep updated, at minimum: device type, vendor, model, OS/firmware name and version, serial, role, site, and management IP.
SOCFortress professional services include the option of deploying NetDisco as a network inventory tool. More info here: https://socfortress.medium.com/socfortress-integrations-network-discovery-and-inventory-using-netdisco-d218b2711985
NetDisco already inventories gear into Postgres via SNMP/CLI/device APIs, which is perfect as your source of truth.
Tip: normalize versions on ingest (e.g., PAN-OS 9.1.3 → panos 9.1.3, FortiOS v7.2.6-build1517 → fortios 7.2.6) so downstream matching is reliable.
PAN-OS 9.1.3
panos 9.1.3
FortiOS v7.2.6-build1517
fortios 7.2.6
NVD matching works best when you can map a device to a CPE (Common Platform Enumeration). Use a small vendor/model → CPE mapping table you control (don't rely on fuzzy matching alone).
Pull valid CPE Match Criteria and CVE data from NVD v2 APIs:
CPE Match: .../rest/json/cpematch/2.0
.../rest/json/cpematch/2.0
CVE data: .../rest/json/cves/2.0 (NVD)
.../rest/json/cves/2.0
Reality check: some network-gear version strings don't map cleanly to NVD CPEs (different marketing vs. engineering names). Keep a manual override field for tough models.
Once you have CVEs for each CPE/version, enrich each CVE with:
EPSS (likelihood of exploitation)—query the FIRST EPSS API for the CVEs you found. High EPSS (e.g., ≥0.5) = higher urgency even if CVSS is moderate. (first.org, api.first.org)
CISA KEV (known exploited in the wild)—if present, escalate to “emergency” queue. (NVD flags KEV; you can also sync a KEV feed.) (NVD)
Vendor PSIRT advisories (often clearer than NVD for network gear, and include fixed versions/upgrade paths):
Cisco PSIRT openVuln API, with per-product advisories. (Cisco DevNet, Cisco)
Palo Alto Networks Security Advisory API (per product/version). (security.paloaltonetworks.com)
Fortinet PSIRT (advisory portal, JSON per advisory). (FortiGuard, FortiGuard)
(Juniper has advisories; public API options vary by product line.) (supportportal.juniper.net)
For each device/version, compute a patch priority per CVE and keep the top result per device:
priority_score = (CVSS_base or 0) × (1 + EPSS) × criticality_weight × exposure_weight × KEV_multiplier
criticality_weight: Core routing/DC edge/VPN gateways > distribution > access.
criticality_weight
exposure_weight: Internet-facing or partner-exposed > internal.
exposure_weight
KEV_multiplier: 3–5× bump if in KEV.
KEV_multiplier
If vendor PSIRT lists active exploitation or exploitable without auth, bump again.
Vendor advisories usually say “fixed in ≥ X.Y.Z”. Use that to build per-platform upgrade recommendations (not a CVE list). For each device family/version:
Target minimum safe train (e.g., “PAN-OS ≥ 10.2.9-h2”, “IOS-XE 17.9.5a”, “FortiOS 7.2.7”).
Bundle changes into maintenance windows per site/role.
Generate pre-checks/post-checks and back-out plans (config save, image staging, health checks).
Data flow
Discovery (NetDisco) → device facts table. (Welcome to Netdisco!)
Normalizer → standardize vendor/model/version; add role/site/owner.
CPE Resolver → map vendor/model/version → candidate CPEs (cache). (NVD)
Vuln Fetcher → NVD CVE API (per CPE/version, rate-limited & cached). (NVD)
Enricher → EPSS, KEV, PSIRT APIs. (api.first.org, NVD, Cisco DevNet, security.paloaltonetworks.com)
Scorer → compute priority_score + recommend fixed train.
priority_score
Planner → group by platform/site; produce change tickets & windows.
Monthly: ingest new advisories (NVD + PSIRT), recompute priorities, refresh upgrade plans per platform.
Quarterly: target a minimum safe train per platform; push everything below it up, even if no hot CVE—this reduces technical debt.
Emergency: if KEV or active exploitation appears (e.g., edge/VPN devices), fast-track within the next window (or immediately with an expedited CAB). Real-world example: widely exploited NetScaler bugs prompting accelerated deadlines. (TechRadar)
CPE mismatches → keep a curated mapping and allow manual overrides.
Vendor “fixed” versions not in NVD yet → trust vendor PSIRT first for upgrade target; use NVD for CVE detail. (Cisco DevNet, security.paloaltonetworks.com, FortiGuard)
Chasing CVSS alone → use EPSS + KEV to avoid busywork. (api.first.org, NVD)
Operational risk → always stage images, pre-check health (CPU/mem/BGP neighbor count, HA state), and have a back-out plan.
Was this article helpfu?
Thank you for voting
You are related to multiple companies. Please select the company you wish to login as.