Departments / security / pentest-report

pentest-report

Use when the user asks to "write up a pentest report", "assemble a security assessment deliverable", or convert audit outputs into a client-ready document. Produces a structured report with executive summary, methodology, scope, findings (CVSS + CWE + remediation), risk matrix, and raw-evidence appendix from scanner JSON plus manual notes.

Department

Security

Safety

writes-local
Writes locally

Supported stacks

Stack-agnostic — no detection required.

When to use

Trigger on any of:

Do not use to perform the assessment. This skill only assembles the report from evidence already collected.

Inputs

Example ENGAGEMENT_META:

engagement: "Q3 2026 External Web App Assessment"
client: "Acme Corp"
testers:
  - "Taylor Reyes <taylor@secfirm.example>"
window:
  start: "2026-04-05"
  end:   "2026-04-12"
scope:
  in:
    - https://app.acme.example
    - https://api.acme.example
  out:
    - https://blog.acme.example
methodology:
  - "OWASP WSTG v4.2"
  - "PTES Technical Guidelines"

Outputs

Tool dependencies

Procedure

  1. Load ENGAGEMENT_META and validate required fields (client, window, scope, testers).
  2. Collect findings:
    • From $AUDIT_DIR/findings.normalized.json (security-audit output).
    • From $AUDIT_DIR/secrets.deduped.json (secret-scanner output).
    • From $AUDIT_DIR/dep-audit.normalized.json (dependency-audit output).
    • From $MANUAL_NOTES (parsed: each H3 becomes a finding).
  3. Normalize each finding into the report schema:
    { title, severity, cvss_score, cvss_vector, cwe, description,
      evidence (markdown block with code fences + image refs),
      impact, remediation, references[], status }
  4. Deduplicate across sources by (cwe, affected_asset) — if two scanners found the same issue, merge evidence blocks and keep the higher CVSS.
  5. Assign each finding a stable ID: FIND-<YEAR>-<0-padded-index>.
  6. Assemble the document per references/report-template.md:
    • Title page + engagement metadata.
    • Executive Summary (non-technical; counts per severity; business impact paragraph; 3 headline recommendations).
    • Scope (in/out, test windows, test accounts used).
    • Methodology (tools, frameworks cited from meta).
    • Findings (ordered by severity desc, then CVSS desc).
    • Risk Matrix (Impact x Likelihood 5x5, each cell lists finding IDs).
    • Recommendations (strategic, beyond per-finding fixes).
    • Appendix A: Raw evidence pointers (relative paths into $AUDIT_DIR).
    • Appendix B: Tool versions.
  7. Emit pentest-report.risk-matrix.csv: finding_id,likelihood(1-5),impact(1-5),risk(likelihood*impact).
  8. Optionally convert: pandoc $OUT_FILE -o pentest-report.docx --reference-doc=corp-template.docx.

Examples

Example 1 — Assemble from a security-audit run

AUDIT_DIR=/tmp/audit-checkout \
ENGAGEMENT_META=./engagement.yaml \
OUT_FILE=./checkout-pentest.md \
./assemble.sh

Expected head of checkout-pentest.md:

# Q3 2026 External Web App Assessment

**Client:** Acme Corp
**Testers:** Taylor Reyes <taylor@secfirm.example>
**Window:** 2026-04-05 – 2026-04-12
**Document status:** FINAL v1.0

## Executive Summary
During the seven-day assessment, one Critical and four High-severity issues
were identified. The Critical issue (FIND-2026-001) allows unauthenticated
order manipulation via an IDOR in /api/orders and should be remediated
within 24 hours per Acme's SLA. ...

Example 2 — Merge manual + scanner findings

AUDIT_DIR=./scans \
MANUAL_NOTES=./manual-findings.md \
ENGAGEMENT_META=./engagement.yaml \
./assemble.sh

Expected log:

[pentest-report] scanner findings: 27 (dedup: 19)
[pentest-report] manual findings: 4
[pentest-report] merged total: 22 (1 critical, 4 high, 9 medium, 8 low)
[pentest-report] wrote ./pentest-report.md (48 KB)
[pentest-report] wrote ./pentest-report.findings.json
[pentest-report] wrote ./pentest-report.risk-matrix.csv

Constraints

Quality checks

Customise for your organisation

pentest-report

The LLM will rewrite this skill for your environment. Your API key and form inputs stay in your browser — only the skill and your environment go to OpenRouter.

One line. Be specific — cloud, language, framework, orchestrator.

Free text that steers the rewrite. Leave blank if nothing specific.

cost estimate: