Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Client-facing red-team deliverable format — codifies the Subject / Observations / Description / Impact / Recommendation / PoC structure used for external red-team engagements (not bug-bounty platform reports). Different audience, different tone, different cadence. Built from an authorized engagement deliverable where 14 findings were packaged into a 52KB MD + 2.2MB DOCX with 16 embedded screenshots. Use when the engagement is "external red team for an enterprise client" (not H1/Bugcrowd/Intigrit
.claude/skills/elementalsouls-redteam-report-template/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 111% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 231% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 224% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 236% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 95% | 0% |
Use this skill for client-deliverable reports:
Do NOT use for:
report-writing / bugcrowd-reporting instead)This is the canonical structure each finding follows:
markdown## Finding F##: <descriptive title> **Severity:** Critical / High / Medium / Low / Informational **Status:** Confirmed / Patched mid-engagement / Suspected (1 signal) **CVSS 3.1:** <score> (<vector>) **Affected Asset:** <URL / IP / app name> ### 1. Subject <One-line statement of the issue. Plain English, no jargon.> ### 2. Observations <Bulleted list of what was observed during testing. Concrete facts only — no interpretation yet.> - <Observation 1> - <Observation 2> - ... ### 3. Description <Technical explanation of the vulnerability. 2-4 paragraphs. Reader should understand WHY the observations indicate a vulnerability, what the underlying flaw is.> ### 4. Impact <What an attacker could achieve. Concrete attacker outcomes, NOT generic CIA triad statements. Tie to the client's business — money, data, reputation, regulatory exposure.> ### 5. Recommendation <Specific, actionable remediation. Vendor patch, configuration change, code-level fix. Avoid "implement security best practices" — say what specifically.> ### 6. Proof of Concept (PoC) <Steps to reproduce, numbered. Include the exact HTTP requests, payloads, tools used.> **Step 1:** <action>
<full HTTP request or curl one-liner>
**Step 2:** <action><response excerpt>
**Screenshot:**
| Severity | Business definition | CVSS rough range | |---|---|---| | Critical | Direct revenue/data loss without prerequisites | 9.0-10.0 | | High | Full account/system takeover with limited prerequisites | 7.0-8.9 | | Medium | Significant data exposure or partial compromise | 4.0-6.9 | | Low | Information disclosure with limited exploitation path | 0.1-3.9 | | Informational | Hygiene finding, no immediate exploit | N/A |
This is the field that distinguishes red-team deliverables from bug-bounty reports. Use one of:
mid-engagement-ir-detection)If a finding was confirmed and then stopped working, that is almost always a CLIENT PATCH, not a finding-was-false. The correct response is "Confirmed; patched mid-engagement" with timestamps showing when it broke. See mid-engagement-ir-detection.
Bad: "An attacker could potentially be able to access user data, which may lead to..." Good: "An attacker reads any user's profile data. Demonstrated on test user victim@target.com at 14:22 IST."
Bad: "Loss of confidentiality and integrity of customer data" Good: "Read access to 247,000 customer records including PAN cards, addresses, GST numbers. India DPDPA Section 33 mandates 72-hour breach disclosure to DPB."
Recon notes (subdomains found, ports open, technologies fingerprinted) belong in a separate Recon / Attack Surface appendix, not the findings list. A finding must have an attacker-attainable outcome.
Each finding MUST have reproducible steps. The PoC section is what proves the finding to a skeptical reader. If you can't write the PoC clearly, the finding probably isn't ready to ship.
1. Executive Summary (1 page, non-technical)
- Engagement overview (dates, scope)
- Risk posture summary (heat-map: <X critical, Y high, Z medium...>)
- Top 3 strategic recommendations
- Comparison to industry baseline (optional)
2. Engagement Details
- Scope (in-scope, out-of-scope, exclusions)
- Methodology (recon → exploit → reporting; or align with PTES / OSSTMM)
- Tools used
- Timeline (start / end / key milestones)
- Team
3. Risk Summary Table
| F# | Title | Severity | Status |
|----|-------|----------|--------|
| F01 | ... | Critical | Confirmed |
...
4. Findings (one per ## section, in severity order — Critical first)
5. Attack Surface / Recon Appendix
- Subdomains discovered
- Open ports / services
- Technology fingerprints
- APKs found
- Credentials in breach corpora (count + sample only — redact)
- Identity-fabric map (IdP, MFA posture)
6. Indicators of Compromise (IoCs)
- Source IPs used during testing (so SOC can correlate)
- User-Agent strings
- Test accounts created
- Files uploaded (with cleanup status)
7. Cleanup Statement
- Confirmation that all test artifacts (accounts, uploads, persistence) were removed
- Outstanding cleanup items requiring client action
8. Appendices (raw output, screenshots index, full target list)bash# Prerequisite: pandoc installed brew install pandoc # Convert pandoc REPORT_FINAL.md \ -o REPORT_FINAL.docx \ --resource-path=engagement_log/poc \ --reference-doc=~/.claude/skills/redteam-report-template/templates/reference.docx \ --toc \ --toc-depth=2 \ --highlight-style=tango # Verify image count python3 -c " from docx import Document d = Document('REPORT_FINAL.docx') imgs = [r for r in d.part.rels.values() if 'image' in r.target_ref] print(f'Embedded images: {len(imgs)}') print(f'Paragraphs: {len(d.paragraphs)}') print(f'Headings: {sum(1 for p in d.paragraphs if p.style.name.startswith(\"Heading\"))}') "
screenshots/F<NN>_<descriptive>.png
Examples:
F01_locked_accounts.png
F02a_saml_landing.png
F02b_saml_ca_block_page.png
F03_sqli_timing_chart.png
F15_saml_metadata.pngVariants get letter suffixes (F02a, F02b). Always zero-pad finding number.
| Section | Tone | |---|---| | Subject | Plain English, jargon-free, 1 line | | Observations | Bulleted facts, past tense ("observed that...") | | Description | Technical but accessible; assume CISO reader | | Impact | Business-translated; tie to revenue/regulation | | Recommendation | Imperative, specific, actionable | | PoC | Operator-level technical; copy-pasteable |
Always:
Never:
Example: hardcoded JWT in APK
| Section | Technical framing | CISO framing | Board framing | |---|---|---|---| | Impact | "JWT signing key extracted from APK enables forging admin tokens" | "Anyone with the customer-facing mobile app can read any customer's invoice" | "A leaked secret in our mobile app lets attackers impersonate users" |
The same finding's Impact paragraph should cover both ends — start with the business outcome, then drop into technical detail.
Red-team deliverables should include — not just bug-bounty payable bugs:
Bug bounty would reject most of these. Red-team deliverables embrace them — the client paid for the assessment to know.
Beyond findings themselves, the deliverable should include:
Each gives the client context about their real-world detection capability, which often matters more than the findings themselves.
Maintain reusable boilerplate in:
~/.claude/skills/redteam-report-template/templates/
executive_summary.md # Reusable exec summary skeleton
methodology.md # Standard methodology section
cleanup_statement.md # Standard cleanup language
reference.docx # Pandoc style template (fonts, headings, colors)
cover.docx # Cover page templateDon't write these from scratch each engagement; clone and customize.
Pre-delivery checklist:
report-writing — bug-bounty platform reports (different format, different audience)redteam-mindset — informs what counts as a finding worth shippingmid-engagement-ir-detection — informs the "patched mid-engagement" status patternevidence-hygiene — informs screenshot redaction disciplinem365-entra-attack, enterprise-vpn-attack, etc. — each provides finding-templates specific to its attack surfaceFor calibration:
These numbers are typical for a 1-week external red-team engagement on a mid-size enterprise. Scale down for short tests, up for full purple-team exercises.
triage-validation — This template ingests findings that have ALREADY passed the 7-Question Gate. Engagement flow: every finding through triage-validation first → only validated findings → redteam-report-template packaging. Skipping triage produces a deliverable padded with informational noise that erodes client trust.evidence-hygiene — The DOCX with 16 embedded screenshots only works if evidence was captured systematically throughout the engagement. Engagement flow: evidence-hygiene discipline at session start → timestamped, organized screenshot folder → redteam-report-template consumes that folder to populate Evidence blocks.redteam-mindset — The Subject / Observations / Description / Impact / Recommendation / PoC structure assumes the operator already thinks like a red-teamer (impact-first, blast-radius framing). Engagement flow: redteam-mindset loaded at engagement start → findings collected with red-team framing baked in → redteam-report-template produces deliverable without rewriting every Impact section.mid-engagement-ir-detection — Defensive-action findings (SOC patches mid-test, new IPS rules deployed, account lockouts triggered by external attacker) are first-class findings in red-team deliverables. Engagement flow: mid-engagement-ir-detection captures behavior-change events → each becomes its own Subject in the deliverable, framed as "client capability observation" not as "bug we missed."report-writing + bugcrowd-reporting — Bug-bounty platform reports use DIFFERENT structure (one finding per submission, platform-specific severity scoring, OOS-clause counters). Engagement flow: if engagement mode is bug-bounty per project memory → use report-writing / bugcrowd-reporting instead. This template is ONLY for external red-team / enterprise client deliverables.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 36,070 | 55,304 | +53% | 1 | 1 | 0% | 6,204 | 9,857 | +59% | 0 | 0 | — |
case-02 | fail→pass | 20,381 | 16,537 | -19% | 1 | 1 | 0% | 3,069 | 6,478 | +111% | 0 | 0 | — |
case-03 | fail→pass | 27,591 | 6,587 | -76% | 1 | 1 | 0% | 1,456 | 4,816 | +231% | 0 | 0 | — |
case-04 | fail→pass | 11,479 | 11,710 | +2% | 1 | 1 | 0% | 1,700 | 5,505 | +224% | 0 | 0 | — |
case-05 | pass→pass | 10,357 | 5,259 | -49% | 1 | 1 | 0% | 1,635 | 4,340 | +165% | 0 | 0 | — |
case-06 | pass→pass | 13,841 | 9,867 | -29% | 1 | 1 | 0% | 2,324 | 5,021 | +116% | 0 | 0 | — |
case-07 | pass→pass | 9,737 | 4,342 | -55% | 1 | 1 | 0% | 1,563 | 4,349 | +178% | 0 | 0 | — |
case-08 | fail→pass | 7,783 | 3,490 | -55% | 1 | 1 | 0% | 1,244 | 4,179 | +236% | 0 | 0 | — |
case-09 | pass→pass | 9,368 | 64,864 | +592% | 1 | 1 | 0% | 1,485 | 4,336 | +192% | 0 | 0 | — |
case-10 | fail→pass | 21,903 | 15,208 | -31% | 1 | 1 | 0% | 2,996 | 5,843 | +95% | 0 | 0 | — |
case-11 | pass→pass | 13,762 | 7,472 | -46% | 1 | 1 | 0% | 1,937 | 4,796 | +148% | 0 | 0 | — |
case-12 | pass→fail | 8,645 | 3,762 | -56% | 1 | 1 | 0% | 1,403 | 4,021 | +187% | 0 | 0 | — |
case-13 | pass→pass | 10,098 | 6,185 | -39% | 1 | 1 | 0% | 1,609 | 4,545 | +182% | 0 | 0 | — |
case-14 | fail→pass | 13,036 | 3,591 | -72% | 1 | 1 | 0% | 1,933 | 4,094 | +112% | 0 | 0 | — |
case-15 | fail→pass | 12,892 | 10,445 | -19% | 1 | 1 | 0% | 2,046 | 5,432 | +165% | 0 | 0 | — |
case-16 | fail→fail | 11,190 | 13,568 | +21% | 1 | 1 | 0% | 1,645 | 5,283 | +221% | 0 | 0 | — |
case-17 | fail→pass | 18,286 | 3,411 | -81% | 1 | 1 | 0% | 2,924 | 4,213 | +44% | 0 | 0 | — |
case-18 | fail→pass | 7,734 | 4,015 | -48% | 1 | 1 | 0% | 1,204 | 4,142 | +244% | 0 | 0 | — |
case-19 | pass→pass | 6,258 | 3,778 | -40% | 1 | 1 | 0% | 908 | 4,191 | +362% | 0 | 0 | — |
case-20 | fail→pass | 14,885 | 2,901 | -81% | 1 | 1 | 0% | 2,419 | 4,004 | +66% | 0 | 0 | — |
case-21 | fail→fail | 22,194 | 11,023 | -50% | 1 | 1 | 0% | 2,002 | 5,569 | +178% | 0 | 0 | — |
case-22 | fail→fail | 8,070 | 5,728 | -29% | 1 | 1 | 0% | 1,130 | 4,426 | +292% | 0 | 0 | — |
case-23 | fail→fail | 14,724 | 23,781 | +62% | 1 | 1 | 0% | 1,418 | 6,146 | +333% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 22 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +39 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.