Tech Analysis · Nov 12, 2026 · 10 min read

EPSS Economics: Prioritizing Patches for Platform ROI

Tech Analysis

How the Exploit Prediction Scoring System changes security spend decisions for SaaS and data platform teams. Concrete API integration, decision workflow, TCO trade-offs, and Python example showing whe

EPSS Economics: Prioritizing Patches for Platform ROI

The Economic Burden of Reactive Vulnerability Management

Platform operators running data marketplaces or SaaS products face hundreds of new vulnerabilities each month. Each one triggers a decision: patch immediately, schedule for next sprint, or accept the risk. Traditional approaches relying primarily on CVSS base scores lead to inefficient allocation because severity does not equal likelihood of exploitation.

Engineering time is the dominant cost. A typical patch in a microservices architecture requires updating a dependency, running regression suites across staging and production, updating documentation, and monitoring for breakage. When multiplied across a catalog of 50–200 dependencies common in modern Node.js or Python data platforms, the cumulative distraction from feature work becomes material. Customers in data markets are especially sensitive because a single exploited vulnerability can expose aggregated datasets, triggering churn, regulatory scrutiny, and loss of trust that directly hits recurring revenue.

The incentive misalignment is clear: security teams are measured on “vulnerabilities remediated” while product teams are measured on velocity. Without an economic filter, platforms over-invest in low-probability items and under-invest in the tail risks that actually produce breaches. The Exploit Prediction Scoring System (EPSS) from FIRST.org was created to supply exactly that missing probability dimension.

How EPSS Generates Exploitation Probabilities

EPSS is a logistic regression model updated daily that outputs two numbers for each CVE: a probability (0–1) that the vulnerability will be exploited in the wild in the next 30 days, and a percentile showing how that CVE ranks against all others on the same day. Version 2 of the model, released in 2022 and still current in 2024, incorporates 15 features including CVSS vector components, vendor, age of the vulnerability, presence in exploit databases, and social media chatter volume.

Unlike static CVSS scores that never change, EPSS probabilities decay or spike as new information arrives. A vulnerability with CVSS 9.8 may show EPSS probability of 0.001 (0.1 %) on day one and jump to 0.15 (15 %) once reliable exploit code appears on GitHub. This dynamic signal lets platform teams adjust effort in near real time rather than following a fixed severity matrix.

For data platforms handling regulated information, the economic value appears in two places: reduced mean time to remediation (MTTR) on the vulnerabilities that matter, and avoided engineering cycles on the long tail of unlikely CVEs. Public scans of the National Vulnerability Database show that roughly 5–7 % of CVEs ever see exploitation; EPSS lets teams concentrate resources inside that narrow band.

EPSS Versus CVSS and CISA KEV: Concrete Trade-offs

CVSS tells you potential impact assuming exploitation. EPSS tells you the likelihood that exploitation will actually occur. CISA’s Known Exploited Vulnerabilities (KEV) catalog is a binary signal: this CVE is already being used by attackers. The three signals are complementary but economically different.

  • CVSS-only approach: Leads to patching everything above 7.0. Typical platforms following this rule spend 60–70 % of their patching budget on vulnerabilities that never appear in real attacks.
  • KEV-driven approach: High precision but low coverage. Only about 1,000 vulnerabilities have made the KEV list since its inception. Many exploited vulnerabilities never receive a KEV entry before causing damage.
  • EPSS-driven approach: Offers tunable thresholds. A common cutoff used by mature security programs is EPSS ≥ 0.1 (top 10 % percentile). This typically captures 80–90 % of eventual exploits while requiring patching of only 10–15 % of total CVEs.

The trade-off is model risk. EPSS can produce false negatives on sophisticated supply-chain attacks that have not yet generated public signals. It also updates daily, requiring platforms to ingest fresh data rather than rely on quarterly scans. For small teams this overhead must be automated or it defeats the economic purpose.

Building an EPSS Lookup Pipeline: Commands and Tools

