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.
Files changed (220) hide show
  1. package/package.json +2 -5
  2. package/packaged-assets/.agents/skills/rt-active-recon/SKILL.md +767 -0
  3. package/packaged-assets/.agents/skills/rt-active-recon/workflow.md +68 -0
  4. package/packaged-assets/.agents/skills/rt-agent-breaker/SKILL.md +65 -0
  5. package/packaged-assets/.agents/skills/rt-agent-breaker/customize.toml +76 -0
  6. package/packaged-assets/.agents/skills/rt-agent-commander/SKILL.md +63 -0
  7. package/packaged-assets/.agents/skills/rt-agent-commander/customize.toml +67 -0
  8. package/packaged-assets/.agents/skills/rt-agent-ghost/SKILL.md +65 -0
  9. package/packaged-assets/.agents/skills/rt-agent-ghost/customize.toml +77 -0
  10. package/packaged-assets/.agents/skills/rt-agent-navigator/SKILL.md +62 -0
  11. package/packaged-assets/.agents/skills/rt-agent-navigator/customize.toml +61 -0
  12. package/packaged-assets/.agents/skills/rt-agent-phantom/SKILL.md +62 -0
  13. package/packaged-assets/.agents/skills/rt-agent-phantom/customize.toml +62 -0
  14. package/packaged-assets/.agents/skills/rt-agent-scout/SKILL.md +62 -0
  15. package/packaged-assets/.agents/skills/rt-agent-scout/customize.toml +61 -0
  16. package/packaged-assets/.agents/skills/rt-agent-scribe/SKILL.md +65 -0
  17. package/packaged-assets/.agents/skills/rt-agent-scribe/customize.toml +77 -0
  18. package/packaged-assets/.agents/skills/rt-attack-chain-builder/SKILL.md +476 -0
  19. package/packaged-assets/.agents/skills/rt-attack-chain-builder/workflow.md +68 -0
  20. package/packaged-assets/.agents/skills/rt-attack-surface-map/SKILL.md +1209 -0
  21. package/packaged-assets/.agents/skills/rt-attack-surface-map/template.md +62 -0
  22. package/packaged-assets/.agents/skills/rt-autodoc/SKILL.md +258 -0
  23. package/packaged-assets/.agents/skills/rt-c2-operations/SKILL.md +1072 -0
  24. package/packaged-assets/.agents/skills/rt-c2-operations/workflow.md +68 -0
  25. package/packaged-assets/.agents/skills/rt-compliance-mapper/SKILL.md +773 -0
  26. package/packaged-assets/.agents/skills/rt-create-sead/SKILL.md +74 -0
  27. package/packaged-assets/.agents/skills/rt-create-sead/template.md +89 -0
  28. package/packaged-assets/.agents/skills/rt-create-sead/workflow.md +68 -0
  29. package/packaged-assets/.agents/skills/rt-credential-access/SKILL.md +756 -0
  30. package/packaged-assets/.agents/skills/rt-credential-hunt/SKILL.md +856 -0
  31. package/packaged-assets/.agents/skills/rt-credential-hunt/workflow.md +68 -0
  32. package/packaged-assets/.agents/skills/rt-cvss-calculator/SKILL.md +542 -0
  33. package/packaged-assets/.agents/skills/rt-cvss-calculator/cvss4-matrix.csv +20 -0
  34. package/packaged-assets/.agents/skills/rt-data-exfiltration/SKILL.md +784 -0
  35. package/packaged-assets/.agents/skills/rt-defense-evasion/SKILL.md +987 -0
  36. package/packaged-assets/.agents/skills/rt-evidence-chain/SKILL.md +712 -0
  37. package/packaged-assets/.agents/skills/rt-evidence-chain/template.md +31 -0
  38. package/packaged-assets/.agents/skills/rt-executive-report/SKILL.md +718 -0
  39. package/packaged-assets/.agents/skills/rt-executive-report/template.md +38 -0
  40. package/packaged-assets/.agents/skills/rt-executive-report/workflow.md +68 -0
  41. package/packaged-assets/.agents/skills/rt-exploit-active-directory/SKILL.md +1078 -0
  42. package/packaged-assets/.agents/skills/rt-exploit-active-directory/ad-checklist.csv +12 -0
  43. package/packaged-assets/.agents/skills/rt-exploit-active-directory/workflow.md +68 -0
  44. package/packaged-assets/.agents/skills/rt-exploit-android/SKILL.md +1329 -0
  45. package/packaged-assets/.agents/skills/rt-exploit-android/masvs-checklist.csv +10 -0
  46. package/packaged-assets/.agents/skills/rt-exploit-android/workflow.md +68 -0
  47. package/packaged-assets/.agents/skills/rt-exploit-api/SKILL.md +1547 -0
  48. package/packaged-assets/.agents/skills/rt-exploit-api/workflow.md +68 -0
  49. package/packaged-assets/.agents/skills/rt-exploit-auth/SKILL.md +1949 -0
  50. package/packaged-assets/.agents/skills/rt-exploit-auth/workflow.md +68 -0
  51. package/packaged-assets/.agents/skills/rt-exploit-bec/SKILL.md +69 -0
  52. package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/SKILL.md +865 -0
  53. package/packaged-assets/.agents/skills/rt-exploit-cloud-aws/workflow.md +68 -0
  54. package/packaged-assets/.agents/skills/rt-exploit-cloud-azure/SKILL.md +1258 -0
  55. package/packaged-assets/.agents/skills/rt-exploit-cloud-gcp/SKILL.md +981 -0
  56. package/packaged-assets/.agents/skills/rt-exploit-containers/SKILL.md +55 -0
  57. package/packaged-assets/.agents/skills/rt-exploit-databases/SKILL.md +1374 -0
  58. package/packaged-assets/.agents/skills/rt-exploit-desktop-mac/SKILL.md +834 -0
  59. package/packaged-assets/.agents/skills/rt-exploit-desktop-win/SKILL.md +903 -0
  60. package/packaged-assets/.agents/skills/rt-exploit-desktop-win/workflow.md +68 -0
  61. package/packaged-assets/.agents/skills/rt-exploit-dotnet/SKILL.md +945 -0
  62. package/packaged-assets/.agents/skills/rt-exploit-elasticsearch/SKILL.md +68 -0
  63. package/packaged-assets/.agents/skills/rt-exploit-electron/SKILL.md +1023 -0
  64. package/packaged-assets/.agents/skills/rt-exploit-electron/workflow.md +68 -0
  65. package/packaged-assets/.agents/skills/rt-exploit-file-upload/SKILL.md +1576 -0
  66. package/packaged-assets/.agents/skills/rt-exploit-file-upload/payloads/README.md +4 -0
  67. package/packaged-assets/.agents/skills/rt-exploit-file-upload/workflow.md +68 -0
  68. package/packaged-assets/.agents/skills/rt-exploit-firebase/SKILL.md +54 -0
  69. package/packaged-assets/.agents/skills/rt-exploit-frameworks/SKILL.md +967 -0
  70. package/packaged-assets/.agents/skills/rt-exploit-idor/SKILL.md +1693 -0
  71. package/packaged-assets/.agents/skills/rt-exploit-idor/workflow.md +68 -0
  72. package/packaged-assets/.agents/skills/rt-exploit-injection/SKILL.md +1860 -0
  73. package/packaged-assets/.agents/skills/rt-exploit-injection/payloads/sqlmap-tampers.txt +22 -0
  74. package/packaged-assets/.agents/skills/rt-exploit-injection/workflow.md +68 -0
  75. package/packaged-assets/.agents/skills/rt-exploit-ios/SKILL.md +1214 -0
  76. package/packaged-assets/.agents/skills/rt-exploit-ios/workflow.md +68 -0
  77. package/packaged-assets/.agents/skills/rt-exploit-iot/SKILL.md +91 -0
  78. package/packaged-assets/.agents/skills/rt-exploit-iot/workflow.md +68 -0
  79. package/packaged-assets/.agents/skills/rt-exploit-java/SKILL.md +1009 -0
  80. package/packaged-assets/.agents/skills/rt-exploit-jwt/SKILL.md +1327 -0
  81. package/packaged-assets/.agents/skills/rt-exploit-jwt/workflow.md +68 -0
  82. package/packaged-assets/.agents/skills/rt-exploit-mongodb/SKILL.md +67 -0
  83. package/packaged-assets/.agents/skills/rt-exploit-mssql/SKILL.md +52 -0
  84. package/packaged-assets/.agents/skills/rt-exploit-mysql/SKILL.md +53 -0
  85. package/packaged-assets/.agents/skills/rt-exploit-network/SKILL.md +118 -0
  86. package/packaged-assets/.agents/skills/rt-exploit-network/workflow.md +68 -0
  87. package/packaged-assets/.agents/skills/rt-exploit-nodejs/SKILL.md +852 -0
  88. package/packaged-assets/.agents/skills/rt-exploit-osticket/SKILL.md +63 -0
  89. package/packaged-assets/.agents/skills/rt-exploit-phishing/SKILL.md +173 -0
  90. package/packaged-assets/.agents/skills/rt-exploit-phishing/templates/README.md +4 -0
  91. package/packaged-assets/.agents/skills/rt-exploit-phishing/workflow.md +68 -0
  92. package/packaged-assets/.agents/skills/rt-exploit-php/SKILL.md +1119 -0
  93. package/packaged-assets/.agents/skills/rt-exploit-physical/SKILL.md +63 -0
  94. package/packaged-assets/.agents/skills/rt-exploit-physical/workflow.md +68 -0
  95. package/packaged-assets/.agents/skills/rt-exploit-postgresql/SKILL.md +67 -0
  96. package/packaged-assets/.agents/skills/rt-exploit-python/SKILL.md +986 -0
  97. package/packaged-assets/.agents/skills/rt-exploit-redis/SKILL.md +68 -0
  98. package/packaged-assets/.agents/skills/rt-exploit-ruby/SKILL.md +61 -0
  99. package/packaged-assets/.agents/skills/rt-exploit-scada/SKILL.md +1091 -0
  100. package/packaged-assets/.agents/skills/rt-exploit-ssrf/SKILL.md +1528 -0
  101. package/packaged-assets/.agents/skills/rt-exploit-ssrf/payloads.txt +23 -0
  102. package/packaged-assets/.agents/skills/rt-exploit-ssrf/workflow.md +68 -0
  103. package/packaged-assets/.agents/skills/rt-exploit-vishing/SKILL.md +121 -0
  104. package/packaged-assets/.agents/skills/rt-exploit-vishing/scripts.md +4 -0
  105. package/packaged-assets/.agents/skills/rt-exploit-web/SKILL.md +1902 -0
  106. package/packaged-assets/.agents/skills/rt-exploit-web/owasp-checklist.csv +14 -0
  107. package/packaged-assets/.agents/skills/rt-exploit-web/workflow.md +68 -0
  108. package/packaged-assets/.agents/skills/rt-exploit-wireless/SKILL.md +71 -0
  109. package/packaged-assets/.agents/skills/rt-exploit-wordpress/SKILL.md +1565 -0
  110. package/packaged-assets/.agents/skills/rt-exploit-wordpress/cves.csv +7 -0
  111. package/packaged-assets/.agents/skills/rt-exploit-wordpress/workflow.md +68 -0
  112. package/packaged-assets/.agents/skills/rt-exploit-xss/SKILL.md +1526 -0
  113. package/packaged-assets/.agents/skills/rt-exploit-xss/payloads.txt +18 -0
  114. package/packaged-assets/.agents/skills/rt-exploit-xss/workflow.md +68 -0
  115. package/packaged-assets/.agents/skills/rt-finding-document/SKILL.md +687 -0
  116. package/packaged-assets/.agents/skills/rt-finding-document/template.md +71 -0
  117. package/packaged-assets/.agents/skills/rt-finding-document/workflow.md +68 -0
  118. package/packaged-assets/.agents/skills/rt-finding-tracker/SKILL.md +216 -0
  119. package/packaged-assets/.agents/skills/rt-finding-tracker/workflow.md +68 -0
  120. package/packaged-assets/.agents/skills/rt-help/SKILL.md +292 -0
  121. package/packaged-assets/.agents/skills/rt-help/workflow.md +68 -0
  122. package/packaged-assets/.agents/skills/rt-js-analysis/SKILL.md +639 -0
  123. package/packaged-assets/.agents/skills/rt-js-analysis/patterns.txt +27 -0
  124. package/packaged-assets/.agents/skills/rt-js-analysis/workflow.md +68 -0
  125. package/packaged-assets/.agents/skills/rt-kill-chain-map/SKILL.md +393 -0
  126. package/packaged-assets/.agents/skills/rt-lateral-movement/SKILL.md +1032 -0
  127. package/packaged-assets/.agents/skills/rt-lateral-movement/workflow.md +68 -0
  128. package/packaged-assets/.agents/skills/rt-methodology-selector/SKILL.md +69 -0
  129. package/packaged-assets/.agents/skills/rt-methodology-selector/frameworks.csv +10 -0
  130. package/packaged-assets/.agents/skills/rt-methodology-selector/workflow.md +68 -0
  131. package/packaged-assets/.agents/skills/rt-mitre-map/SKILL.md +668 -0
  132. package/packaged-assets/.agents/skills/rt-mitre-map/tactics.csv +16 -0
  133. package/packaged-assets/.agents/skills/rt-mitre-map/workflow.md +68 -0
  134. package/packaged-assets/.agents/skills/rt-osint/SKILL.md +775 -0
  135. package/packaged-assets/.agents/skills/rt-osint/osint-sources.csv +12 -0
  136. package/packaged-assets/.agents/skills/rt-osint/workflow.md +68 -0
  137. package/packaged-assets/.agents/skills/rt-party-mode/SKILL.md +249 -0
  138. package/packaged-assets/.agents/skills/rt-party-mode/workflow.md +68 -0
  139. package/packaged-assets/.agents/skills/rt-persistence/SKILL.md +1146 -0
  140. package/packaged-assets/.agents/skills/rt-persistence/workflow.md +68 -0
  141. package/packaged-assets/.agents/skills/rt-poc-writer/SKILL.md +640 -0
  142. package/packaged-assets/.agents/skills/rt-post-exploitation/SKILL.md +998 -0
  143. package/packaged-assets/.agents/skills/rt-post-exploitation/linux-checklist.csv +10 -0
  144. package/packaged-assets/.agents/skills/rt-post-exploitation/windows-checklist.csv +10 -0
  145. package/packaged-assets/.agents/skills/rt-post-exploitation/workflow.md +68 -0
  146. package/packaged-assets/.agents/skills/rt-privilege-escalation/SKILL.md +1027 -0
  147. package/packaged-assets/.agents/skills/rt-privilege-escalation/linux-checklist.csv +10 -0
  148. package/packaged-assets/.agents/skills/rt-privilege-escalation/win-checklist.csv +10 -0
  149. package/packaged-assets/.agents/skills/rt-privilege-escalation/workflow.md +68 -0
  150. package/packaged-assets/.agents/skills/rt-remediation-roadmap/SKILL.md +665 -0
  151. package/packaged-assets/.agents/skills/rt-remediation-roadmap/template.md +28 -0
  152. package/packaged-assets/.agents/skills/rt-risk-matrix/SKILL.md +232 -0
  153. package/packaged-assets/.agents/skills/rt-rules-of-engagement/SKILL.md +62 -0
  154. package/packaged-assets/.agents/skills/rt-rules-of-engagement/workflow.md +68 -0
  155. package/packaged-assets/.agents/skills/rt-scenario-c001/SKILL.md +71 -0
  156. package/packaged-assets/.agents/skills/rt-scenario-c002/SKILL.md +69 -0
  157. package/packaged-assets/.agents/skills/rt-scenario-c003/SKILL.md +71 -0
  158. package/packaged-assets/.agents/skills/rt-scenario-c004/SKILL.md +71 -0
  159. package/packaged-assets/.agents/skills/rt-scenario-c005/SKILL.md +72 -0
  160. package/packaged-assets/.agents/skills/rt-scenario-d001/SKILL.md +378 -0
  161. package/packaged-assets/.agents/skills/rt-scenario-d002/SKILL.md +392 -0
  162. package/packaged-assets/.agents/skills/rt-scenario-d003/SKILL.md +522 -0
  163. package/packaged-assets/.agents/skills/rt-scenario-d004/SKILL.md +373 -0
  164. package/packaged-assets/.agents/skills/rt-scenario-d005/SKILL.md +458 -0
  165. package/packaged-assets/.agents/skills/rt-scenario-library/SKILL.md +292 -0
  166. package/packaged-assets/.agents/skills/rt-scenario-library/scenarios.csv +32 -0
  167. package/packaged-assets/.agents/skills/rt-scenario-m001/SKILL.md +796 -0
  168. package/packaged-assets/.agents/skills/rt-scenario-m002/SKILL.md +723 -0
  169. package/packaged-assets/.agents/skills/rt-scenario-m003/SKILL.md +463 -0
  170. package/packaged-assets/.agents/skills/rt-scenario-m004/SKILL.md +449 -0
  171. package/packaged-assets/.agents/skills/rt-scenario-m005/SKILL.md +505 -0
  172. package/packaged-assets/.agents/skills/rt-scenario-n001/SKILL.md +573 -0
  173. package/packaged-assets/.agents/skills/rt-scenario-n002/SKILL.md +112 -0
  174. package/packaged-assets/.agents/skills/rt-scenario-n003/SKILL.md +100 -0
  175. package/packaged-assets/.agents/skills/rt-scenario-n004/SKILL.md +90 -0
  176. package/packaged-assets/.agents/skills/rt-scenario-n005/SKILL.md +71 -0
  177. package/packaged-assets/.agents/skills/rt-scenario-w001/SKILL.md +635 -0
  178. package/packaged-assets/.agents/skills/rt-scenario-w002/SKILL.md +612 -0
  179. package/packaged-assets/.agents/skills/rt-scenario-w003/SKILL.md +449 -0
  180. package/packaged-assets/.agents/skills/rt-scenario-w004/SKILL.md +648 -0
  181. package/packaged-assets/.agents/skills/rt-scenario-w005/SKILL.md +479 -0
  182. package/packaged-assets/.agents/skills/rt-scenario-w006/SKILL.md +443 -0
  183. package/packaged-assets/.agents/skills/rt-scenario-w007/SKILL.md +494 -0
  184. package/packaged-assets/.agents/skills/rt-scenario-w008/SKILL.md +576 -0
  185. package/packaged-assets/.agents/skills/rt-scenario-w009/SKILL.md +518 -0
  186. package/packaged-assets/.agents/skills/rt-scenario-w010/SKILL.md +574 -0
  187. package/packaged-assets/.agents/skills/rt-scope-definition/SKILL.md +79 -0
  188. package/packaged-assets/.agents/skills/rt-scope-definition/workflow.md +68 -0
  189. package/packaged-assets/.agents/skills/rt-shodan-recon/SKILL.md +880 -0
  190. package/packaged-assets/.agents/skills/rt-status/SKILL.md +64 -0
  191. package/packaged-assets/.agents/skills/rt-subdomain-enum/SKILL.md +906 -0
  192. package/packaged-assets/.agents/skills/rt-subdomain-enum/workflow.md +68 -0
  193. package/packaged-assets/.agents/skills/rt-technical-report/SKILL.md +710 -0
  194. package/packaged-assets/.agents/skills/rt-technical-report/template.md +41 -0
  195. package/packaged-assets/.agents/skills/rt-technical-report/workflow.md +68 -0
  196. package/packaged-assets/.agents/skills/rt-threat-model/SKILL.md +59 -0
  197. package/packaged-assets/.agents/skills/rt-threat-model/template.md +32 -0
  198. package/packaged-assets/.agents/skills/rt-threat-model/workflow.md +68 -0
  199. package/packaged-assets/.agents/skills/rt-timeline/SKILL.md +338 -0
  200. package/packaged-assets/RTEXIT.md +127 -0
  201. package/tools/installer/lib/asset-manifest.js +10 -5
  202. package/tools/installer/lib/copy-assets.js +5 -2
  203. /package/{_rtexit → packaged-assets/_rtexit}/config.toml +0 -0
  204. /package/{_rtexit → packaged-assets/_rtexit}/config.user.toml +0 -0
  205. /package/{_rtexit → packaged-assets/_rtexit}/custom/config.toml +0 -0
  206. /package/{_rtexit → packaged-assets/_rtexit}/scripts/autodoc_engine.py +0 -0
  207. /package/{_rtexit → packaged-assets/_rtexit}/scripts/finding_tracker.py +0 -0
  208. /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_config.py +0 -0
  209. /package/{_rtexit → packaged-assets/_rtexit}/scripts/resolve_customization.py +0 -0
  210. /package/{resources → packaged-assets/resources}/certifications.md +0 -0
  211. /package/{resources → packaged-assets/resources}/payloads.md +0 -0
  212. /package/{resources → packaged-assets/resources}/tools.md +0 -0
  213. /package/{resources → packaged-assets/resources}/wordlists.md +0 -0
  214. /package/{templates → packaged-assets/templates}/attack-chain-template.md +0 -0
  215. /package/{templates → packaged-assets/templates}/executive-report-template.md +0 -0
  216. /package/{templates → packaged-assets/templates}/executive-report.md +0 -0
  217. /package/{templates → packaged-assets/templates}/finding-template.md +0 -0
  218. /package/{templates → packaged-assets/templates}/remediation-roadmap.md +0 -0
  219. /package/{templates → packaged-assets/templates}/sead-template.md +0 -0
  220. /package/{templates → packaged-assets/templates}/technical-report.md +0 -0
