8.1 KiB
8.1 KiB
EPSS Risk Band Mapping
Module
RiskEngine
Status
VERIFIED
Description
EPSS provider with bundle loading, fetching, and risk band mapping. Contains two providers: EpssProvider using EPSS probability directly as risk score, and CvssKevEpssProvider combining CVSS + KEV + EPSS with percentile-based bonus thresholds (99th >= +0.10, 90th >= +0.05, 50th >= +0.02).
Implementation Details
- EPSS Provider:
src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Core/Providers/EpssProvider.cs(124 lines) -- two providers: (1)EpssProvideruses EPSS probability score directly (clamped 0-1, rounded to 6 digits), (2)CvssKevEpssProvidercombines CVSS + KEV + EPSS with percentile-based bonuses. Parallel signal fetching viaTask.WhenAll. - EPSS Bundle Loader:
src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Core/Providers/EpssBundleLoader.cs(224 lines) -- supports loading from.tar.gzbundle archives, extracted directories, snapshot files, and streams with auto-detection of gzip vs plain JSON. BuildsInMemoryEpssSourcewith case-insensitive dictionary. - EPSS Fetcher:
src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Core/Providers/EpssFetcher.cs(223 lines) -- fetches fromhttps://api.first.org/data/v1/epsswith pagination, deduplication, deterministic ordering, gzip compression, SHA-256 hashing. IncludesGetLatestModelDateAsyncfor freshness. - EPSS Sources Interface:
src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Core/Providers/IEpssSources.cs--EpssDatarecord (Score, Percentile, ModelVersion),IEpssSourceinterface,NullEpssSource,InMemoryEpssSource. - In-Memory Result Store:
src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Infrastructure/Stores/InMemoryRiskScoreResultStore.cs--ConcurrentDictionary+ConcurrentQueuefor thread-safe, order-preserving storage.
E2E Test Plan
- Load an EPSS bundle and query score for a known CVE; verify returned probability matches bundle data
- Verify EPSS score directly returned as risk score (clamped 0-1)
- Verify unknown CVE returns 0
- Verify 99th percentile EPSS bonus (+0.10) with combined provider
- Verify 90th percentile EPSS bonus (+0.05)
- Verify 50th percentile EPSS bonus (+0.02)
- Verify below 50th percentile = no bonus
- Verify bundle loading from gzip and plain JSON streams
- Verify case-insensitive CVE lookup
Verification
- Verified: 2026-02-10
- Method: Tier 2a live API replay + Tier 2d regression verification
- Build: Passes (0 errors, 0 warnings for Core/Infrastructure)
- Tests: RiskEngine suite re-run in Release with 94/94 passing, including added API/provider regression coverage (
Simulations_Epss_UsesInlineSignals,Simulations_CvssKevEpss_UsesInlineSignals, and inline EPSS signal provider tests). - Tier 2 Evidence:
docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-002/tier2-api-check.json
Recheck (Run-003)
- Verified: 2026-02-10
- Method: Tier 2a API replay via in-process WebApplicationFactory + full suite replay.
- Tests: PASS (
src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94). - Tier 2 Evidence:
docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-003/tier2-api-check.json - Outcome: EPSS and CVSS+KEV+EPSS API simulation paths remain reachable and deterministic.
Recheck (Run-004)
- Verified: 2026-02-10
- Method: Tier 2a API replay via in-process WebApplicationFactory + full suite replay.
- Tests: PASS (
src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94). - Tier 2 Evidence:
docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-004/tier2-api-check.json - Outcome: EPSS and CVSS+KEV+EPSS API simulation paths remain reachable and deterministic.
Recheck (Run-005)
- Verified: 2026-02-10
- Method: Tier 2a API replay validated via RiskEngine integration suite.
- Tests: PASS (
src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94). - Tier 2 Evidence:
docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-005/tier2-api-check.json - Outcome: EPSS risk band mapping behavior remains healthy.
Recheck (Run-006)
- Verified: 2026-02-10
- Method: Tier 2a API replay + deterministic integration suite replay.
- Tests: PASS (src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94).
- Tier 2 Evidence: docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-006/tier2-api-check.json
- Outcome: Checked RiskEngine behavior remains healthy in continued replay.
Recheck (Run-007)
- Verified: 2026-02-10
- Method: Tier 2a API replay + deterministic integration suite replay.
- Tests: PASS (src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94).
- Tier 2 Evidence: docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-007/tier2-api-check.json
- Outcome: Checked RiskEngine behavior remains healthy in continued replay.
Recheck (Run-008)
- Verified: 2026-02-10
- Method: Tier 2a API replay + deterministic integration suite replay.
- Tests: PASS (src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94).
- Tier 2 Evidence: docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-008/tier2-api-check.json
- Outcome: Checked RiskEngine behavior remains healthy in continued replay.
Recheck (Run-009)
- Verified: 2026-02-10
- Method: Tier 2a API replay + deterministic integration suite replay.
- Tests: PASS (src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94).
- Tier 2 Evidence: docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-009/tier2-api-check.json
- Outcome: Checked RiskEngine behavior remains healthy in continued replay.
Recheck (Run-010)
- Verified: 2026-02-10
- Method: Tier 2d deterministic integration replay.
- Tests: PASS (src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94).
- Tier 2 Evidence: docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-010/tier2-integration-check.json
- Outcome: Checked risk engine behavior remains healthy in continued replay.
Recheck (Run-011)
- Verified: 2026-02-10
- Method: Tier 2d deterministic integration replay.
- Tests: PASS (src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94).
- Tier 2 Evidence: docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-011/tier2-integration-check.json
- Outcome: Checked risk engine behavior remains healthy in continued replay.
Recheck (Run-012)
- Verified: 2026-02-10
- Method: Tier 2a API replay + deterministic integration suite replay.
- Tests: PASS (src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94).
- Tier 2 Evidence: docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-012/tier2-api-check.json
- Outcome: Checked risk engine behavior remains healthy in continued replay.
Recheck (Run-013)
- Verified: 2026-02-10
- Method: Tier 2a live HTTPS API verification with fresh request/response capture.
- Tests: PASS (src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94).
- Tier 2 Evidence: docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-013/tier2-api-check.json
- Captured Requests:
/risk-scores/simulationsfor EPSS direct score (0.77), CVSS+KEV+EPSS percentile bonus (0.55), and missing-signal fallback (0). - Outcome: EPSS mapping behavior revalidated from live API transactions.
Recheck (Run-014)
- Verified: 2026-02-11
- Method: Tier 2a live HTTPS API verification with fresh request/response capture.
- Tests: PASS (src/RiskEngine/StellaOps.RiskEngine/StellaOps.RiskEngine.Tests: 94/94).
- Tier 2 Evidence: docs/qa/feature-checks/runs/riskengine/epss-risk-band-mapping/run-014/tier2-api-check.json
- Captured Requests:
/risk-scores/simulationsfor EPSS direct score (0.77), CVSS+KEV+EPSS percentile bonus (0.55), and missing-signal fallback (0). - Outcome: EPSS mapping checked behavior remains stable with fresh live API replay.