A minimal viable pipeline uses the public FIRST API, jq for parsing, and a simple decision script. No paid tools are required.

curl -s "https://api.first.org/data/v1/epss?cve=CVE-2021-44228" | jq '.data[] | {cve, date, epss, percentile}'

This returns the current probability and percentile. Production platforms wrap this in a daily GitHub Actions workflow that scans their SBOM (generated by Syft or Grype 0.82.0) and annotates open issues in Jira or GitHub.

Concrete workflow most small SaaS teams can copy:

  1. Run Trivy or Grype nightly against container images and code repositories.
  2. Extract CVE list.
  3. Batch query the EPSS API (it accepts multiple CVEs).
  4. Tag issues with EPSS probability and percentile.
  5. Route tickets with EPSS > 0.05 to the current sprint; lower scores go to a monthly “risk acceptance” review.

This workflow typically cuts the number of urgent tickets by 65–75 % compared with CVSS 7+ rules, freeing engineering time for platform features that generate revenue.

Worked Example: Decision on a Real-World CVE

Consider a data exchange platform built on Node.js 18 and Express that surfaces a dependency vulnerable to CVE-2024-21512 (a hypothetical moderate-severity prototype pollution issue in a popular library; actual EPSS behavior follows the same pattern seen with similar 2023–2024 CVEs).

On the day the CVE is published, EPSS probability is 0.002 (0.2 %) — below most action thresholds. The platform team logs the risk, adds a WAF rule to block obvious exploit patterns, and continues feature work. Two weeks later the probability jumps to 0.22 (22nd percentile) after exploit code appears in a ransomware kit. The same workflow now automatically creates a high-priority ticket, the patch is merged within 48 hours, and deployment occurs during a scheduled maintenance window.

Economic calculation for this single case: patching immediately on publication would have required 18 engineer-hours across backend, QA, and DevOps at a blended $140 hourly rate, totaling $2,520. Delaying until the EPSS signal increased avoided that cost while the risk remained low. Across 120 similar vulnerabilities per year, the platform saves low six figures in avoided engineering cycles that can be redirected to core data marketplace features.

Python Implementation for Automated EPSS Decisions

Here is production-ready code that small teams use inside CI/CD or daily security bots. It queries the EPSS API, applies business-specific thresholds, and outputs both human-readable advice and machine-readable risk scores.

import requests
import sys
from typing import Dict

def fetch_epss(cves: list[str]) -> Dict:
    url = "https://api.first.org/data/v1/epss"
    params = {"cve": ",".join(cves)}
    resp = requests.get(url, params=params, timeout=10)
    resp.raise_for_status()
    return resp.json()["data"]

def decide_patch(epss_record: Dict, high_threshold: float = 0.1, 
                 medium_threshold: float = 0.02) -> str:
    prob = float(epss_record.get("epss", 0))
    if prob >= high_threshold:
        return "PATCH_NOW"
    if prob >= medium_threshold:
        return "SCHEDULE_NEXT_SPRINT"
    return "MONITOR_ONLY"

if __name__ == "__main__":
    cve_list = sys.argv[1:] or ["CVE-2021-44228"]
    records = fetch_epss(cve_list)
    for record in records:
        decision = decide_patch(record)
        print(f"{record['cve']}: EPSS={record['epss']} "
              f"Percentile={record.get('percentile', 'N/A')} → {decision}")

Teams pin requests==2.32.3 and run this inside a Docker image based on python:3.11-slim. The script can be called from a GitHub Action after a Trivy scan, automatically labeling pull requests or creating Jira tickets via API. Adding a simple SQLite cache of the last 7 days of scores prevents hammering the public endpoint.

Integration Patterns for Platform CI/CD and Ticketing

GitHub Advanced Security customers can combine EPSS with Dependabot alerts using custom security rules. For open-source stacks, the following pattern works reliably:

  • Generate SBOM with Syft 1.5.0: syft packages . --output cyclonedx-json > sbom.json
  • Extract CVEs with Grype 0.82.0: grype sbom:sbom.json --output json
  • Pass CVE list to the Python script above.
  • Use GitHub CLI to apply labels: gh issue create --label "epss-high" --title "..."

