You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
๐ If you ran them all on Juice Shop, you'd see 400+ raw findings
๐ง The hardest engineering question of DevSecOps is not "how do we scan?" โ it's "now what?" Lecture 10 answers it
๐ค Think: Lecture 9 introduced MTTR and vuln-age as program metrics. This lecture is the workflow that produces those numbers โ without it, you have data, not a program.
๐ Slide 2 โ ๐ฏ Learning Outcomes
#
๐ Outcome
1
โ Walk the vulnerability management lifecycle: Discovery โ Triage โ Remediation โ Reporting โ Improvement
2
โ Pick a severity score: when to use CVSS v4.0, when to use EPSS โ and why a single score is never enough
3
โ Import scanner outputs into DefectDojo and dedupe across tools
4
โ Apply an SLA matrix and compute the program metrics that matter (MTTD/MTTR/vuln-age/backlog trend)
5
โ Build the interview-ready 5-minute walkthrough of your DevSecOps program
Deduplicates across tools (same CVE found by Trivy and Grype = one finding)
Applies the SLA matrix
Tracks every finding's state through the lifecycle
Computes program metrics (MTTD, MTTR, vuln-age, backlog trend)
Exposes a JIRA-style API for tickets
# Lab 10 Task 1 starts here
git clone https://github.com/DefectDojo/django-DefectDojo
docker compose up -d
# UI at http://localhost:8080 (admin password printed by initializer)
๐ Slide 10 โ ๐ช The Importer Pattern
# Lab 10 uses this script to ingest every prior lab's report
curl -X POST "$DD_URL/api/v2/import-scan/" \
-H "Authorization: Token $DD_TOKEN" \
-F "scan_type=Trivy Scan" \
-F "engagement=$ENG_ID" \
-F "file=@labs/lab7/juice-shop-trivy.json"# Same shape for Semgrep, ZAP, Grype, Checkov, KICS, Conftest, ...
๐ช Every importer follows the same pattern:--scan_type + --file + engagement context
๐ง DefectDojo's killer feature is that deduplication is automatic โ the same CVE reported by Trivy and Grype becomes one finding with two pieces of evidence
๐ Slide 11 โ ๐งฎ Dedup, Annotated
graph LR
T[Trivy: CVE-2024-21626 in runc] --> Dedup[๐ DefectDojo dedup<br/>by CVE+component+service]
G[Grype: CVE-2024-21626 in runc] --> Dedup
K[Trivy K8s: CVE-2024-21626 cluster-wide] --> Dedup
Dedup --> One[1 finding<br/>severity=critical<br/>EPSS=0.84<br/>evidence: 3 tools]
style Dedup fill:#FF9800,color:#fff
style One fill:#4CAF50,color:#fff
Loading
๐ช Dedup keys (configurable in DefectDojo):
CVE ID
Vulnerability ID + affected component
File path + line (for SAST)
URL path + parameter (for DAST)
๐ช Why three tools finding the same CVE matters: โ confidence, โ noise. You triage the finding, not the tool output
๐ Slide 12 โ ๐ฉน Remediation States
๐ท๏ธ State
๐ฏ Meaning
๐ช When
Active
Open, in SLA window
Default for new findings
Verified
A human has confirmed it's a real issue
After triage
False Positive
Confirmed not exploitable
Suppress with reason
Risk Accepted
Real but accepted; MUST have expiry
Explicit risk acceptance
Mitigated
Fixed via code or config change
Verification re-scan passes
Inactive
Out-of-scope or duplicate
Cleanup
๐จ Risk Accepted with no expiry is the silent program killer โ DefectDojo enforces an expiry on every acceptance (configurable). Lab 10 Task 2 will show you how
๐ง In code review terms: "False Positive" needs a written justification โ the WHY that future you will read in a year
๐ Slide 13 โ ๐ The Metrics That Matter
graph TB
M[๐ Program metrics]
M --> MTTD[โฑ๏ธ MTTD<br/>Mean Time To Detect]
M --> MTTR[๐ฉน MTTR<br/>Mean Time To Remediate]
M --> Age[โ Vuln age<br/>distribution]
M --> BT[๐ Backlog trend]
M --> SLA[๐ฆ SLA compliance %]
style M fill:#FF9800,color:#fff
Loading
๐ Metric
๐งฎ Formula
๐ฏ What it answers
MTTD
avg(detected_time โ introduced_time)
How fast does our pipeline find issues?
MTTR
avg(closed_time โ detected_time)
How fast do we fix?
Vuln age
now โ first_seen, by finding
What's our debt distribution?
Backlog trend
open(t) โ open(tโฮ)
Are we keeping up?
SLA compliance
% closed within their severity SLA
Are we triaging by risk, or by panic?
๐ช DefectDojo computes all five out of the box. You don't write SQL; you read dashboards
๐ง Anti-metrics you'll be tempted to measure (don't): scans run, alerts fired, tools deployed. These reward activity, not outcomes (Lecture 9 warned about this)
๐ Slide 14 โ ๐ Governance Reporting
๐ช By Week 10 you'll need to produce a governance report that an exec or auditor could read
Required sections (Lab 10 Task 2):
๐ Section
๐ฏ Contents
Executive summary
3-sentence state of the program
Findings by severity
Open Critical/High/Medium/Low counts
Findings by source
Which scanner produced what; coverage gaps
MTTR + age distribution
The 5 metrics above
SLA compliance
% within SLA; outstanding overdue findings
Risk-accepted items
Listed with expiry dates; due for re-review
Next-quarter goals
One concrete SAMM ladder step (from Lecture 9)
๐ช A 1-page exec summary + 5-page detail = the standard. Don't write 30 pages; no one will read them. The exec summary is what gets cited in compliance audits
๐ Slide 15 โ ๐ค The 5-Minute Interview Walkthrough
๐ฏ Lab 10 Bonus: produce a 5-minute walkthrough script as if you were giving an SRE/DevSecOps interview at a real org
๐ช The canonical structure:
1. Context (30s) โ "I built a DevSecOps program on OWASP Juice Shop..."
2. Layers (90s) โ Show the diagram: pre-commit, CI, runtime
3. Findings (60s) โ "Here are the X criticals I closed; here's the one I risk-accepted, here's why"
4. Metrics (60s) โ "MTTR 4 days; vuln-age median 7 days; SLA compliance 92%"
5. Next (30s) โ "If I had another quarter, I'd ship reproducible builds + SLSA L3"
6. Q&A (30s budget) โ Anticipate two questions
๐ง This is the deliverable that gets you hired. Many DevSecOps interviews boil down to "talk me through your last program." Lab 10 produces exactly this script
Discovery is the easy part. Triage + Remediation + Reporting + Improvement are the program.
2
CVSS = severity. EPSS = likelihood. Use both โ neither alone tells the full story.
3
The SLA matrix is the program. Without it, every finding is "someday."
4
DefectDojo dedupes across tools; you triage the finding, not the tool output.
5
"Risk Accepted" with no expiry is the silent program killer. Every accept needs a re-review date.
6
The 5-minute walkthrough script (Lab 10 Bonus) is your interview deliverable. Make it real.
๐ฌ "Vulnerability management is the discipline of knowing what you have, knowing what's wrong with it, and proving to someone else you fixed it on time." โ Derek Fisher, Application Security Program Handbook (2023). The end of this course; the start of your career.