plugins/oh-my-secuaudit/skills/security-testing-as-code/SKILL.md
Transform security assessment deliverables from static documents (Word/Excel/portal) into version-controlled, executable projects. PoCs replace narrative claims; saved HTTP requests replace checkboxes; commit hashes enable exact-state reproduction. Use when scoping methodology for an audit, when an existing assessment needs to be made reproducible, or when assessment outputs must be inheritable across teams.
npx skillsauth add windshock/oh-my-secuaudit security-testing-as-codeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Transform security assessment deliverables from static documents into version-controlled, executable projects. Findings become reproducible code; evidence becomes artifacts; knowledge becomes inheritable structure.
"A diagnosis is a document" is the fundamental flaw. A diagnosis should be a project.
Traditional security reports (Word, Excel, portal entries) produce ephemeral knowledge that dies upon publication. This skill converts assessment outputs into living, version-controlled projects where:
sec-audit-static, sec-audit-dast, external-software-analysis)Every assessment produces a self-contained project directory:
assessment/
├── README.md ← Overall context, progress status, how to run
├── handoff-plan.md ← Gap analysis, inheritance specs for next assessor
├── analysis/
│ ├── attack-surface/ ← Endpoint/integration/asset inventory
│ ├── findings/ ← Structured finding records (JSON/markdown)
│ └── threat-model/ ← DFD, trust boundaries, attack scenarios
├── artifacts/
│ ├── poc/ ← Reproducible PoC code per finding
│ │ ├── <finding-id>/ ← One directory per PoC
│ │ │ ├── README.md ← Setup, run instructions, expected output
│ │ │ ├── exploit.* ← Exploit code (any language)
│ │ │ ├── Dockerfile ← (optional) Reproducible environment
│ │ │ └── evidence/ ← Screenshots, logs from successful run
│ │ └── ...
│ └── runtime/ ← HTTP evidence, config snapshots
│ ├── requests/ ← Saved HTTP request/response pairs
│ ├── configs/ ← Captured service configurations
│ └── scans/ ← Tool output (Semgrep, nuclei, etc.)
├── inputs/
│ ├── threat-intel/ ← Advisory research, CVE/KEV context
│ ├── scope/ ← Engagement scope, target definitions
│ └── prior-assessments/ ← Previous cycle artifacts (for delta)
└── outputs/
├── report.md ← Final narrative report
├── finding_summary.json ← Machine-readable finding index
└── reporting_summary.json ← Cross-skill reporting summary
README.md with:
inputs/scope/ with engagement boundaries.artifacts/runtime/scans/.analysis/attack-surface/ inventory:
inputs/prior-assessments/.For each finding:
Create finding record in analysis/findings/:
{
"id": "FINDING-001",
"title": "XSS in search parameter",
"severity": "High",
"category": "XSS",
"provenance": "source-confirmed",
"impacted_flow": ["F1"],
"evidence_path": "artifacts/poc/FINDING-001/",
"status": "confirmed"
}
Note on schema scope: this per-finding file format is the methodology view of a finding and is intentionally distinct from the producer
finding_schema.json, which is a task-wrapper schema ({task_id, status, findings[], metadata}). The two are at different pipeline positions: producers emit task-level outputs, methodology files capture the per-finding assessor view with PoC/runtime evidence pointers. Per-finding files inanalysis/findings/should NOT be validated against the producerfinding_schema.jsondirectly. The formal contract between the two views is tracked in PR #4 / ADR-0006; the canonical schema and the producer↔methodology mapping will be defined in a follow-up ADR. Thestatus,severity, andprovenanceenums in the template match the closed enums in ADR-0003 and ADR-0005 so values are interchangeable across the two views.
Build PoC in artifacts/poc/FINDING-001/:
README.md with exact reproduction stepsevidence/ with captured output from successful executionDockerfile for environment isolationSave runtime evidence in artifacts/runtime/requests/:
Every PoC must meet these criteria:
| Criterion | Requirement | |---|---| | Reproducible | Another assessor can run it and get the same result | | Self-contained | All dependencies documented or containerized | | Non-destructive | Safe to run against target (no data loss, no DoS) | | Documented | README explains what it proves and what "success" looks like | | Versioned | Tied to a specific commit/state of the target |
PoC types by finding category:
| Category | PoC Format | Example | |---|---|---| | Injection (XSS/SQLi) | Payload + request capture | curl command + response showing injection | | Fuzzing discovery | Fuzzer config + corpus + crash log | Jazzer/AFL harness + evidence | | Auth bypass | Test script with two scenarios | With auth vs without auth comparison | | Deserialization | Gadget chain + trigger | Payload generator + server response | | Config weakness | Config diff + impact demo | Vulnerable vs hardened config comparison |
Create handoff-plan.md documenting:
outputs/report.md — narrative report with links to artifactsoutputs/finding_summary.json — machine-readable indexoutputs/reporting_summary.json — compatible with sec-audit-static reporting schema| Concept | Medical Certificate (bad) | Medical Records (good) | |---|---|---| | Nature | One-time result snapshot | Progressive, inheritable documentation | | Reproduction | "Trust me, I checked" | "Run this command, see this output" | | Handoff | Start from scratch | Continue from documented state | | Version | None | Git commit = exact state | | Knowledge | Dies with the author | Lives in the repository |
| Skill | Integration Point |
|---|---|
| sec-audit-static | Findings become analysis/findings/, tool outputs go to artifacts/runtime/scans/ |
| sec-audit-dast | SARIF outputs go to artifacts/runtime/scans/, probes become PoCs |
| external-software-analysis | Binary analysis notes go to analysis/, decompilation artifacts preserved |
| sec-cluster | Cluster definitions inform analysis/attack-surface/ organization |
| security-architecture-review | DFD/attack flow go to analysis/threat-model/, SPRs reference finding IDs |
| Anti-Pattern | Why It's Bad | Do This Instead | |---|---|---| | Screenshot-only evidence | Not reproducible, not searchable | Save the actual request/response + command | | "Verified" without artifacts | Unverifiable claim | Link to PoC directory with run instructions | | Findings in report only | Lost when report format changes | Structured JSON + markdown + PoC code | | Hardcoded absolute paths | Breaks on another machine | Use relative paths from project root | | Credentials in artifacts | Security risk | Reference credential store, never embed |
references/project_structure.md — Detailed directory layout referencereferences/poc_standards.md — PoC quality and safety guidelinestemplates/assessment/ — Starter project template (copy to begin)templates/finding.json — Finding record templatetemplates/poc-readme.md — PoC README templatetemplates/handoff-plan.md — Handoff plan templatetesting
Query multi-source AppSec catalogs (CWE / OWASP Cheat Sheet Series / GitHub Advisory Database / AppSec.fyi) for a given security finding and propose a synthesis row to the security-field-notes synthesis-ledger via PR. Use when a producer skill (sec-audit-static, sec-audit-dast, external-software-analysis) emits a finding that needs external reference enrichment, or when packaging an assessment finding for downstream remediation context.
development
Security architecture review for codebases, producing Data Flow Diagram (DFD) with trust boundaries, Attack Flow overlay, scoped attack surface inventory, sensitive data map, and risk summary grounded in code. Use when asked to perform architecture-focused security review, reconstruct security design from code, or produce DFD/attack-flow documentation.
development
Dataflow-based code clustering for security assessments. Groups (Endpoint, Sink) paths by shared review strategy so reviewers sample representative cases instead of exhaustively reviewing every path. Use when scoping manual review on a codebase with 50+ endpoints, repetitive sanitization patterns, or after initial SAST/SCA produces large finding sets that need triage.
development
Static code security audit playbook (SAST, SCA, secret detection) with standardized JSON outputs and reporting. Use for source-code based assessments, schema validation, and generating final reports.