E09: Vulnerability Management¶
Goal: Findings from all sources normalised, deduplicated, attributed, prioritised, tracked to verified closure.
F01: Ingestion and normalisation¶
E09-F01-S01: Platform-mediated forwarding to DefectDojo · M · Phase 5¶
- Story: As the platform, I want verified scan outputs forwarded to DefectDojo with the platform's credential, so that DD's parsers normalise them and no repo holds a DD key.
- Technical:
import-scan/reimport-scanper (app, repo, tool) test. Engagement namingaap-<scope>.close_old_findingssemantics preserved per scope. - Depends on: DD deployed and hardened (R-08). E08-F01-S01.
- AC: A re-import of the same scope does not duplicate DD findings. The DD key is in Key Vault, scoped to an API-only DD user with product-type-limited permissions.
- Security: Least-privilege DD user. TLS to DD on a private endpoint.
E09-F01-S02: Finding projection with fingerprints · M · Phase 5¶
- Story: As an engineer, I want one finding per real issue across runs and sources, so that I'm not flooded with duplicates.
- Technical: Pull from DD (API, incremental by
updated), GHAS (E06-F02-S02), DT (via DD import or direct), cloud (E15). Compute fingerprints per data model section 4. Alias resolution for vuln IDs. - AC: 10 consecutive identical runs → 0 new findings (PS-6). A finding moving file/line (same GHAS alert) stays one finding. Upgrade to a still-vulnerable version stays one finding.
- Tests: Fingerprint golden tests per type. Alias resolution tests.
F02: Lifecycle¶
E09-F02-S01: Finding state machine and closure by evidence · M · Phase 5¶
- AC: Transitions per platform architecture section 5.3.
closedrequiresclosure_evidence_id(DB-enforced, test T4). A regression of the same fingerprint →reopened. All transitions recorded infinding_events. - Tests: State machine property tests (no path to
closedwithout evidence).
E09-F02-S02: False-positive workflow with second reviewer · M · Phase 5¶
- AC: P1/P2 FP requires a confirmer ≠ the marker (an AppSec engineer). FP rate per team computed. A quarterly sample list is generated.
E09-F02-S03: SLA clocks, breach detection and escalation · M · Phase 5¶
- AC: SLA from the risk-model version at detection. Breach flips
sla_breachedand triggers the escalation chain (governance section 5). Exception expiry restarts the clock at half the SLA.
F03: Suppression tracking¶
E09-F03-S01: Track tool-level suppressions (unmanaged) · S · Phase 5¶
- AC: DD risk-accepted, GHAS dismissed (won't fix / false positive) and Checkov skips are ingested as suppressions. Without a platform exception they do not change platform status. "Unmanaged suppressions" metric per team.