rtexit-method 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -5
- package/packaged-assets/.agents/skills/rt-active-recon/SKILL.md +767 -0
- package/packaged-assets/.agents/skills/rt-active-recon/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-agent-breaker/SKILL.md +65 -0
- package/packaged-assets/.agents/skills/rt-agent-breaker/customize.toml +76 -0
- package/packaged-assets/.agents/skills/rt-agent-commander/SKILL.md +63 -0
- package/packaged-assets/.agents/skills/rt-agent-commander/customize.toml +67 -0
- package/packaged-assets/.agents/skills/rt-agent-ghost/SKILL.md +65 -0
- package/packaged-assets/.agents/skills/rt-agent-ghost/customize.toml +77 -0
- package/packaged-assets/.agents/skills/rt-agent-navigator/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-agent-navigator/customize.toml +61 -0
- package/packaged-assets/.agents/skills/rt-agent-phantom/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-agent-phantom/customize.toml +62 -0
- package/packaged-assets/.agents/skills/rt-agent-scout/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-agent-scout/customize.toml +61 -0
- package/packaged-assets/.agents/skills/rt-agent-scribe/SKILL.md +65 -0
- package/packaged-assets/.agents/skills/rt-agent-scribe/customize.toml +77 -0
- package/packaged-assets/.agents/skills/rt-attack-chain-builder/SKILL.md +476 -0
- package/packaged-assets/.agents/skills/rt-attack-chain-builder/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-attack-surface-map/SKILL.md +1209 -0
- package/packaged-assets/.agents/skills/rt-attack-surface-map/template.md +62 -0
- package/packaged-assets/.agents/skills/rt-autodoc/SKILL.md +258 -0
- package/packaged-assets/.agents/skills/rt-c2-operations/SKILL.md +1072 -0
- package/packaged-assets/.agents/skills/rt-c2-operations/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-compliance-mapper/SKILL.md +773 -0
- package/packaged-assets/.agents/skills/rt-create-sead/SKILL.md +74 -0
- package/packaged-assets/.agents/skills/rt-create-sead/template.md +89 -0
- package/packaged-assets/.agents/skills/rt-create-sead/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-credential-access/SKILL.md +756 -0
- package/packaged-assets/.agents/skills/rt-credential-hunt/SKILL.md +856 -0
- package/packaged-assets/.agents/skills/rt-credential-hunt/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-cvss-calculator/SKILL.md +542 -0
- package/packaged-assets/.agents/skills/rt-cvss-calculator/cvss4-matrix.csv +20 -0
- package/packaged-assets/.agents/skills/rt-data-exfiltration/SKILL.md +784 -0
- package/packaged-assets/.agents/skills/rt-defense-evasion/SKILL.md +987 -0
- package/packaged-assets/.agents/skills/rt-evidence-chain/SKILL.md +712 -0
- package/packaged-assets/.agents/skills/rt-evidence-chain/template.md +31 -0
- package/packaged-assets/.agents/skills/rt-executive-report/SKILL.md +718 -0
- package/packaged-assets/.agents/skills/rt-executive-report/template.md +38 -0
- package/packaged-assets/.agents/skills/rt-executive-report/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-active-directory/SKILL.md +1078 -0
- package/packaged-assets/.agents/skills/rt-exploit-active-directory/ad-checklist.csv +12 -0
- package/packaged-assets/.agents/skills/rt-exploit-active-directory/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-android/SKILL.md +1329 -0
- package/packaged-assets/.agents/skills/rt-exploit-android/masvs-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-exploit-android/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-api/SKILL.md +1547 -0
- package/packaged-assets/.agents/skills/rt-exploit-api/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-auth/SKILL.md +1949 -0
- package/packaged-assets/.agents/skills/rt-exploit-auth/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-bec/SKILL.md +69 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/SKILL.md +865 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-azure/SKILL.md +1258 -0
- package/packaged-assets/.agents/skills/rt-exploit-cloud-gcp/SKILL.md +981 -0
- package/packaged-assets/.agents/skills/rt-exploit-containers/SKILL.md +55 -0
- package/packaged-assets/.agents/skills/rt-exploit-databases/SKILL.md +1374 -0
- package/packaged-assets/.agents/skills/rt-exploit-desktop-mac/SKILL.md +834 -0
- package/packaged-assets/.agents/skills/rt-exploit-desktop-win/SKILL.md +903 -0
- package/packaged-assets/.agents/skills/rt-exploit-desktop-win/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-dotnet/SKILL.md +945 -0
- package/packaged-assets/.agents/skills/rt-exploit-elasticsearch/SKILL.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-electron/SKILL.md +1023 -0
- package/packaged-assets/.agents/skills/rt-exploit-electron/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-file-upload/SKILL.md +1576 -0
- package/packaged-assets/.agents/skills/rt-exploit-file-upload/payloads/README.md +4 -0
- package/packaged-assets/.agents/skills/rt-exploit-file-upload/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-firebase/SKILL.md +54 -0
- package/packaged-assets/.agents/skills/rt-exploit-frameworks/SKILL.md +967 -0
- package/packaged-assets/.agents/skills/rt-exploit-idor/SKILL.md +1693 -0
- package/packaged-assets/.agents/skills/rt-exploit-idor/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-injection/SKILL.md +1860 -0
- package/packaged-assets/.agents/skills/rt-exploit-injection/payloads/sqlmap-tampers.txt +22 -0
- package/packaged-assets/.agents/skills/rt-exploit-injection/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-ios/SKILL.md +1214 -0
- package/packaged-assets/.agents/skills/rt-exploit-ios/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-iot/SKILL.md +91 -0
- package/packaged-assets/.agents/skills/rt-exploit-iot/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-java/SKILL.md +1009 -0
- package/packaged-assets/.agents/skills/rt-exploit-jwt/SKILL.md +1327 -0
- package/packaged-assets/.agents/skills/rt-exploit-jwt/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-mongodb/SKILL.md +67 -0
- package/packaged-assets/.agents/skills/rt-exploit-mssql/SKILL.md +52 -0
- package/packaged-assets/.agents/skills/rt-exploit-mysql/SKILL.md +53 -0
- package/packaged-assets/.agents/skills/rt-exploit-network/SKILL.md +118 -0
- package/packaged-assets/.agents/skills/rt-exploit-network/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-nodejs/SKILL.md +852 -0
- package/packaged-assets/.agents/skills/rt-exploit-osticket/SKILL.md +63 -0
- package/packaged-assets/.agents/skills/rt-exploit-phishing/SKILL.md +173 -0
- package/packaged-assets/.agents/skills/rt-exploit-phishing/templates/README.md +4 -0
- package/packaged-assets/.agents/skills/rt-exploit-phishing/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-php/SKILL.md +1119 -0
- package/packaged-assets/.agents/skills/rt-exploit-physical/SKILL.md +63 -0
- package/packaged-assets/.agents/skills/rt-exploit-physical/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-postgresql/SKILL.md +67 -0
- package/packaged-assets/.agents/skills/rt-exploit-python/SKILL.md +986 -0
- package/packaged-assets/.agents/skills/rt-exploit-redis/SKILL.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-ruby/SKILL.md +61 -0
- package/packaged-assets/.agents/skills/rt-exploit-scada/SKILL.md +1091 -0
- package/packaged-assets/.agents/skills/rt-exploit-ssrf/SKILL.md +1528 -0
- package/packaged-assets/.agents/skills/rt-exploit-ssrf/payloads.txt +23 -0
- package/packaged-assets/.agents/skills/rt-exploit-ssrf/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-vishing/SKILL.md +121 -0
- package/packaged-assets/.agents/skills/rt-exploit-vishing/scripts.md +4 -0
- package/packaged-assets/.agents/skills/rt-exploit-web/SKILL.md +1902 -0
- package/packaged-assets/.agents/skills/rt-exploit-web/owasp-checklist.csv +14 -0
- package/packaged-assets/.agents/skills/rt-exploit-web/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-wireless/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-exploit-wordpress/SKILL.md +1565 -0
- package/packaged-assets/.agents/skills/rt-exploit-wordpress/cves.csv +7 -0
- package/packaged-assets/.agents/skills/rt-exploit-wordpress/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-exploit-xss/SKILL.md +1526 -0
- package/packaged-assets/.agents/skills/rt-exploit-xss/payloads.txt +18 -0
- package/packaged-assets/.agents/skills/rt-exploit-xss/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-finding-document/SKILL.md +687 -0
- package/packaged-assets/.agents/skills/rt-finding-document/template.md +71 -0
- package/packaged-assets/.agents/skills/rt-finding-document/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-finding-tracker/SKILL.md +216 -0
- package/packaged-assets/.agents/skills/rt-finding-tracker/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-help/SKILL.md +292 -0
- package/packaged-assets/.agents/skills/rt-help/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-js-analysis/SKILL.md +639 -0
- package/packaged-assets/.agents/skills/rt-js-analysis/patterns.txt +27 -0
- package/packaged-assets/.agents/skills/rt-js-analysis/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-kill-chain-map/SKILL.md +393 -0
- package/packaged-assets/.agents/skills/rt-lateral-movement/SKILL.md +1032 -0
- package/packaged-assets/.agents/skills/rt-lateral-movement/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-methodology-selector/SKILL.md +69 -0
- package/packaged-assets/.agents/skills/rt-methodology-selector/frameworks.csv +10 -0
- package/packaged-assets/.agents/skills/rt-methodology-selector/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-mitre-map/SKILL.md +668 -0
- package/packaged-assets/.agents/skills/rt-mitre-map/tactics.csv +16 -0
- package/packaged-assets/.agents/skills/rt-mitre-map/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-osint/SKILL.md +775 -0
- package/packaged-assets/.agents/skills/rt-osint/osint-sources.csv +12 -0
- package/packaged-assets/.agents/skills/rt-osint/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-party-mode/SKILL.md +249 -0
- package/packaged-assets/.agents/skills/rt-party-mode/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-persistence/SKILL.md +1146 -0
- package/packaged-assets/.agents/skills/rt-persistence/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-poc-writer/SKILL.md +640 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/SKILL.md +998 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/linux-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/windows-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-post-exploitation/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/SKILL.md +1027 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/linux-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/win-checklist.csv +10 -0
- package/packaged-assets/.agents/skills/rt-privilege-escalation/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-remediation-roadmap/SKILL.md +665 -0
- package/packaged-assets/.agents/skills/rt-remediation-roadmap/template.md +28 -0
- package/packaged-assets/.agents/skills/rt-risk-matrix/SKILL.md +232 -0
- package/packaged-assets/.agents/skills/rt-rules-of-engagement/SKILL.md +62 -0
- package/packaged-assets/.agents/skills/rt-rules-of-engagement/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-scenario-c001/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-c002/SKILL.md +69 -0
- package/packaged-assets/.agents/skills/rt-scenario-c003/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-c004/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-c005/SKILL.md +72 -0
- package/packaged-assets/.agents/skills/rt-scenario-d001/SKILL.md +378 -0
- package/packaged-assets/.agents/skills/rt-scenario-d002/SKILL.md +392 -0
- package/packaged-assets/.agents/skills/rt-scenario-d003/SKILL.md +522 -0
- package/packaged-assets/.agents/skills/rt-scenario-d004/SKILL.md +373 -0
- package/packaged-assets/.agents/skills/rt-scenario-d005/SKILL.md +458 -0
- package/packaged-assets/.agents/skills/rt-scenario-library/SKILL.md +292 -0
- package/packaged-assets/.agents/skills/rt-scenario-library/scenarios.csv +32 -0
- package/packaged-assets/.agents/skills/rt-scenario-m001/SKILL.md +796 -0
- package/packaged-assets/.agents/skills/rt-scenario-m002/SKILL.md +723 -0
- package/packaged-assets/.agents/skills/rt-scenario-m003/SKILL.md +463 -0
- package/packaged-assets/.agents/skills/rt-scenario-m004/SKILL.md +449 -0
- package/packaged-assets/.agents/skills/rt-scenario-m005/SKILL.md +505 -0
- package/packaged-assets/.agents/skills/rt-scenario-n001/SKILL.md +573 -0
- package/packaged-assets/.agents/skills/rt-scenario-n002/SKILL.md +112 -0
- package/packaged-assets/.agents/skills/rt-scenario-n003/SKILL.md +100 -0
- package/packaged-assets/.agents/skills/rt-scenario-n004/SKILL.md +90 -0
- package/packaged-assets/.agents/skills/rt-scenario-n005/SKILL.md +71 -0
- package/packaged-assets/.agents/skills/rt-scenario-w001/SKILL.md +635 -0
- package/packaged-assets/.agents/skills/rt-scenario-w002/SKILL.md +612 -0
- package/packaged-assets/.agents/skills/rt-scenario-w003/SKILL.md +449 -0
- package/packaged-assets/.agents/skills/rt-scenario-w004/SKILL.md +648 -0
- package/packaged-assets/.agents/skills/rt-scenario-w005/SKILL.md +479 -0
- package/packaged-assets/.agents/skills/rt-scenario-w006/SKILL.md +443 -0
- package/packaged-assets/.agents/skills/rt-scenario-w007/SKILL.md +494 -0
- package/packaged-assets/.agents/skills/rt-scenario-w008/SKILL.md +576 -0
- package/packaged-assets/.agents/skills/rt-scenario-w009/SKILL.md +518 -0
- package/packaged-assets/.agents/skills/rt-scenario-w010/SKILL.md +574 -0
- package/packaged-assets/.agents/skills/rt-scope-definition/SKILL.md +79 -0
- package/packaged-assets/.agents/skills/rt-scope-definition/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-shodan-recon/SKILL.md +880 -0
- package/packaged-assets/.agents/skills/rt-status/SKILL.md +64 -0
- package/packaged-assets/.agents/skills/rt-subdomain-enum/SKILL.md +906 -0
- package/packaged-assets/.agents/skills/rt-subdomain-enum/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-technical-report/SKILL.md +710 -0
- package/packaged-assets/.agents/skills/rt-technical-report/template.md +41 -0
- package/packaged-assets/.agents/skills/rt-technical-report/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-threat-model/SKILL.md +59 -0
- package/packaged-assets/.agents/skills/rt-threat-model/template.md +32 -0
- package/packaged-assets/.agents/skills/rt-threat-model/workflow.md +68 -0
- package/packaged-assets/.agents/skills/rt-timeline/SKILL.md +338 -0
- package/packaged-assets/RTEXIT.md +127 -0
- package/tools/installer/lib/asset-manifest.js +10 -5
- package/tools/installer/lib/copy-assets.js +5 -2
- /package/{_rtexit → packaged-assets/_rtexit}/config.toml +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/config.user.toml +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/custom/config.toml +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/autodoc_engine.py +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/finding_tracker.py +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_config.py +0 -0
- /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_customization.py +0 -0
- /package/{resources → packaged-assets/resources}/certifications.md +0 -0
- /package/{resources → packaged-assets/resources}/payloads.md +0 -0
- /package/{resources → packaged-assets/resources}/tools.md +0 -0
- /package/{resources → packaged-assets/resources}/wordlists.md +0 -0
- /package/{templates → packaged-assets/templates}/attack-chain-template.md +0 -0
- /package/{templates → packaged-assets/templates}/executive-report-template.md +0 -0
- /package/{templates → packaged-assets/templates}/executive-report.md +0 -0
- /package/{templates → packaged-assets/templates}/finding-template.md +0 -0
- /package/{templates → packaged-assets/templates}/remediation-roadmap.md +0 -0
- /package/{templates → packaged-assets/templates}/sead-template.md +0 -0
- /package/{templates → packaged-assets/templates}/technical-report.md +0 -0
|
@@ -0,0 +1,665 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rt-remediation-roadmap
|
|
3
|
+
description: "Build prioritized remediation roadmap from all findings. Groups by timeline: Critical (0-24h), High (1-7 days), Medium (1-30 days), Low (1-3 months). Includes effort estimates (hours), responsible team (Dev/Ops/Security/Management), verification steps, and business risk reduction percentage per group. Creates executive-friendly Gantt-style timeline."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# rt-remediation-roadmap — Skill Guide
|
|
7
|
+
|
|
8
|
+
## 1. Overview and Purpose
|
|
9
|
+
|
|
10
|
+
The `rt-remediation-roadmap` skill transforms a completed red team engagement's raw findings into a structured, actionable remediation plan that both technical teams and executive leadership can act on immediately.
|
|
11
|
+
|
|
12
|
+
### Where It Fits in the Engagement Lifecycle
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Reconnaissance → Exploitation → Lateral Movement → Exfiltration
|
|
16
|
+
↓ ↓ ↓ ↓
|
|
17
|
+
finding_tracker.py collects all findings throughout engagement
|
|
18
|
+
↓
|
|
19
|
+
[Engagement Close-Out]
|
|
20
|
+
↓
|
|
21
|
+
rt-remediation-roadmap ←── YOU ARE HERE
|
|
22
|
+
↓
|
|
23
|
+
autodoc_engine.py renders final deliverable
|
|
24
|
+
↓
|
|
25
|
+
Executive Briefing / Client Handoff
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This skill is the final technical step before report delivery. It answers the client's most pressing question: "We have 47 findings — where do we start, who does what, and how long will it take?"
|
|
29
|
+
|
|
30
|
+
### What This Skill Produces
|
|
31
|
+
|
|
32
|
+
- A timeline-bucketed remediation plan (Critical / High / Medium / Low)
|
|
33
|
+
- Per-finding effort estimates in engineer-hours
|
|
34
|
+
- Responsible team assignment (Dev / Ops / Security / Management)
|
|
35
|
+
- Verification steps for each remediation item
|
|
36
|
+
- Business risk reduction percentage per timeline bucket
|
|
37
|
+
- An executive Gantt-style timeline visual (ASCII or Markdown table)
|
|
38
|
+
- Integration-ready JSON/YAML output for finding_tracker.py status tracking
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 2. Step-by-Step Workflow
|
|
43
|
+
|
|
44
|
+
### Step 1 — Pull Findings from finding_tracker.py
|
|
45
|
+
|
|
46
|
+
Before building the roadmap, export all open findings from the tracker:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
python finding_tracker.py export --status open --format json --out findings_export.json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Review the export to confirm:
|
|
53
|
+
- Every finding has a CVSS score or manual severity rating
|
|
54
|
+
- Each finding has an affected asset tag (e.g., `web-app`, `internal-network`, `ad-domain`)
|
|
55
|
+
- No duplicate finding IDs exist
|
|
56
|
+
|
|
57
|
+
If findings are missing severity scores, assign them now using the tracker's update command:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
python finding_tracker.py update --id RT-2025-0041 --severity critical --cvss 9.8
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Step 2 — Triage and Bucket Findings
|
|
64
|
+
|
|
65
|
+
Apply the following bucketing criteria. Use business context to override pure CVSS scores when warranted (e.g., a CVSS 7.5 finding on a PCI-scoped system may warrant Critical treatment).
|
|
66
|
+
|
|
67
|
+
| Bucket | Default Trigger | Timeline |
|
|
68
|
+
|----------|------------------------------------------|------------|
|
|
69
|
+
| Critical | CVSS >= 9.0 OR active exploitation path | 0–24 hours |
|
|
70
|
+
| High | CVSS 7.0–8.9 OR significant data access | 1–7 days |
|
|
71
|
+
| Medium | CVSS 4.0–6.9 OR hardening gap | 1–30 days |
|
|
72
|
+
| Low | CVSS < 4.0 OR informational / best practice | 1–3 months |
|
|
73
|
+
|
|
74
|
+
Document any overrides with a brief justification in the `override_reason` field.
|
|
75
|
+
|
|
76
|
+
### Step 3 — Estimate Remediation Effort
|
|
77
|
+
|
|
78
|
+
For each finding, assign an effort estimate in engineer-hours using this reference table:
|
|
79
|
+
|
|
80
|
+
| Finding Type | Low Estimate | High Estimate |
|
|
81
|
+
|---------------------------------------|-------------|---------------|
|
|
82
|
+
| Patch/version update (single system) | 1h | 4h |
|
|
83
|
+
| Patch/version update (fleet rollout) | 4h | 16h |
|
|
84
|
+
| Configuration change (single system) | 0.5h | 2h |
|
|
85
|
+
| Configuration change (policy/GPO) | 2h | 8h |
|
|
86
|
+
| Code fix (input validation) | 2h | 8h |
|
|
87
|
+
| Code fix (auth/session logic) | 4h | 24h |
|
|
88
|
+
| Architecture change (network segment) | 16h | 80h |
|
|
89
|
+
| Process/policy creation | 4h | 16h |
|
|
90
|
+
| Security tooling deployment | 8h | 40h |
|
|
91
|
+
|
|
92
|
+
Always provide a range and note dependencies (e.g., "requires change freeze window").
|
|
93
|
+
|
|
94
|
+
### Step 4 — Assign Responsible Teams
|
|
95
|
+
|
|
96
|
+
Use these standard team labels. Assign primary and, where needed, secondary teams:
|
|
97
|
+
|
|
98
|
+
- **Dev** — Application development team; owns code-level fixes
|
|
99
|
+
- **Ops** — Infrastructure / SRE / DevOps; owns system configuration and patching
|
|
100
|
+
- **Security** — Internal security team; owns tooling, policy, and verification
|
|
101
|
+
- **Management** — Executive sponsor; owns resource allocation and policy sign-off
|
|
102
|
+
|
|
103
|
+
A finding may have multiple teams listed (e.g., `Dev + Security` for a vulnerability requiring both a code fix and WAF rule).
|
|
104
|
+
|
|
105
|
+
### Step 5 — Write Verification Steps
|
|
106
|
+
|
|
107
|
+
Each remediation item must include specific, testable verification steps. Generic statements like "verify the fix was applied" are not acceptable. Write steps an analyst can run on Day 1 after remediation:
|
|
108
|
+
|
|
109
|
+
Good example:
|
|
110
|
+
```
|
|
111
|
+
Verification for RT-2025-0038 (SQLi on /api/orders endpoint):
|
|
112
|
+
1. Run sqlmap against https://orders.acme.com/api/orders?id=1 with tamper=space2comment
|
|
113
|
+
2. Confirm all payloads return HTTP 400 with no database error strings in response body
|
|
114
|
+
3. Review application WAF logs to confirm rule RT-SQL-001 is triggering on test payloads
|
|
115
|
+
4. Run DAST scan profile "OWASP-SQLi" and confirm zero findings on endpoint
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Step 6 — Calculate Business Risk Reduction
|
|
119
|
+
|
|
120
|
+
Assign a business risk reduction percentage to each timeline bucket. This represents the estimated reduction in overall organizational risk exposure if all items in that bucket are remediated.
|
|
121
|
+
|
|
122
|
+
Use this formula as a starting point:
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
Risk Reduction % = (Sum of CVSS scores in bucket / Sum of all CVSS scores) * exploitability_weight
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Where `exploitability_weight` is:
|
|
129
|
+
- 1.3x if the engagement demonstrated active exploitation of findings in this bucket
|
|
130
|
+
- 1.0x for theoretical/undemonstrated findings
|
|
131
|
+
- 0.7x for informational/hardening items
|
|
132
|
+
|
|
133
|
+
Round to the nearest 5% for executive readability. These numbers will be challenged — document your methodology.
|
|
134
|
+
|
|
135
|
+
### Step 7 — Build the Gantt Timeline
|
|
136
|
+
|
|
137
|
+
Create the executive-facing Gantt table using the template in Section 3. The timeline must be calendar-anchored to the report delivery date, not relative ("Week 1" is ambiguous — use "June 2–6, 2025").
|
|
138
|
+
|
|
139
|
+
### Step 8 — Write to autodoc_engine.py
|
|
140
|
+
|
|
141
|
+
Pass the completed roadmap data to the autodoc engine for rendering into the final report:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
python autodoc_engine.py render \
|
|
145
|
+
--template remediation_roadmap \
|
|
146
|
+
--data roadmap_data.json \
|
|
147
|
+
--out reports/acme-corp-remediation-roadmap.md \
|
|
148
|
+
--client "Acme Corporation" \
|
|
149
|
+
--engagement-id RT-2025-Q2-ACME
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Then update finding_tracker.py with roadmap assignments:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
python finding_tracker.py bulk-update \
|
|
156
|
+
--from-roadmap roadmap_data.json \
|
|
157
|
+
--set-status "remediation_assigned"
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 3. Templates with Example Content
|
|
163
|
+
|
|
164
|
+
### 3.1 Roadmap Data JSON (input to autodoc_engine.py)
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
{
|
|
168
|
+
"engagement_id": "RT-2025-Q2-ACME",
|
|
169
|
+
"client": "Acme Corporation",
|
|
170
|
+
"report_delivery_date": "2025-06-01",
|
|
171
|
+
"analyst": "M. Hegazy",
|
|
172
|
+
"total_findings": 18,
|
|
173
|
+
"business_risk_reduction_if_all_remediated": "94%",
|
|
174
|
+
"buckets": [
|
|
175
|
+
{
|
|
176
|
+
"label": "Critical",
|
|
177
|
+
"timeline": "0–24 hours",
|
|
178
|
+
"deadline": "2025-06-02",
|
|
179
|
+
"risk_reduction_pct": 42,
|
|
180
|
+
"findings": [
|
|
181
|
+
{
|
|
182
|
+
"id": "RT-2025-0001",
|
|
183
|
+
"title": "Domain Admin via AS-REP Roasting — svc_backup account",
|
|
184
|
+
"cvss": 9.8,
|
|
185
|
+
"asset": "ad.acme.internal",
|
|
186
|
+
"affected_systems": ["DC01.acme.internal", "DC02.acme.internal"],
|
|
187
|
+
"effort_hours": "2–4",
|
|
188
|
+
"primary_team": "Ops",
|
|
189
|
+
"secondary_team": "Security",
|
|
190
|
+
"override_reason": null,
|
|
191
|
+
"remediation_steps": [
|
|
192
|
+
"Enable Kerberos pre-authentication on svc_backup account in Active Directory Users and Computers",
|
|
193
|
+
"Audit all service accounts for DONT_REQUIRE_PREAUTH flag: Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true}",
|
|
194
|
+
"Reset svc_backup password to 25+ character random string and store in PAM vault",
|
|
195
|
+
"Review svc_backup permissions — principle of least privilege audit required"
|
|
196
|
+
],
|
|
197
|
+
"verification_steps": [
|
|
198
|
+
"Run: impacket-GetNPUsers acme.internal/ -usersfile service_accounts.txt -no-pass",
|
|
199
|
+
"Confirm svc_backup no longer returns AS-REP hash",
|
|
200
|
+
"Verify EventID 4768 logs show pre-auth required for all service accounts"
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"id": "RT-2025-0002",
|
|
205
|
+
"title": "Unauthenticated RCE — Apache Struts 2.5.28 (CVE-2023-50164)",
|
|
206
|
+
"cvss": 9.8,
|
|
207
|
+
"asset": "erp.acme.com",
|
|
208
|
+
"affected_systems": ["erp.acme.com (10.20.1.45)"],
|
|
209
|
+
"effort_hours": "1–2",
|
|
210
|
+
"primary_team": "Ops",
|
|
211
|
+
"secondary_team": "Dev",
|
|
212
|
+
"override_reason": null,
|
|
213
|
+
"remediation_steps": [
|
|
214
|
+
"Upgrade Apache Struts to 2.5.33 or 6.3.0.2 immediately",
|
|
215
|
+
"Deploy WAF rule to block multipart content-type path traversal patterns as interim control",
|
|
216
|
+
"Isolate erp.acme.com from internal network segments until patch is confirmed"
|
|
217
|
+
],
|
|
218
|
+
"verification_steps": [
|
|
219
|
+
"Confirm Struts version: curl -s https://erp.acme.com/struts2-showcase/ | grep 'Struts'",
|
|
220
|
+
"Run PoC script RT-CVE-2023-50164-check.py against patched host — must return 'NOT VULNERABLE'",
|
|
221
|
+
"Verify WAF logs show blocked multipart traversal attempts"
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
]
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"label": "High",
|
|
228
|
+
"timeline": "1–7 days",
|
|
229
|
+
"deadline": "2025-06-08",
|
|
230
|
+
"risk_reduction_pct": 31,
|
|
231
|
+
"findings": [
|
|
232
|
+
{
|
|
233
|
+
"id": "RT-2025-0005",
|
|
234
|
+
"title": "Kerberoastable Service Account with Weak Password — svc_sql",
|
|
235
|
+
"cvss": 8.1,
|
|
236
|
+
"asset": "ad.acme.internal",
|
|
237
|
+
"affected_systems": ["SQL01.acme.internal"],
|
|
238
|
+
"effort_hours": "1–3",
|
|
239
|
+
"primary_team": "Ops",
|
|
240
|
+
"secondary_team": "Security",
|
|
241
|
+
"override_reason": null,
|
|
242
|
+
"remediation_steps": [
|
|
243
|
+
"Rotate svc_sql password to 30+ character random string",
|
|
244
|
+
"Convert svc_sql to Managed Service Account (gMSA) to eliminate manual password management",
|
|
245
|
+
"Audit all SPN-registered accounts: Get-ADUser -Filter {ServicePrincipalName -ne '$null'}"
|
|
246
|
+
],
|
|
247
|
+
"verification_steps": [
|
|
248
|
+
"Run: impacket-GetUserSPNs acme.internal/analyst:password -dc-ip 10.10.1.10",
|
|
249
|
+
"Attempt offline crack of new svc_sql hash with rockyou.txt — should not crack within 24h",
|
|
250
|
+
"Confirm gMSA conversion in AD: Get-ADServiceAccount -Identity svc_sql"
|
|
251
|
+
]
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"id": "RT-2025-0006",
|
|
255
|
+
"title": "SSRF in Document Preview Service — Internal AWS Metadata Accessible",
|
|
256
|
+
"cvss": 7.7,
|
|
257
|
+
"asset": "app.acme.com",
|
|
258
|
+
"affected_systems": ["app.acme.com /api/v2/preview"],
|
|
259
|
+
"effort_hours": "4–8",
|
|
260
|
+
"primary_team": "Dev",
|
|
261
|
+
"secondary_team": "Security",
|
|
262
|
+
"override_reason": null,
|
|
263
|
+
"remediation_steps": [
|
|
264
|
+
"Implement allowlist-based URL validation for preview endpoint — deny all private RFC1918 ranges and 169.254.0.0/16",
|
|
265
|
+
"Deploy IMDSv2 on all EC2 instances to require session tokens for metadata access",
|
|
266
|
+
"Add egress filtering on preview service container to block metadata IP 169.254.169.254"
|
|
267
|
+
],
|
|
268
|
+
"verification_steps": [
|
|
269
|
+
"Submit request: POST /api/v2/preview with url=http://169.254.169.254/latest/meta-data/",
|
|
270
|
+
"Confirm response is HTTP 400 with error 'URL not permitted'",
|
|
271
|
+
"Verify IMDSv2 enforcement: aws ec2 describe-instances --query 'HttpTokens' must return 'required'"
|
|
272
|
+
]
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"label": "Medium",
|
|
278
|
+
"timeline": "1–30 days",
|
|
279
|
+
"deadline": "2025-07-01",
|
|
280
|
+
"risk_reduction_pct": 16,
|
|
281
|
+
"findings": [
|
|
282
|
+
{
|
|
283
|
+
"id": "RT-2025-0009",
|
|
284
|
+
"title": "Missing HTTP Security Headers — X-Frame-Options, CSP Absent",
|
|
285
|
+
"cvss": 5.4,
|
|
286
|
+
"asset": "portal.acme.com",
|
|
287
|
+
"affected_systems": ["portal.acme.com"],
|
|
288
|
+
"effort_hours": "2–4",
|
|
289
|
+
"primary_team": "Dev",
|
|
290
|
+
"secondary_team": null,
|
|
291
|
+
"override_reason": null,
|
|
292
|
+
"remediation_steps": [
|
|
293
|
+
"Add to nginx.conf: add_header X-Frame-Options 'SAMEORIGIN';",
|
|
294
|
+
"Implement Content-Security-Policy header — start with report-only mode for 1 week before enforcing",
|
|
295
|
+
"Add Permissions-Policy header to restrict camera/microphone/geolocation"
|
|
296
|
+
],
|
|
297
|
+
"verification_steps": [
|
|
298
|
+
"Run: curl -I https://portal.acme.com | grep -E 'X-Frame|Content-Security|Permissions-Policy'",
|
|
299
|
+
"Verify all three headers present with correct values",
|
|
300
|
+
"Run Mozilla Observatory scan — target score B+ or above"
|
|
301
|
+
]
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"id": "RT-2025-0010",
|
|
305
|
+
"title": "Default Credentials on Grafana Instance — admin:admin",
|
|
306
|
+
"cvss": 6.8,
|
|
307
|
+
"asset": "monitoring.acme.internal",
|
|
308
|
+
"affected_systems": ["monitoring.acme.internal:3000"],
|
|
309
|
+
"effort_hours": "0.5–1",
|
|
310
|
+
"primary_team": "Ops",
|
|
311
|
+
"secondary_team": null,
|
|
312
|
+
"override_reason": null,
|
|
313
|
+
"remediation_steps": [
|
|
314
|
+
"Change admin password immediately to 20+ character random string",
|
|
315
|
+
"Disable local admin login and enforce SSO via SAML/OIDC with corporate IdP",
|
|
316
|
+
"Restrict Grafana access to VPN/internal network only — remove public exposure"
|
|
317
|
+
],
|
|
318
|
+
"verification_steps": [
|
|
319
|
+
"Attempt login with admin:admin — must return 401",
|
|
320
|
+
"Confirm Grafana is not accessible from external IPs via nmap scan from external vantage point",
|
|
321
|
+
"Verify SSO login flow works for standard users"
|
|
322
|
+
]
|
|
323
|
+
}
|
|
324
|
+
]
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"label": "Low",
|
|
328
|
+
"timeline": "1–3 months",
|
|
329
|
+
"deadline": "2025-09-01",
|
|
330
|
+
"risk_reduction_pct": 5,
|
|
331
|
+
"findings": [
|
|
332
|
+
{
|
|
333
|
+
"id": "RT-2025-0015",
|
|
334
|
+
"title": "TLS 1.0/1.1 Enabled on Legacy API Gateway",
|
|
335
|
+
"cvss": 3.7,
|
|
336
|
+
"asset": "api-legacy.acme.com",
|
|
337
|
+
"affected_systems": ["api-legacy.acme.com:443"],
|
|
338
|
+
"effort_hours": "1–2",
|
|
339
|
+
"primary_team": "Ops",
|
|
340
|
+
"secondary_team": null,
|
|
341
|
+
"override_reason": null,
|
|
342
|
+
"remediation_steps": [
|
|
343
|
+
"Disable TLS 1.0 and 1.1 in nginx SSL configuration",
|
|
344
|
+
"Enforce TLS 1.2 minimum with TLS 1.3 preferred",
|
|
345
|
+
"Update cipher suite to modern AEAD-only list"
|
|
346
|
+
],
|
|
347
|
+
"verification_steps": [
|
|
348
|
+
"Run: nmap --script ssl-enum-ciphers -p 443 api-legacy.acme.com",
|
|
349
|
+
"Confirm TLS 1.0 and 1.1 are absent from supported protocols",
|
|
350
|
+
"Run testssl.sh and confirm grade A-"
|
|
351
|
+
]
|
|
352
|
+
}
|
|
353
|
+
]
|
|
354
|
+
}
|
|
355
|
+
]
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### 3.2 Executive Gantt Timeline (Markdown output)
|
|
360
|
+
|
|
361
|
+
```markdown
|
|
362
|
+
## Remediation Roadmap — Acme Corporation
|
|
363
|
+
**Engagement:** RT-2025-Q2-ACME | **Delivered:** June 1, 2025 | **Analyst:** M. Hegazy
|
|
364
|
+
|
|
365
|
+
| Phase | Timeline | Calendar Window | Findings | Effort | Owner(s) | Risk Reduction |
|
|
366
|
+
|----------|-----------------|--------------------|----------|----------|------------------|----------------|
|
|
367
|
+
| Critical | 0–24 hours | Jun 2, 2025 | 2 | 3–6h | Ops + Security | -42% |
|
|
368
|
+
| High | 1–7 days | Jun 2–8, 2025 | 4 | 12–28h | Dev + Ops | -31% |
|
|
369
|
+
| Medium | 1–30 days | Jun 2 – Jul 1 | 8 | 18–44h | Dev + Ops | -16% |
|
|
370
|
+
| Low | 1–3 months | Jun 2 – Sep 1 | 4 | 8–20h | Ops + Security | -5% |
|
|
371
|
+
| **TOTAL**| | | **18** | **41–98h** | | **-94%** |
|
|
372
|
+
|
|
373
|
+
### Visual Timeline
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
Jun 2025 Jul 2025 Aug 2025 Sep 2025
|
|
377
|
+
| | | |
|
|
378
|
+
█ CRITICAL (Jun 2)
|
|
379
|
+
████████ HIGH (Jun 2–8)
|
|
380
|
+
████████████████████████████ MEDIUM (Jun 2 – Jul 1)
|
|
381
|
+
████████████████████████████████████████████████████████████ LOW (Jun 2 – Sep 1)
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
> Risk reduction percentages represent estimated reduction in overall organizational
|
|
385
|
+
> risk exposure based on CVSS scoring and exploitability demonstrated during engagement.
|
|
386
|
+
> Percentages are additive across sequential phases.
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## 4. Integration with finding_tracker.py and autodoc_engine.py
|
|
392
|
+
|
|
393
|
+
### finding_tracker.py Integration
|
|
394
|
+
|
|
395
|
+
The roadmap skill reads from and writes back to finding_tracker.py at multiple points:
|
|
396
|
+
|
|
397
|
+
**Read: Export findings before bucketing**
|
|
398
|
+
```bash
|
|
399
|
+
# Export all open findings sorted by CVSS descending
|
|
400
|
+
python finding_tracker.py export \
|
|
401
|
+
--status open \
|
|
402
|
+
--sort cvss-desc \
|
|
403
|
+
--format json \
|
|
404
|
+
--out findings_export.json
|
|
405
|
+
|
|
406
|
+
# Export with asset filter for scoped roadmaps
|
|
407
|
+
python finding_tracker.py export \
|
|
408
|
+
--status open \
|
|
409
|
+
--asset-tag web-app \
|
|
410
|
+
--format json \
|
|
411
|
+
--out findings_webapp_only.json
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
**Write: Update findings with roadmap assignments**
|
|
415
|
+
```bash
|
|
416
|
+
# Bulk update all findings with bucket, team, and deadline
|
|
417
|
+
python finding_tracker.py bulk-update \
|
|
418
|
+
--from-roadmap roadmap_data.json \
|
|
419
|
+
--set-status "remediation_assigned"
|
|
420
|
+
|
|
421
|
+
# Update individual finding status after client confirms fix
|
|
422
|
+
python finding_tracker.py update \
|
|
423
|
+
--id RT-2025-0001 \
|
|
424
|
+
--status "remediation_in_progress" \
|
|
425
|
+
--assigned-team "Ops" \
|
|
426
|
+
--deadline "2025-06-02"
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
**Query: Track remediation progress post-delivery**
|
|
430
|
+
```bash
|
|
431
|
+
# Show remediation completion dashboard
|
|
432
|
+
python finding_tracker.py status-report \
|
|
433
|
+
--engagement RT-2025-Q2-ACME \
|
|
434
|
+
--format table
|
|
435
|
+
|
|
436
|
+
# Show overdue critical/high items
|
|
437
|
+
python finding_tracker.py overdue \
|
|
438
|
+
--severity critical,high \
|
|
439
|
+
--engagement RT-2025-Q2-ACME
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
**Expected finding_tracker.py finding schema fields used by this skill:**
|
|
443
|
+
|
|
444
|
+
| Field | Type | Required | Description |
|
|
445
|
+
|--------------------|----------|----------|------------------------------------------|
|
|
446
|
+
| `id` | string | Yes | Unique finding ID (e.g., RT-2025-0001) |
|
|
447
|
+
| `title` | string | Yes | Short descriptive title |
|
|
448
|
+
| `cvss` | float | Yes | CVSS 3.x base score |
|
|
449
|
+
| `severity` | string | Yes | critical/high/medium/low |
|
|
450
|
+
| `asset` | string | Yes | Asset hostname or tag |
|
|
451
|
+
| `status` | string | Yes | Lifecycle status |
|
|
452
|
+
| `assigned_team` | string | No | Set by roadmap skill |
|
|
453
|
+
| `deadline` | date | No | Set by roadmap skill |
|
|
454
|
+
| `roadmap_bucket` | string | No | Set by roadmap skill |
|
|
455
|
+
| `effort_hours` | string | No | Range string, e.g., "4–8" |
|
|
456
|
+
|
|
457
|
+
### autodoc_engine.py Integration
|
|
458
|
+
|
|
459
|
+
The autodoc engine consumes `roadmap_data.json` and renders it against the `remediation_roadmap` template:
|
|
460
|
+
|
|
461
|
+
```bash
|
|
462
|
+
# Standard render
|
|
463
|
+
python autodoc_engine.py render \
|
|
464
|
+
--template remediation_roadmap \
|
|
465
|
+
--data roadmap_data.json \
|
|
466
|
+
--out reports/acme-corp-remediation-roadmap.md \
|
|
467
|
+
--client "Acme Corporation" \
|
|
468
|
+
--engagement-id RT-2025-Q2-ACME
|
|
469
|
+
|
|
470
|
+
# With custom branding/logo path
|
|
471
|
+
python autodoc_engine.py render \
|
|
472
|
+
--template remediation_roadmap \
|
|
473
|
+
--data roadmap_data.json \
|
|
474
|
+
--out reports/acme-corp-remediation-roadmap.md \
|
|
475
|
+
--client "Acme Corporation" \
|
|
476
|
+
--engagement-id RT-2025-Q2-ACME \
|
|
477
|
+
--logo assets/acme-logo.png \
|
|
478
|
+
--theme corporate-blue
|
|
479
|
+
|
|
480
|
+
# Render executive summary only (no technical details)
|
|
481
|
+
python autodoc_engine.py render \
|
|
482
|
+
--template remediation_roadmap_exec \
|
|
483
|
+
--data roadmap_data.json \
|
|
484
|
+
--out reports/acme-corp-exec-summary.md \
|
|
485
|
+
--client "Acme Corporation" \
|
|
486
|
+
--engagement-id RT-2025-Q2-ACME
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
**Template variants available:**
|
|
490
|
+
|
|
491
|
+
| Template Name | Audience | Includes Technical Detail |
|
|
492
|
+
|-------------------------------|------------------|--------------------------|
|
|
493
|
+
| `remediation_roadmap` | Security team | Yes — full steps |
|
|
494
|
+
| `remediation_roadmap_exec` | C-suite / board | No — risk % and timeline only |
|
|
495
|
+
| `remediation_roadmap_ticketed` | Dev / Ops teams | Yes — formatted as tickets |
|
|
496
|
+
|
|
497
|
+
**autodoc_engine.py variable mapping:**
|
|
498
|
+
|
|
499
|
+
The engine expects these top-level keys in `roadmap_data.json`:
|
|
500
|
+
|
|
501
|
+
```
|
|
502
|
+
engagement_id → report header
|
|
503
|
+
client → report header and footer
|
|
504
|
+
report_delivery_date → timeline anchor for Gantt
|
|
505
|
+
analyst → sign-off block
|
|
506
|
+
total_findings → executive summary stat
|
|
507
|
+
business_risk_reduction_if_all_remediated → executive summary stat
|
|
508
|
+
buckets[] → each bucket becomes a report section
|
|
509
|
+
buckets[].label → section heading
|
|
510
|
+
buckets[].deadline → Gantt calendar date
|
|
511
|
+
buckets[].risk_reduction_pct → risk bar chart value
|
|
512
|
+
buckets[].findings[] → finding detail rows
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
---
|
|
516
|
+
|
|
517
|
+
## 5. Quality Checklist
|
|
518
|
+
|
|
519
|
+
Run through this checklist before finalizing the roadmap. Every item must be checked before the document is delivered to the client.
|
|
520
|
+
|
|
521
|
+
### Completeness
|
|
522
|
+
- [ ] Every open finding from finding_tracker.py appears in exactly one bucket
|
|
523
|
+
- [ ] No finding is bucketed in two places
|
|
524
|
+
- [ ] All findings have a non-null `effort_hours` value
|
|
525
|
+
- [ ] All findings have a `primary_team` assigned
|
|
526
|
+
- [ ] Every finding has at least two `verification_steps`
|
|
527
|
+
- [ ] The `business_risk_reduction_if_all_remediated` percentage sums correctly across buckets
|
|
528
|
+
|
|
529
|
+
### Accuracy
|
|
530
|
+
- [ ] CVSS scores match the finding_tracker.py records (no manual edits without override justification)
|
|
531
|
+
- [ ] All override decisions are documented with `override_reason` text
|
|
532
|
+
- [ ] Deadline dates are calendar dates, not relative ("7 days from now")
|
|
533
|
+
- [ ] Effort estimates account for testing/staging environments, not just production application
|
|
534
|
+
|
|
535
|
+
### Clarity (Executive-Facing Content)
|
|
536
|
+
- [ ] No jargon in executive Gantt section (no "AS-REP Roasting", "Kerberoasting" — use plain English)
|
|
537
|
+
- [ ] Risk reduction percentages are rounded to nearest 5%
|
|
538
|
+
- [ ] Visual timeline renders correctly in both light and dark mode Markdown viewers
|
|
539
|
+
- [ ] Client name spelled correctly throughout (run: grep -i "acme" report.md | head -20)
|
|
540
|
+
|
|
541
|
+
### Verification Steps Quality
|
|
542
|
+
- [ ] Every verification step uses specific commands, not vague instructions
|
|
543
|
+
- [ ] Commands include actual tool names (nmap, sqlmap, curl, impacket-*)
|
|
544
|
+
- [ ] Expected output or pass/fail condition is stated
|
|
545
|
+
- [ ] Steps are runnable by the client's internal security team without red team access
|
|
546
|
+
|
|
547
|
+
### Finding Descriptions
|
|
548
|
+
- [ ] Title is specific enough that two separate findings are not confused
|
|
549
|
+
- [ ] Affected systems list is accurate and current (re-verify against scope doc)
|
|
550
|
+
- [ ] Remediation steps are ordered logically (interim controls before permanent fixes)
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
## 6. Example Output — Finished Product Excerpt
|
|
555
|
+
|
|
556
|
+
Below is a complete rendered section as it would appear in the final client deliverable.
|
|
557
|
+
|
|
558
|
+
---
|
|
559
|
+
|
|
560
|
+
### CRITICAL — Remediate Within 24 Hours
|
|
561
|
+
**Deadline: June 2, 2025 | Risk Reduction: 42% | Owner: Ops + Security**
|
|
562
|
+
|
|
563
|
+
Immediate action is required on the following two findings. Both were actively exploited during the engagement and represent a direct path to full domain compromise and data exfiltration. These items should be treated as an active incident response scenario, not a scheduled remediation task.
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
|
|
567
|
+
**RT-2025-0001 | Domain Admin via AS-REP Roasting — svc_backup**
|
|
568
|
+
|
|
569
|
+
- **Asset:** ad.acme.internal (DC01, DC02)
|
|
570
|
+
- **CVSS:** 9.8 (Critical)
|
|
571
|
+
- **Effort:** 2–4 hours
|
|
572
|
+
- **Primary Team:** Ops | **Secondary:** Security
|
|
573
|
+
|
|
574
|
+
During the engagement, the `svc_backup` service account was found to have Kerberos pre-authentication disabled. An unauthenticated attacker on the internal network requested an AS-REP response for this account and cracked the resulting hash offline within 8 minutes using Hashcat on a modest GPU, yielding the cleartext password `Backup2022!`. This account held Domain Admin privileges.
|
|
575
|
+
|
|
576
|
+
**Remediation Steps:**
|
|
577
|
+
1. Enable Kerberos pre-authentication on `svc_backup` in Active Directory Users and Computers immediately.
|
|
578
|
+
2. Audit all service accounts for the `DONT_REQUIRE_PREAUTH` flag:
|
|
579
|
+
`Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true} -Properties DoesNotRequirePreAuth`
|
|
580
|
+
3. Reset `svc_backup` password to a 25+ character random string and store in the PAM vault.
|
|
581
|
+
4. Initiate a least-privilege audit on `svc_backup` — Domain Admin rights are not justified for a backup service account.
|
|
582
|
+
|
|
583
|
+
**Verification Steps:**
|
|
584
|
+
1. Run `impacket-GetNPUsers acme.internal/ -usersfile service_accounts.txt -no-pass` from an internal network host.
|
|
585
|
+
2. Confirm `svc_backup` does not return an AS-REP hash in the output.
|
|
586
|
+
3. Verify EventID 4768 logs in the Windows Security event log show `Pre-Authentication Type: 2` for `svc_backup`.
|
|
587
|
+
|
|
588
|
+
---
|
|
589
|
+
|
|
590
|
+
**RT-2025-0002 | Unauthenticated RCE — Apache Struts 2.5.28 (CVE-2023-50164)**
|
|
591
|
+
|
|
592
|
+
- **Asset:** erp.acme.com (10.20.1.45)
|
|
593
|
+
- **CVSS:** 9.8 (Critical)
|
|
594
|
+
- **Effort:** 1–2 hours
|
|
595
|
+
- **Primary Team:** Ops | **Secondary:** Dev
|
|
596
|
+
|
|
597
|
+
The ERP application runs Apache Struts 2.5.28, which is vulnerable to CVE-2023-50164, a critical file upload path traversal vulnerability that enables unauthenticated remote code execution. The engagement demonstrated full RCE, achieving a shell running as `www-data` with subsequent privilege escalation to root via a local sudo misconfiguration.
|
|
598
|
+
|
|
599
|
+
**Remediation Steps:**
|
|
600
|
+
1. Upgrade Apache Struts to version 2.5.33 or 6.3.0.2 immediately. Test in staging first; estimated 1 hour if staging mirrors production.
|
|
601
|
+
2. As an interim control, deploy a WAF rule blocking multipart content-type requests containing `../` or `%2e%2e%2f` patterns.
|
|
602
|
+
3. Isolate `erp.acme.com` from all internal network segments (firewall rule: deny all inbound except port 443 from load balancer) until patch is confirmed in production.
|
|
603
|
+
|
|
604
|
+
**Verification Steps:**
|
|
605
|
+
1. Confirm Struts version post-patch: `curl -s https://erp.acme.com/struts2-showcase/ | grep -i struts`
|
|
606
|
+
2. Run the engagement's PoC verification script: `python RT-CVE-2023-50164-check.py --target https://erp.acme.com` — output must be `[NOT VULNERABLE]`.
|
|
607
|
+
3. Verify WAF logs show blocked multipart traversal attempts during the verification test.
|
|
608
|
+
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
## 7. Common Mistakes to Avoid
|
|
612
|
+
|
|
613
|
+
### Mistake 1 — Vague Verification Steps
|
|
614
|
+
**Bad:**
|
|
615
|
+
> "Verify that the patch has been applied and the vulnerability is resolved."
|
|
616
|
+
|
|
617
|
+
**Good:**
|
|
618
|
+
> "Run `nmap --script http-struts2-multi-ite -p 443 erp.acme.com` and confirm the output shows 'VULNERABLE: false'. Then run the PoC script from the engagement toolkit."
|
|
619
|
+
|
|
620
|
+
Clients cannot verify what they cannot measure. Vague steps lead to false confidence.
|
|
621
|
+
|
|
622
|
+
---
|
|
623
|
+
|
|
624
|
+
### Mistake 2 — Ignoring Business Context in Bucketing
|
|
625
|
+
Applying CVSS scores mechanically without considering environment produces a misleading roadmap. A CVSS 6.5 finding on a system that processes all payment card data may be more urgent than a CVSS 8.0 finding on a dev box with no sensitive data. Always ask: "What is the worst realistic outcome if this is exploited tomorrow?"
|
|
626
|
+
|
|
627
|
+
---
|
|
628
|
+
|
|
629
|
+
### Mistake 3 — Missing Interim Controls
|
|
630
|
+
Remediation of complex findings (architecture changes, major code refactors) can take weeks. Every Critical and High finding must have at least one interim control documented alongside the permanent fix. Examples: WAF rules, network segmentation, account disablement, feature flags to disable vulnerable functionality.
|
|
631
|
+
|
|
632
|
+
---
|
|
633
|
+
|
|
634
|
+
### Mistake 4 — Assigning Unrealistic Effort Estimates
|
|
635
|
+
Effort estimates that are too low destroy trust when teams miss deadlines. Be conservative. Account for:
|
|
636
|
+
- Change advisory board (CAB) approval cycles (often 1–2 weeks for production changes)
|
|
637
|
+
- Testing in staging environments
|
|
638
|
+
- Rollback planning
|
|
639
|
+
- Communication and coordination time across teams
|
|
640
|
+
|
|
641
|
+
---
|
|
642
|
+
|
|
643
|
+
### Mistake 5 — Putting Technical Jargon in the Executive Section
|
|
644
|
+
The Gantt timeline and risk summary table are read by CISOs, CTOs, and board members. "AS-REP Roasting" and "Kerberoasting" mean nothing to them. Use: "Weak password on privileged service account — cracked in 8 minutes."
|
|
645
|
+
|
|
646
|
+
---
|
|
647
|
+
|
|
648
|
+
### Mistake 6 — Not Anchoring Timelines to Calendar Dates
|
|
649
|
+
"Week 1", "Day 7", "Month 2" are useless in a delivered report. The report may sit in legal review for three weeks before the client reads it. Always use actual calendar dates anchored to the report delivery date. Update dates if delivery is delayed.
|
|
650
|
+
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
### Mistake 7 — Forgetting to Update finding_tracker.py
|
|
654
|
+
The roadmap is not a static document — it is a living artifact. After delivery, the tracker should reflect assignment status. Failure to update the tracker means progress checks, follow-up assessments, and closure verification all operate on stale data.
|
|
655
|
+
|
|
656
|
+
Run after every client status meeting:
|
|
657
|
+
```bash
|
|
658
|
+
python finding_tracker.py update --id RT-2025-0001 --status "remediation_complete" --closed-date "2025-06-02"
|
|
659
|
+
python finding_tracker.py status-report --engagement RT-2025-Q2-ACME
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
---
|
|
663
|
+
|
|
664
|
+
### Mistake 8 — Risk Reduction Percentages That Don't Add Up
|
|
665
|
+
If Critical = 42%, High = 31%, Medium = 16%, Low = 5%, the total should be 94% (not 100% — there is always residual risk). Percentages that sum to exactly 100% look fabricated. Percentages greater than 100% are a math error. Review the methodology documented in Step 6 before finalizing.
|