For platforms selling data access APIs, add a step that updates a risk scorecard shown to enterprise customers. Transparency about using EPSS-based prioritization has become a sales advantage; buyers in regulated verticals reward vendors that demonstrate evidence-based security spending rather than checkbox compliance.

Quantifying Expected Loss Reduction

A basic model used by platform CFOs and security leads is:

Expected annual loss = Σ (EPSS probability × Asset value × Exposure factor)

For a data marketplace with $4 M annual revenue, a breach exposing customer datasets might produce 35 % churn plus regulatory fines. If the platform has 40 high-value CVEs with average EPSS 0.08, the raw expected loss before controls is material. After applying EPSS-driven patching that removes the top 15 % of those CVEs, the expected loss typically drops 60–75 % while only consuming 20 % of the previous patching budget.

The incentive effect is powerful. When security spend is tied to measurable loss reduction instead of arbitrary coverage metrics, founders and engineering leads become willing to fund the work. Platforms that publish their EPSS acceptance thresholds in security questionnaires win more enterprise deals than those that only list “we patch critical vulnerabilities within 30 days.”

Limitations and Situations Where EPSS Is Less Useful

EPSS performs best on vulnerabilities in widely deployed software with public exploit code. It is less predictive for novel attacks against proprietary data ingestion pipelines or business logic flaws common in data marketplaces. Zero-day threats in custom code have no EPSS score at all.

Model lag is another constraint. The daily update cycle means a brand-new exploit appearing on underground forums may take 24–48 hours to influence scores. Platforms with valuable data therefore layer EPSS with runtime protections (WAF rules, anomaly detection in API gateways) and strict network segmentation.

Small startups with fewer than 10 engineers often adopt a simpler rule: patch everything in the top 5 % EPSS percentile immediately and review the rest monthly. Larger data platforms run more granular models that weight EPSS by the specific asset’s data sensitivity. Both approaches beat pure CVSS but require different levels of process maturity.

Aligning Incentives Across Product, Security, and Business Teams

Security investment only happens when all stakeholders see economic upside. By making probability visible, EPSS turns abstract risk discussions into concrete trade-off conversations. Product managers can see that delaying a feature by two sprints to address a 0.3 probability vulnerability costs $45 k in opportunity cost. Security engineers can justify their existence with numbers instead of fear.

In data markets where participants are both suppliers and consumers of information, platforms that demonstrate disciplined economic security practices command higher take rates and lower churn. Buyers pay premiums for platforms that can prove they focus effort where real attackers focus attention.

The Python example above, the daily API workflow, and the threshold decision framework together form a complete lightweight system that any platform team of 5–50 engineers can deploy within a week. The economic return appears in both reduced wasted effort and measurably lower breach probability, producing a rare alignment between security posture and business margin.

Extending the Model: Combining EPSS with Business Context

Raw EPSS probability should be multiplied by an internal “asset criticality” multiplier. A vulnerability in an authentication microservice handling OAuth tokens for a data marketplace receives a 5× multiplier; the same score on an internal analytics dashboard receives 0.2×. The resulting risk score drives automatic routing: scores above 0.5 go to an on-call rotation, scores between 0.1 and 0.5 create 72-hour SLAs, and everything else enters a quarterly risk review tied to board reporting.

Some platforms feed EPSS-augmented risk scores into their FAIR (Factor Analysis of Information Risk) quantification models to forecast dollar impact for cyber insurance renewal conversations. Insurers increasingly reward organizations that can show evidence-based prioritization rather than blanket patching policies.

The combination of public EPSS data, lightweight automation, and explicit economic framing turns platform security from a cost center into a predictable business process. Teams that adopt it report both lower security overhead as a percentage of engineering time and higher customer confidence scores in security reviews. The code and workflows presented here provide the practical starting point to capture that advantage.

Keep reading

Related Research