@@ -0,0 +1,687 @@
1
+ ---
2
+ name: rt-finding-document
3
+ description: "Document a single security finding with full professional template: severity, CVSS 4.0 vector, CWE, CVE, MITRE ATT&CK technique, asset, description, technical evidence with screenshots, business impact, step-by-step reproduction, and remediation tiers (immediate/short-term/long-term). Adds to findings-master.csv and creates F-XXX.md automatically via finding_tracker.py."
4
+ ---
5
+
6
+ # rt-finding-document — Security Finding Documentation
7
+
8
+ ## 1. Overview and Purpose
9
+
10
+ This skill produces a complete, audit-grade security finding document for a single confirmed vulnerability. It is the primary documentation unit of every RTExit engagement — every exploitation result must pass through this skill before it appears in a report.
11
+
12
+ ### Where This Skill Sits in the Engagement Lifecycle
13
+
14
+ ```
15
+ Planning → Reconnaissance → Exploitation → [rt-finding-document] → Reporting
16
+ ↑ ↓
17
+ Every confirmed findings-master.csv
18
+ vulnerability F-XXX.md per finding
19
+ chain-of-custody.md
20
+ timeline.md
21
+ ```
22
+
23
+ A finding document serves three audiences simultaneously:
24
+
25
+ - **Executive / CISO** — wants to understand business risk and urgency without reading technical detail
26
+ - **Security Engineer** — needs the exact reproduction steps and evidence to validate and fix
27
+ - **Legal / Auditor** — requires chain of custody, timestamps, operator identity, and hash-verified evidence
28
+
29
+ ### What This Skill Produces
30
+
31
+ 1. A row in `_rtexit-output/docs/findings/findings-master.csv` — the master tracker
32
+ 2. An individual `F-XXX.md` file in `_rtexit-output/docs/findings/` — the full finding document
33
+ 3. A chain-of-custody entry in `_rtexit-output/docs/evidence/chain-of-custody.md` for every evidence artefact
34
+ 4. A timeline entry in `_rtexit-output/docs/engagement/timeline.md`
35
+
36
+ ---
37
+
38
+ ## 2. Pre-Flight Checklist
39
+
40
+ Before invoking this skill, confirm the following:
41
+
42
+ - [ ] The vulnerability has been confirmed (not just suspected) — you have working proof-of-concept output
43
+ - [ ] Evidence is saved: screenshots in `_rtexit-output/docs/evidence/screenshots/`, raw HTTP logs in `_rtexit-output/docs/evidence/http-logs/`, terminal output in `_rtexit-output/docs/evidence/terminal-logs/`
44
+ - [ ] You know the exact asset (URL, IP, service name)
45
+ - [ ] You have at minimum: severity classification, CVSS 4.0 score, and one CWE number
46
+ - [ ] The engagement SEAD (Scoped Engagement Authorization Document) is in place — you must not document a finding on an unauthorized target
47
+
48
+ ---
49
+
50
+ ## 3. Step-by-Step Workflow
51
+
52
+ ### Step 1 — Gather the Raw Facts
53
+
54
+ Collect the following before opening any template. Do not write prose yet; just collect raw data points.
55
+
56
+ ```
57
+ Title : [one-line, specific, noun-phrase — not "SQL Injection" but
58
+ "SQL Injection in /api/v2/search Allows Unauthenticated Data Extraction"]
59
+ Severity : CRITICAL / HIGH / MEDIUM / LOW / INFO
60
+ CVSS 4.0 Score : [numeric, e.g. 9.3]
61
+ CVSS 4.0 Vector: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
62
+ CWE : CWE-89 (SQL Injection)
63
+ CVE : CVE-2024-XXXXX (if applicable) or N/A
64
+ MITRE ATT&CK : T1190 (Exploit Public-Facing Application) or more specific technique
65
+ Asset : https://api.targetcorp.com/api/v2/search
66
+ Phase : exploitation (or post-exploitation, recon, etc.)
67
+ Operator : [your name from config.user.toml]
68
+ ```
69
+
70
+ ### Step 2 — Register the Finding with finding_tracker.py
71
+
72
+ Run this command from the project root. It creates the finding ID (F-001, F-002, etc.) and writes the skeleton `F-XXX.md`:
73
+
74
+ ```bash
75
+ python3 _rtexit/scripts/finding_tracker.py add \
76
+ "SQL Injection in /api/v2/search Allows Unauthenticated Data Extraction" \
77
+ CRITICAL \
78
+ 9.3 \
79
+ "https://api.targetcorp.com/api/v2/search" \
80
+ --cwe "CWE-89" \
81
+ --cve "N/A" \
82
+ --mitre "T1190" \
83
+ --phase "exploitation" \
84
+ --operator "Ahmed"
85
+ ```
86
+
87
+ Expected output:
88
+ ```
89
+ ✅ Added: F-003 — SQL Injection in /api/v2/search Allows Unauthenticated Data Extraction [CRITICAL]
90
+ File: _rtexit-output/docs/findings/F-003.md
91
+ ```
92
+
93
+ ### Step 3 — Fill in the Finding Document
94
+
95
+ Open the generated `F-XXX.md`. The skeleton contains section headers — fill each one completely using the guidance in Section 4 below.
96
+
97
+ ### Step 4 — Log Evidence to Chain of Custody
98
+
99
+ For every screenshot, HTTP log, or terminal output tied to this finding:
100
+
101
+ ```bash
102
+ # For a screenshot file
103
+ python3 _rtexit/scripts/autodoc_engine.py custody \
104
+ --finding F-003 \
105
+ --evidence "_rtexit-output/docs/evidence/screenshots/F-003-sqli-dump.png" \
106
+ --operator "Ahmed"
107
+
108
+ # For a terminal log file
109
+ python3 _rtexit/scripts/autodoc_engine.py custody \
110
+ --finding F-003 \
111
+ --evidence "_rtexit-output/docs/evidence/terminal-logs/20260531_sqlmap_F-003.txt" \
112
+ --operator "Ahmed"
113
+ ```
114
+
115
+ The script computes SHA-256 of each file and appends to `chain-of-custody.md`.
116
+
117
+ ### Step 5 — Log the Activity to Timeline
118
+
119
+ ```bash
120
+ python3 _rtexit/scripts/autodoc_engine.py log \
121
+ --skill rt-finding-document \
122
+ --phase "exploitation" \
123
+ --finding F-003 \
124
+ --operator "Ahmed" \
125
+ --note "Finding documented: SQL Injection in /api/v2/search"
126
+ ```
127
+
128
+ ### Step 6 — Peer-Review the Finding (Self-Check)
129
+
130
+ Run through the Quality Checklist in Section 6 before considering the finding complete. A finding that fails more than two checklist items must be revised before moving to report generation.
131
+
132
+ ### Step 7 — Verify the Master CSV
133
+
134
+ ```bash
135
+ python3 _rtexit/scripts/finding_tracker.py list
136
+ ```
137
+
138
+ Confirm the finding appears with correct severity and status (CONFIRMED).
139
+
140
+ ---
141
+
142
+ ## 4. Full Finding Template with Example Content
143
+
144
+ The following is a complete, filled example of `F-003.md` documenting a real-looking SQL Injection finding. Use this as the gold standard for what a completed finding looks like.
145
+
146
+ ---
147
+
148
+ ```markdown
149
+ ---
150
+ id: F-003
151
+ title: "SQL Injection in /api/v2/search Allows Unauthenticated Data Extraction"
152
+ severity: CRITICAL
153
+ cvss: 9.3
154
+ status: CONFIRMED
155
+ asset: https://api.targetcorp.com/api/v2/search
156
+ cwe: CWE-89
157
+ cve: N/A
158
+ mitre: T1190
159
+ date: 2026-05-31
160
+ ---
161
+
162
+ # F-003 — SQL Injection in /api/v2/search Allows Unauthenticated Data Extraction
163
+
164
+ ## Summary
165
+
166
+ | Field | Value |
167
+ |-------|-------|
168
+ | **Severity** | CRITICAL |
169
+ | **CVSS 4.0 Score** | 9.3 |
170
+ | **CVSS 4.0 Vector** | `CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H` |
171
+ | **CWE** | CWE-89 — Improper Neutralization of Special Elements used in an SQL Command |
172
+ | **CVE** | N/A |
173
+ | **MITRE ATT&CK** | T1190 — Exploit Public-Facing Application |
174
+ | **Asset** | https://api.targetcorp.com/api/v2/search |
175
+ | **Phase** | Exploitation |
176
+ | **Date** | 2026-05-31 |
177
+ | **Operator** | Ahmed |
178
+ | **Status** | CONFIRMED |
179
+
180
+ ---
181
+
182
+ ## Description
183
+
184
+ The `/api/v2/search` endpoint of the TargetCorp public API accepts a `query` parameter that is concatenated directly into a SQL SELECT statement without sanitization or parameterization. This allows an unauthenticated remote attacker to inject arbitrary SQL and extract the entire contents of the backend PostgreSQL database, including user credentials, session tokens, and payment card data.
185
+
186
+ The injection point is a GET parameter and requires no authentication header, making it trivially exploitable by automated tools or low-skill attackers. The database user executing queries (`app_user`) has SELECT privileges across all tables and UPDATE/DELETE privileges on the `users` and `sessions` tables, meaning an attacker can also modify or destroy data.
187
+
188
+ The root cause is the direct use of f-string interpolation (Python) in the ORM layer rather than parameterized queries, suggesting the vulnerable code was written without a security code review and is likely present in similar endpoints.
189
+
190
+ ---
191
+
192
+ ## CVSS 4.0 Score Justification
193
+
194
+ **Vector:** `CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H`
195
+
196
+ | Metric | Value | Justification |
197
+ |--------|-------|---------------|
198
+ | Attack Vector (AV) | Network (N) | Reachable over the internet, no physical access required |
199
+ | Attack Complexity (AC) | Low (L) | No special conditions; automated tools reproduce it trivially |
200
+ | Attack Requirements (AT) | None (N) | No target-side preconditions |
201
+ | Privileges Required (PR) | None (N) | Endpoint is unauthenticated |
202
+ | User Interaction (UI) | None (N) | No user action required |
203
+ | Vulnerable System Confidentiality (VC) | High (H) | Full database dump including PII, credentials, card data |
204
+ | Vulnerable System Integrity (VI) | High (H) | app_user can UPDATE/DELETE records |
205
+ | Vulnerable System Availability (VA) | High (H) | Heavy queries can cause denial-of-service on the DB |
206
+ | Subsequent System Confidentiality (SC) | High (H) | Extracted credentials can pivot to internal systems |
207
+ | Subsequent System Integrity (SI) | High (H) | Internal admin panel access via stolen credentials |
208
+ | Subsequent System Availability (SA) | High (H) | Potential full infrastructure compromise |
209
+
210
+ ---
211
+
212
+ ## Technical Evidence
213
+
214
+ ### Evidence 1 — Manual Injection Confirmation
215
+
216
+ HTTP request that triggers the error and confirms injection:
217
+
218
+ ```http
219
+ GET /api/v2/search?query=test'--&category=products HTTP/1.1
220
+ Host: api.targetcorp.com
221
+ User-Agent: Mozilla/5.0
222
+ Accept: application/json
223
+ ```
224
+
225
+ Response (HTTP 500):
226
+ ```json
227
+ {
228
+ "error": "DatabaseError",
229
+ "detail": "syntax error at or near \"--\" LINE 1: SELECT * FROM products WHERE name ILIKE '%test'--%-NOTICE:...",
230
+ "query": "SELECT * FROM products WHERE name ILIKE '%test'--%%' AND active=true",
231
+ "timestamp": "2026-05-31T09:14:22Z"
232
+ }
233
+ ```
234
+
235
+ The full SQL query is leaked in the error response, confirming:
236
+ 1. Injection point is inside single-quoted ILIKE clause
237
+ 2. Comment sequence (`--`) terminates the query
238
+ 3. The error response discloses the raw SQL — a secondary information disclosure finding
239
+
240
+ **Screenshot:** `evidence/screenshots/F-003-01-error-response.png`
241
+ **SHA-256:** `a3f8c1d2e4b7...` (see chain-of-custody.md)
242
+
243
+ ---
244
+
245
+ ### Evidence 2 — Boolean-Based Blind Extraction (Confirm DB Version)
246
+
247
+ ```http
248
+ GET /api/v2/search?query=test' AND 1=CAST(version() AS INTEGER)--&category=products HTTP/1.1
249
+ Host: api.targetcorp.com
250
+ ```
251
+
252
+ Response fragment shows `PostgreSQL 14.5 on x86_64-pc-linux-gnu` in the error detail, confirming the DBMS version.
253
+
254
+ ---
255
+
256
+ ### Evidence 3 — sqlmap Automated Dump (Credential Table)
257
+
258
+ ```bash
259
+ sqlmap -u "https://api.targetcorp.com/api/v2/search?query=test&category=products" \
260
+ -p query \
261
+ --dbms=postgresql \
262
+ --level=3 --risk=2 \
263
+ --dump -T users -C username,email,password_hash \
264
+ --batch \
265
+ --output-dir=_rtexit-output/docs/evidence/terminal-logs/
266
+ ```
267
+
268
+ Partial output (truncated at 5 rows — full dump in terminal log):
269
+
270
+ ```
271
+ Database: targetcorp_prod
272
+ Table: users
273
+ [5 entries]
274
+ +------------------+----------------------------+------------------------------------------------------------------+
275
+ | username | email | password_hash |
276
+ +------------------+----------------------------+------------------------------------------------------------------+
277
+ | admin | admin@targetcorp.com | $2b$12$KJH3nW8xLpQr9vT2mYsNcuEQWlD7fVgRbMPaJo6XiNkZ8dYqA3e4. |
278
+ | sarah.johnson | s.johnson@targetcorp.com | $2b$12$rT4wX1LpNq8mBvKs2jYnOeZQVdC5gUhSaPfRm7WkXiAb9cMtD6e2. |
279
+ | michael.chen | m.chen@targetcorp.com | $2b$12$vN6yZ2MrOp9nCwLt3kZoQfXSUeB8hViTbQgPa5YmWjDc1aNsE7f3. |
280
+ | api_service | api@internal.targetcorp | $2b$12$bJ8xA3KmPq7nVwLs4lYrRgZTVcC9iXkUaPmRb6WnYjEd2eMuF8g4. |
281
+ | john.williams | j.williams@targetcorp.com | $2b$12$cH7wB4LnQr8oWxMt5mZpShATUdD0jYlVbPnSc7XoZkFe3fNvG9h5. |
282
+ +------------------+----------------------------+------------------------------------------------------------------+
283
+ ```
284
+
285
+ **Full dump file:** `evidence/terminal-logs/20260531_sqlmap_F-003_users_dump.txt`
286
+ **SHA-256:** `b5e2d9f1a6c4...` (see chain-of-custody.md)
287
+
288
+ **Screenshot:** `evidence/screenshots/F-003-02-sqlmap-dump.png`
289
+
290
+ ---
291
+
292
+ ## Business Impact
293
+
294
+ ### Immediate Impact (Exploited Now)
295
+
296
+ - **Data Breach — User PII:** All 47,382 user records are accessible including full names, email addresses, phone numbers, and bcrypt password hashes. Under GDPR Article 33, a breach of this nature requires notification to the supervisory authority within 72 hours of discovery.
297
+ - **Credential Exposure:** Password hashes from admin accounts are now in attacker possession. Even bcrypt hashes are crackable for weak passwords; admin account compromise should be treated as confirmed pending password audit.
298
+ - **Payment Data Risk:** The `payments` table contains partial card numbers and billing addresses. A full dump of this table would trigger PCI-DSS incident response obligations (PCI-DSS v4.0 Requirement 12.10).
299
+
300
+ ### Escalation Paths (Observed)
301
+
302
+ - The `api_service` user credential found in the dump is used for internal microservice authentication. Cracking or reusing this credential enables lateral movement to the internal order management system at `orders-api.internal.targetcorp.com`.
303
+ - The admin password hash, if cracked, grants access to the admin panel at `https://admin.targetcorp.com` which manages all customer accounts, refunds, and shipping data.
304
+
305
+ ### Financial and Regulatory Exposure
306
+
307
+ | Risk | Estimated Exposure |
308
+ |------|--------------------|
309
+ | GDPR fine (Article 83(4)) | Up to 2% of global annual turnover |
310
+ | PCI-DSS non-compliance fine | $5,000–$100,000/month from card brand |
311
+ | Class action exposure (EU/UK) | Dependent on breach scope and geography |
312
+ | Reputational damage | Customer churn, media coverage |
313
+
314
+ ---
315
+
316
+ ## Reproduction Steps
317
+
318
+ Follow these steps in a controlled, authorized test environment. Do not run these steps against production unless authorized in writing.
319
+
320
+ **Prerequisites:** Burp Suite or curl, sqlmap installed, valid written authorization for `api.targetcorp.com`
321
+
322
+ 1. Open Burp Suite and set intercept mode ON. Navigate to `https://targetcorp.com` in the browser proxied through Burp.
323
+
324
+ 2. Trigger a product search to capture a request to `/api/v2/search`. The request should look like:
325
+ ```
326
+ GET /api/v2/search?query=laptop&category=products HTTP/1.1
327
+ Host: api.targetcorp.com
328
+ ```
329
+
330
+ 3. Send the request to Burp Repeater. Modify the `query` parameter to `laptop'` (single quote appended). Send the request. Observe an HTTP 500 response with a PostgreSQL error in the JSON body — this confirms the injection.
331
+
332
+ 4. Modify `query` to `laptop'--` to comment out the remainder of the SQL query. Observe the server returns HTTP 200 with normal results — the comment sequence successfully terminates the query, confirming control over the SQL structure.
333
+
334
+ 5. Run sqlmap to automate extraction:
335
+ ```bash
336
+ sqlmap -u "https://api.targetcorp.com/api/v2/search?query=test&category=products" \
337
+ -p query --dbms=postgresql --dbs --batch
338
+ ```
339
+ Observe sqlmap identifies `targetcorp_prod` as the active database.
340
+
341
+ 6. Dump the `users` table:
342
+ ```bash
343
+ sqlmap -u "https://api.targetcorp.com/api/v2/search?query=test&category=products" \
344
+ -p query --dbms=postgresql \
345
+ --dump -T users -D targetcorp_prod --batch
346
+ ```
347
+
348
+ 7. Document the full output. Take a screenshot of the terminal showing the dumped rows. Save to `evidence/screenshots/F-003-02-sqlmap-dump.png`.
349
+
350
+ **Expected result:** sqlmap successfully dumps usernames, email addresses, and bcrypt password hashes from the production database without providing any authentication credentials.
351
+
352
+ ---
353
+
354
+ ## Remediation
355
+
356
+ ### Immediate (0–24 hours)
357
+
358
+ - **Block the endpoint at WAF level.** Apply a WAF rule to reject requests where the `query` parameter contains SQL metacharacters (`'`, `"`, `;`, `--`, `/*`, `*/`, `UNION`, `SELECT`, `INSERT`, `DROP`). This is a temporary measure only — WAF rules can be bypassed and must not replace code fixes.
359
+ - **Rotate all database credentials.** Assume `app_user` credentials are compromised. Generate new credentials and redeploy the application.
360
+ - **Invalidate all active sessions.** All user session tokens must be invalidated immediately. Users will be forced to re-authenticate.
361
+ - **Enable database query logging.** Turn on PostgreSQL `log_statement = 'all'` and forward logs to SIEM to detect if active exploitation has occurred prior to this engagement.
362
+
363
+ ### Short-term (1–30 days)
364
+
365
+ - **Fix the vulnerable code using parameterized queries.** The Python backend must replace f-string SQL construction with parameterized queries using psycopg2 or SQLAlchemy's ORM:
366
+
367
+ **Vulnerable code (current):**
368
+ ```python
369
+ query = f"SELECT * FROM products WHERE name ILIKE '%{user_input}%' AND active=true"
370
+ cursor.execute(query)
371
+ ```
372
+
373
+ **Fixed code (parameterized):**
374
+ ```python
375
+ query = "SELECT * FROM products WHERE name ILIKE %s AND active=true"
376
+ cursor.execute(query, (f"%{user_input}%",))
377
+ ```
378
+
379
+ - **Suppress verbose error responses.** The API must never return raw SQL or internal stack traces. Return generic `{"error": "Search failed"}` and log details server-side only.
380
+ - **Audit all other API endpoints** for the same pattern. The same developer likely wrote similar search/filter endpoints. Run a SAST tool (Semgrep, Bandit) against the full codebase with the rule `python.django.security.injection.tainted-sql-string`.
381
+ - **Require security code review** for all database-touching code before merge.
382
+
383
+ ### Long-term
384
+
385
+ - **Adopt an ORM with no raw query escape hatches.** SQLAlchemy's Core/ORM with type-validated columns eliminates the class of error entirely when used correctly. Set lint rules that flag `text()` or `execute()` with string interpolation.
386
+ - **Implement database least-privilege.** `app_user` must have only the minimum permissions needed per table. The search endpoint needs only SELECT on the `products` table — not on `users` or `payments`.
387
+ - **Deploy application-level rate limiting** on all search endpoints to slow automated extraction even if an injection is later discovered.
388
+ - **Schedule quarterly DAST scans** against staging using sqlmap and OWASP ZAP as part of the CI/CD pipeline quality gate.
389
+
390
+ ---
391
+
392
+ ## References
393
+
394
+ - CWE-89: https://cwe.mitre.org/data/definitions/89.html
395
+ - MITRE ATT&CK T1190: https://attack.mitre.org/techniques/T1190/
396
+ - OWASP SQL Injection Prevention Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
397
+ - CVSS 4.0 Calculator: https://www.first.org/cvss/calculator/4.0
398
+ - sqlmap Documentation: https://sqlmap.org
399
+ - PCI-DSS v4.0 Requirement 6.3 (Injection Vulnerabilities): https://www.pcisecuritystandards.org
400
+ - GDPR Article 33 (Breach Notification): https://gdpr.eu/article-33-notification-of-a-personal-data-breach/
401
+ ```
402
+
403
+ ---
404
+
405
+ ## 5. Integration with finding_tracker.py and autodoc_engine.py
406
+
407
+ ### finding_tracker.py — Full Command Reference
408
+
409
+ ```bash
410
+ # Add a finding (creates CSV row + skeleton F-XXX.md)
411
+ python3 _rtexit/scripts/finding_tracker.py add \
412
+ "Title Here" SEVERITY CVSS_SCORE "asset.url" \
413
+ --cwe "CWE-NNN" \
414
+ --cve "CVE-YYYY-NNNNN or N/A" \
415
+ --mitre "TNNNN" \
416
+ --phase "exploitation" \
417
+ --operator "YourName" \
418
+ --notes "optional free text"
419
+
420
+ # List all findings (sorted by severity)
421
+ python3 _rtexit/scripts/finding_tracker.py list
422
+
423
+ # Filter by severity
424
+ python3 _rtexit/scripts/finding_tracker.py list --severity CRITICAL
425
+
426
+ # Filter by status
427
+ python3 _rtexit/scripts/finding_tracker.py list --status CONFIRMED
428
+
429
+ # Show statistics dashboard
430
+ python3 _rtexit/scripts/finding_tracker.py stats
431
+
432
+ # Export as markdown table (for pasting into reports)
433
+ python3 _rtexit/scripts/finding_tracker.py export --format md
434
+
435
+ # Export as JSON (for programmatic use)
436
+ python3 _rtexit/scripts/finding_tracker.py export --format json
437
+ ```
438
+
439
+ ### autodoc_engine.py — Evidence and Timeline Commands
440
+
441
+ ```bash
442
+ # Log evidence file to chain of custody (computes SHA-256 automatically)
443
+ python3 _rtexit/scripts/autodoc_engine.py custody \
444
+ --finding F-003 \
445
+ --evidence "_rtexit-output/docs/evidence/screenshots/F-003-sqli-dump.png" \
446
+ --operator "Ahmed"
447
+
448
+ # Log a text description as evidence (for non-file evidence)
449
+ python3 _rtexit/scripts/autodoc_engine.py custody \
450
+ --finding F-003 \
451
+ --evidence "Burp Suite session file exported as F-003-burp-session.xml" \
452
+ --operator "Ahmed"
453
+
454
+ # Log a command and its output to timeline + terminal-logs
455
+ python3 _rtexit/scripts/autodoc_engine.py log \
456
+ --skill rt-finding-document \
457
+ --phase "exploitation" \
458
+ --cmd "sqlmap -u 'https://api.targetcorp.com/api/v2/search?query=test' -p query --dbs" \
459
+ --output "$(cat sqlmap_output.txt)" \
460
+ --finding F-003 \
461
+ --operator "Ahmed"
462
+
463
+ # View the full engagement timeline
464
+ python3 _rtexit/scripts/autodoc_engine.py timeline
465
+ ```
466
+
467
+ ### File Layout After Documenting Three Findings
468
+
469
+ ```
470
+ _rtexit-output/
471
+ docs/
472
+ findings/
473
+ findings-master.csv ← all findings, one row each
474
+ F-001.md ← individual finding documents
475
+ F-002.md
476
+ F-003.md
477
+ evidence/
478
+ screenshots/
479
+ F-001-xss-popup.png
480
+ F-002-idor-response.png
481
+ F-003-01-error-response.png
482
+ F-003-02-sqlmap-dump.png
483
+ terminal-logs/
484
+ 20260531_sqlmap_F-003_users_dump.txt
485
+ chain-of-custody.md ← hashed evidence log
486
+ engagement/
487
+ timeline.md ← timestamped activity log
488
+ ```
489
+
490
+ ### findings-master.csv Schema
491
+
492
+ | Column | Description | Example |
493
+ |--------|-------------|---------|
494
+ | id | Auto-assigned finding ID | F-003 |
495
+ | title | One-line finding title | SQL Injection in /api/v2/search... |
496
+ | severity | CRITICAL/HIGH/MEDIUM/LOW/INFO | CRITICAL |
497
+ | cvss | Numeric CVSS 4.0 score | 9.3 |
498
+ | status | CONFIRMED/UNCONFIRMED/MITIGATED | CONFIRMED |
499
+ | asset | Target asset URL or IP | https://api.targetcorp.com/... |
500
+ | cwe | CWE identifier | CWE-89 |
501
+ | cve | CVE number or N/A | N/A |
502
+ | mitre | MITRE ATT&CK technique ID | T1190 |
503
+ | phase | Engagement phase | exploitation |
504
+ | date | ISO date documented | 2026-05-31 |
505
+ | operator | Documenting operator | Ahmed |
506
+ | notes | Free text notes | Pivots to internal admin panel |
507
+
508
+ ---
509
+
510
+ ## 6. Quality Checklist
511
+
512
+ Run through this checklist before marking any finding complete. Every item must be checked.
513
+
514
+ ### Title Quality
515
+ - [ ] Title is a specific noun phrase, not a category name ("SQL Injection in /api/v2/search parameter `query`" not "SQL Injection")
516
+ - [ ] Title indicates what can be done as a result of the vulnerability ("Allows Unauthenticated Data Extraction")
517
+ - [ ] Title does not contain abbreviations or jargon that a non-technical executive cannot parse
518
+
519
+ ### Severity and Scoring
520
+ - [ ] CVSS 4.0 score is correct (use https://www.first.org/cvss/calculator/4.0 to verify)
521
+ - [ ] CVSS vector string is present and valid (begins with `CVSS:4.0/`)
522
+ - [ ] Every CVSS metric has a written justification in the score table
523
+ - [ ] Severity label (CRITICAL/HIGH/MEDIUM/LOW) matches the numeric score
524
+ - [ ] CWE number is correct and specific (CWE-89 not CWE-20)
525
+
526
+ ### Evidence
527
+ - [ ] At least one screenshot exists and is referenced in the document
528
+ - [ ] At least one raw HTTP request/response or terminal output is included verbatim
529
+ - [ ] Evidence files are saved under `_rtexit-output/docs/evidence/`
530
+ - [ ] Every evidence artefact has a chain-of-custody entry with SHA-256 hash
531
+ - [ ] Evidence is sufficient for a third party to independently verify the finding (no "trust me" findings)
532
+
533
+ ### Description
534
+ - [ ] Description explains the root cause (not just the symptom)
535
+ - [ ] Description names the specific vulnerable component, parameter, or function
536
+ - [ ] Description is written so a developer who did not witness the test can understand what went wrong
537
+
538
+ ### Business Impact
539
+ - [ ] Impact section addresses data confidentiality, integrity, and availability separately
540
+ - [ ] Impact references specific data types (PII, credentials, payment data) rather than generic "sensitive data"
541
+ - [ ] Impact includes at least one regulatory or financial consequence where applicable
542
+ - [ ] Escalation paths are documented if lateral movement is possible
543
+
544
+ ### Reproduction Steps
545
+ - [ ] Steps begin from zero (no assumed context)
546
+ - [ ] Every step is actionable — no vague instructions like "exploit the vulnerability"
547
+ - [ ] Exact payloads, commands, and tool flags are included
548
+ - [ ] Prerequisites (tools, access, environment) are stated upfront
549
+ - [ ] Expected result is stated so the reader knows when they have succeeded
550
+
551
+ ### Remediation
552
+ - [ ] Immediate tier addresses what can be done today without a code change (WAF, session invalidation, rate limit)
553
+ - [ ] Short-term tier includes the specific code fix with before/after example
554
+ - [ ] Long-term tier addresses systemic or architectural improvement
555
+ - [ ] Remediation is specific to the finding — not generic boilerplate
556
+
557
+ ---
558
+
559
+ ## 7. Common Mistakes to Avoid
560
+
561
+ ### Mistake 1 — Vague Titles
562
+
563
+ Bad:
564
+ ```
565
+ SQL Injection
566
+ ```
567
+
568
+ Good:
569
+ ```
570
+ SQL Injection in /api/v2/search `query` Parameter Allows Unauthenticated Full Database Dump
571
+ ```
572
+
573
+ The title is the first thing an executive reads. It must convey the attack surface, the mechanism, and the consequence.
574
+
575
+ ---
576
+
577
+ ### Mistake 2 — Missing CVSS Justification
578
+
579
+ Bad: Listing a CVSS score with no explanation of why each metric was chosen.
580
+
581
+ Good: A table explaining each metric value and why it applies to this specific finding. Without justification, the client's security team will dispute the score in the review meeting.
582
+
583
+ ---
584
+
585
+ ### Mistake 3 — Generic Business Impact
586
+
587
+ Bad:
588
+ ```
589
+ This vulnerability could allow attackers to access sensitive information, which may have significant business impact.
590
+ ```
591
+
592
+ Good:
593
+ ```
594
+ Exploitation enables extraction of the full users table (47,382 records) including bcrypt password hashes and email addresses. Under GDPR Article 33, notification to the DPA is required within 72 hours. The admin credential hash, if cracked, provides access to the admin panel controlling all customer orders and refunds.
595
+ ```
596
+
597
+ ---
598
+
599
+ ### Mistake 4 — Evidence Without Chain of Custody
600
+
601
+ A screenshot with no hash, no timestamp, no operator annotation is inadmissible in a legal context and will be challenged by a client disputing a finding. Always run the `autodoc_engine.py custody` command immediately after saving each evidence file.
602
+
603
+ ---
604
+
605
+ ### Mistake 5 — Reproduction Steps That Skip Context
606
+
607
+ Bad:
608
+ ```
609
+ 1. Send the malicious payload
610
+ 2. Observe the error
611
+ ```
612
+
613
+ Good:
614
+ ```
615
+ 1. Open Burp Suite and configure the browser to proxy through 127.0.0.1:8080
616
+ 2. Navigate to https://targetcorp.com/products and search for "laptop" to capture a baseline request
617
+ 3. Send the request to Burp Repeater and modify the `query` parameter from `laptop` to `laptop'`
618
+ 4. Forward the request and observe HTTP 500 with PostgreSQL error in response body
619
+ ```
620
+
621
+ ---
622
+
623
+ ### Mistake 6 — Copy-Paste Remediation
624
+
625
+ Bad (copied from OWASP):
626
+ ```
627
+ Use parameterized queries and prepared statements.
628
+ ```
629
+
630
+ Good:
631
+ ```
632
+ The vulnerable code in api/search/views.py line 47 uses f-string interpolation. Replace with:
633
+ query = "SELECT * FROM products WHERE name ILIKE %s AND active=true"
634
+ cursor.execute(query, (f"%{user_input}%",))
635
+ Also suppress the error detail in the JSON response — return {"error": "Search failed"} and log the exception to the application log only.
636
+ ```
637
+
638
+ Developers implement fixes faster when told exactly which file, which line, and what the replacement code should be.
639
+
640
+ ---
641
+
642
+ ### Mistake 7 — Documenting an Unconfirmed Finding as CONFIRMED
643
+
644
+ A finding is CONFIRMED only when you have working proof. If sqlmap identifies a potential injection but you have not successfully extracted data, the status must be UNCONFIRMED. Use `--status UNCONFIRMED` in the `finding_tracker.py add` command until you have extracted data or demonstrated impact.
645
+
646
+ ---
647
+
648
+ ## 8. CVSS 4.0 Quick Reference
649
+
650
+ ### Common Score Patterns for Web Findings
651
+
652
+ | Finding Type | Typical CVSS 4.0 | Typical Vector (abbreviated) |
653
+ |--------------|-----------------|-------------------------------|
654
+ | Unauthenticated RCE | 9.3–10.0 | AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H |
655
+ | Auth SQL Injection (full DB dump) | 8.5–9.0 | AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:L |
656
+ | Stored XSS (admin panel) | 7.0–8.5 | AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:N |
657
+ | IDOR (own data only) | 4.3–5.5 | AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N |
658
+ | Open Redirect | 4.0–5.0 | AV:N/AC:L/AT:N/PR:N/UI:R/VC:N/VI:L/VA:N |
659
+ | Information Disclosure (non-sensitive) | 2.0–4.0 | AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N |
660
+ | Missing Security Header | 0.0–2.0 | AV:N/AC:H/AT:P/PR:N/UI:R/VC:L/VI:N/VA:N |
661
+
662
+ Always compute the actual score using the official calculator — these ranges are guidance only.
663
+
664
+ ---
665
+
666
+ ## 9. Severity Classification Guide
667
+
668
+ | Severity | CVSS 4.0 Range | Criteria |
669
+ |----------|---------------|----------|
670
+ | CRITICAL | 9.0–10.0 | Unauthenticated, remote, high impact on confidentiality/integrity/availability, or direct path to full system compromise |
671
+ | HIGH | 7.0–8.9 | Authenticated but high impact, or unauthenticated with medium impact, or enables lateral movement |
672
+ | MEDIUM | 4.0–6.9 | Requires authentication or user interaction, moderate impact, limited scope |
673
+ | LOW | 0.1–3.9 | Difficult to exploit, minor impact, defense-in-depth improvement |
674
+ | INFO | 0.0 | No direct exploitability; misconfiguration, best practice deviation, or informational observation |
675
+
676
+ ---
677
+
678
+ ## 10. Integration with Other Skills
679
+
680
+ | Scenario | Next Skill to Invoke |
681
+ |----------|---------------------|
682
+ | After documenting all findings | `rt-agent-scribe` → TR (Technical Report) |
683
+ | Need to map finding to MITRE ATT&CK | `rt-agent-scribe` → MM |
684
+ | Need to write a reproducible PoC | `rt-agent-scribe` → PC |
685
+ | Need to map to compliance framework | `rt-agent-scribe` → CM |
686
+ | Multiple findings suggest an attack chain | `rt-attack-surface-map` or document in `attack-chains/` |
687
+ | Client wants executive summary | `rt-agent-scribe` → ER |