Agent skill

Reporting Security Findings

by trilwu in trilwu/secskills

Write security findings and assessment reports — severity scoring with CVSS and business impact, reproducible proof of concept, remediation guidance, executive summaries, and coordinated disclosure.

MITAuto-check passedSecurity

Install Reporting Security Findings

skills CLI
$ npx skills add trilwu/secskills --skill reporting-security-findings -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install trilwu/secskills reporting-security-findings --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/trilwu/secskills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/secskills-core/skills/reporting-security-findings .claude/skills/reporting-security-findings && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
reporting-security-findings
GitHub stars
157
Token cost
~3.4k tokens
SKILL.md length
1,551 words
Files
1
Skills in repo
50
Repo updated
First seen
Licence
MIT

At a glance

Write security findings and assessment reports — severity scoring with CVSS and business impact, reproducible proof of concept, remediation guidance, executive summaries, and coordinated disclosure.

  • Works in 4 steps: Every finding cites at least one piece… → Confirmed status and low confidence… → Every reproduction runs without asking… → …
  • Writing up a vulnerability
  • SKILL.md covers When to Use, When NOT to Use, Anatomy of a Finding and Severity, plus 7 more sections
  • Calls curl and git; reaches defuddle.md

What it does

Reporting Security Findings is an agent skill from trilwu/secskills. Write security findings and assessment reports — severity scoring with CVSS and business impact, reproducible proof of concept, remediation guidance, executive summaries, and coordinated disclosure. Use when writing up a vulnerability, producing a pentest or audit report, triaging a bug bounty submission, or preparing a disclosure timeline.

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Security, covering Prototyping, Bug bounty and Summarization. The repository describes itself as: Transform Claude Code into your personal security engineer. The licence is MIT.

When your agent uses it

  • Writing up a vulnerability
  • Producing a pentest
  • Triaging a bug bounty submission
  • Preparing a disclosure timeline

Example prompts

  • “/reporting-security-findings”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Every finding cites at least one piece of evidence — a command and its
  2. Confirmed status and low confidence cannot coexist. If you would not bet
  3. Every reproduction runs without asking you a question, or names the
  4. A claim of obtained access or data has evidence of that specific claim.

What it can do on your machine

Read from SKILL.md and the folder at commit ca53957. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • defuddle.md

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Reporting Security Findings loads about 3.4k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 1,551 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~93
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from trilwu/secskills at commit ca53957, republished under its MIT licence (© trilwu). 1,551 words, ~3,400 tokens.

Download SKILL.mdSave it as .claude/skills/reporting-security-findings/SKILL.md (or your agent's skills folder).
name
reporting-security-findings
description
Write security findings and assessment reports — severity scoring with CVSS and business impact, reproducible proof of concept, remediation guidance, executive summaries, and coordinated disclosure. Use when writing up a vulnerability, producing a pentest or audit report, triaging a bug bounty submission, or preparing a disclosure timeline.
verified
2026-07-28

Reporting Security Findings

The report is the product. Findings that are not understood are not fixed, and findings that cannot be reproduced are disputed. Most of the value an assessment creates is destroyed or preserved in the write-up.

When to Use

  • Writing up a single vulnerability
  • Producing a penetration test, code audit, or red team report
  • Submitting to a bug bounty program or triaging inbound submissions
  • Scoring severity and arguing priority with an engineering team
  • Planning coordinated disclosure for an unpatched issue

When NOT to Use

  • Finding the bug — use the relevant testing or audit skill first
  • Assembling the raw record a report is built from (provenance, artifact register, evidence, dead ends) — use maintaining-engagement-state; this skill consumes that record
  • Incident narratives and postmortems — use responding-to-incidents
  • Compliance-framework mapping as the primary goal — different document, different audience

Anatomy of a Finding

Every finding answers five questions, in this order:

markdown
### F-03  Tenant isolation bypass in report export     [High]

**Summary**
An authenticated user of any tenant can export reports belonging to other
tenants by supplying an arbitrary report ID to `GET /api/v2/reports/{id}/export`.

**Impact**
Full read access to other customers' report data, including the financial
figures and contact records those reports contain. Any customer account —
including a self-service trial — is sufficient. This is a cross-tenant
confidentiality breach with likely contractual and regulatory consequences.

**Affected**
`api/handlers/reports.go:214` (`handleExport`), deployed in production as of
commit `a1b2c3d`. Reproduced on staging 2026-07-24 14:02 UTC.

**Reproduction**
1. Authenticate as `trial-user@tenant-a` and obtain a session token.
2. Note your own report ID from `GET /api/v2/reports` (e.g. `1041`).
3. Request a neighbouring ID:
   curl -H "Authorization: Bearer $TOKEN" \
        https://staging.example.com/api/v2/reports/1042/export -o out.csv
4. `out.csv` contains tenant B's data. Confirmed with IDs 1042, 1043, 1055.

**Root cause**
The handler looks the report up by primary key and checks only that the
session is valid. The tenant scope present on the list endpoint
(`WHERE tenant_id = ?`) is absent from the export query.

**Remediation**
Add the tenant predicate to the export lookup, and enforce it at the data
access layer rather than per handler so new endpoints inherit it:
    SELECT ... FROM reports WHERE id = ? AND tenant_id = ?
Then audit the remaining 14 handlers that call `findByID` without a scope —
listed in Appendix B.

**References**
CWE-639, OWASP API1:2023 Broken Object Level Authorization

Rules that make findings act-on-able:

  • One finding per issue. Bundling ten IDORs into "authorization issues" guarantees partial fixes.
  • Exact locations. File, line, endpoint, commit, and the environment where you reproduced it.
  • Reproduction someone else can run without asking you a question. Include the setup, the request, and the observed result — not just the payload.
  • Root cause, not just symptom. The fix for a symptom leaves the class.
  • Remediation that names the change. "Validate input" is not remediation.
  • Variants listed. If you found one instance and suspect more, say what you checked and what you did not.
  • Revalidated against what ships. Before a finding goes in the report, confirm the vulnerable code is not already fixed on a branch you haven't pulled (git log --oneline <checkout>..origin/main -- <file>). One already-patched finding teaches the reader to distrust the rest.
Invariants to check before a finding leaves draft

Four of the rules above are mechanical enough to check rather than judge. Run them over every finding; each maps to a way reports have actually gone wrong.

  1. Every finding cites at least one piece of evidence — a command and its output, a request and response, a crash, a screenshot. A finding whose only support is a code reading is a candidate, not a finding. Label it so.
  2. Confirmed status and low confidence cannot coexist. If you would not bet on it, it is still a candidate. Downgrade the status or say plainly what would settle it. This pair is the single most common way a speculative finding acquires unearned authority on its way into a report.
  3. Every reproduction runs without asking you a question, or names the environment it cannot leave — an offline sample, a lab-only target, a credential the reader must supply. An unreproducible finding is not a finding you can defend in a remediation meeting.
  4. A claim of obtained access or data has evidence of that specific claim. "Full database read" needs a row you actually read, not an injectable parameter plus an inference about what lies behind it. Reachability is not impact.

When a finding fails one of these, it does not get quietly dropped: it moves to the candidate worklist with the reason attached, so a later pass knows what would promote it. See orchestrating-vulnerability-research for how candidates are graded when a separate critic does the promoting.

Severity

CVSS is the common currency, but it scores a vulnerability in the abstract. Score with CVSS, then state business impact separately — engineering prioritizes on the second.

CVSS 4.0 base vector example:
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N   → 6.9 Medium

Then adjust for reality and say why:

FactorRaises priorityLowers priority
ExposureInternet-facing, unauthenticatedInternal only, requires admin
DataRegulated, customer, credentialsSynthetic, public
Exploit maturityPublic exploit, active exploitationTheoretical, complex chain
Compensating controlsNoneWAF rule, network segmentation, monitoring
Blast radiusCross-tenant, whole fleetSingle account, single record

A Medium CVSS that breaks tenant isolation for a SaaS product is a P1 regardless of the number. Say that explicitly rather than letting the score argue for you. Conversely, do not inflate scores: a report where everything is Critical gets triaged by ignoring it.

Chained findings: report the components individually and report the chain as its own finding with the chain's severity. The chain is what an attacker does; the components are what engineering fixes.

Proof of Concept

Scale the PoC to what proves the point:

  • Enough to prove control of the sink. id=1042 returning another tenant's row proves the bug. Dumping the full database does not prove it harder.
  • Non-destructive by default. Do not modify or delete data to demonstrate write access; write a benign marker to a record you own, or demonstrate the authorization decision without the effect.
  • Redact real data. If your evidence contains customer records, redact them in the report and store the raw evidence separately with access controls.
  • State what you did. If you created accounts, uploaded files, or left artifacts, list them so they can be cleaned up.

For memory-safety and exploitation findings, a crash with a controlled instruction pointer plus an analysis of exploitability is usually the right depth. A weaponized exploit belongs in the report only when the engagement explicitly calls for it.

The Report

1. Executive summary        — 1 page, no jargon, answers "how bad and what now"
2. Scope and methodology    — what was tested, how, and with what access
3. Coverage and limitations — what was NOT tested, and why
4. Findings                 — ordered by severity, each self-contained
5. Strategic recommendations— themes across findings, not per-finding fixes
6. Appendices               — tooling, raw output, evidence index, retest results

The executive summary is written for someone who will read only it. Three things: the overall risk position in a sentence, the two or three findings that matter, and what decision is being asked for. No CVSS vectors, no tool names, no "we ran Nessus."

Coverage and limitations is the section that protects everyone. State the time box, the accounts and environments you had, the components you could not reach, and the testing you were asked not to do. A report silent on limitations implies coverage it did not have, and that silence is what turns a missed bug into a dispute.

Strategic recommendations are where an assessment earns repeat work: the themes. "Authorization is enforced per handler rather than at the data layer; 9 of 14 findings share this root cause." That sentence is worth more than the nine findings.

Show full SKILL.md (571 more words)Show less

Writing for the Audience

ReaderWantsGive them
ExecutiveRisk and decisionOne page, plain language, business consequence
Engineering managerPrioritization and effortSeverity, root cause, scope of the fix
EngineerTo fix it todayExact location, reproduction, concrete change
Compliance/auditEvidence and mappingMethodology, coverage statement, framework refs

Write the finding for the engineer, and the summary for the executive. Do not average the two into prose that serves neither.

Tone: describe the defect, not the developer. "The export handler omits the tenant predicate" — not "the developer forgot." Reports circulate, and an accusatory report makes the next engagement harder.

Disclosure

For findings in software you do not own:

Day 0     Report privately: security.txt, /security, GitHub advisory, CERT
Day 0-7   Acknowledge receipt; agree a timeline
Day 45    Check in; offer help reproducing
Day 90    Standard public disclosure deadline (adjust for severity and
          exploitation in the wild — actively exploited issues warrant faster
          public warning; complex fixes may warrant an extension you agree to)
  • Give a specific deadline at first contact, and honour it.
  • Request a CVE when the issue affects released software with other users.
  • Do not publish exploit code before a fix is broadly available; describe impact and mitigation instead.
  • If the vendor is unresponsive, escalate to a CERT/CSIRT coordinator rather than going straight to publication.
  • Never test beyond the authorized scope to "improve the report," and never use a finding as leverage. Both convert a research contribution into a legal problem.

For bug bounty submissions, read the program's scope and rules first, report one issue per submission, and include the impact statement the triager needs to justify the payout internally.

Rationalizations to Reject

  • "They'll understand what I mean." They will not, and they will not ask — they will downgrade it.
  • "I'll write it up later." Reproduction details decay within hours.
  • "It's obviously Critical." Then it is easy to justify. Justify it.
  • "Everything is High so they take it seriously." Inflated severity is how a report stops being read.
  • "I couldn't fully exploit it, so I'll leave it out." Report it with the evidence you have and state the uncertainty. Silent omission is worse.
  • "I found it in the code, so it's still there." You may be reading a stale checkout. Revalidate against what ships before you file it — a finding fixed three commits ago discredits the whole report.
  • "The client won't like the limitations section." They will like it less after a breach in an area the report implied was covered.
  • "No findings means a bad report." A report with honest coverage and no findings is a valid result. Say what you tested and how deeply.

Reading External Sources

Fetch public advisories, specifications, and vendor reports as Markdown:

bash
curl -sL "https://defuddle.md/<url>"      # scheme in the path is optional

This strips page boilerplate — roughly 78% fewer tokens on a prose page — and returns the full text rather than a summary, so you can grep it and trust a negative result.

Three things it is not for. Fetch JSON and API responses raw, because readability extraction mangles structured data. Fetch authenticated or JavaScript-rendered pages directly, because it retrieves them anonymously. And never route adversary infrastructure (phishing links, C2, malware hosting), client-owned hosts, or engagement URLs through it — the request leaves your machine to a third party, and for live adversary infrastructure it also tips off the operator.

Some sites block the extractor and return an error blob rather than the page — {"error":"Failed to fetch: 418 I'm a teapot"} from freedesktop.org, for instance. That is the fetch being refused, not the source saying the thing does not exist. Re-fetch the URL directly before drawing any conclusion from it.

References

  • auditing-code-for-vulnerabilities — the audit-side deliverable format
  • responding-to-incidents — incident narratives and postmortems
  • CVSS 4.0 specification; EPSS for exploitation likelihood; CWE for classification
  • ISO/IEC 29147 (vulnerability disclosure) and 30111 (handling)

© trilwu, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in secskills-core/skills/reporting-security-findings of trilwu/secskills.

Open the folder on GitHubat commit ca53957

Compare with similar skills

Reporting Security Findings next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Reporting Security Findings compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Reporting Security Findings this skilltrilwu/secskills157—~3.4kAutomated safety check: PassMIT
Metabigor OSINT Reconj3ssie/metabigor1.9k—~2.4kAutomated safety check: PassMIT
Wooyun Legacytanweai/wooyun-legacy1.8k—~1.9kAutomated safety check: PassCustom licence
Client Request Signature Reversalawarexone/Agentic-Bug-Hunter5.3k—~4.7kAutomated safety check: PassMIT
Web3 Bug Bounty AI Toolstradecatlabs/vibe-coding-cn17k2 repos~3.9kAutomated safety check: WarnMIT
Penetration Flowlingbol088-spec/ReiPenFlow222—~1.8kAutomated safety check: PassMIT

Similar skills

  • Metabigor OSINT Recon

    j3ssie/metabigor

    Operates the metabigor CLI to map a target's network ranges, subdomains, ports, related domains, CDNs and archived URLs from free sources without API keys.

    1.9k GitHub stars~2.4k tokensUpdated 2 mo ago
    SecurityAuto-check passed
  • Wooyun Legacy

    tanweai/wooyun-legacy

    WooYun business logic vulnerability methodology — 22,132 real cases across 6 domains (authentication bypass, authorization bypass, payment tampering, information disclosure, logic flaws…

    1.8k GitHub stars~1.9k tokensUpdated 2 mo ago
    SecurityAuto-check passed
  • Client Request Signature Reversal

    awarexone/Agentic-Bug-Hunter

    Recovers a client-side request signature or anti-bot token just far enough to replay blocked requests in bug bounty testing, starting from a captured packet.

    5.3k GitHub stars~4.7k tokensUpdated yesterday
    SecurityAuto-check passed
  • Web3 Bug Bounty AI Tools

    tradecatlabs/vibe-coding-cn

    A selection guide to AI-driven tools for Web3 bug bounty work, from autonomous web pentesters to smart contract bug finders, with notes on authorization.

    17k GitHub starsUsed in 2 repos~3.9k tokens
    SecurityAuto-check: warnings
  • Penetration Flow

    lingbol088-spec/ReiPenFlow

    Guided workflow for authorized penetration testing, vulnerability validation, security reporting, CTF/local sandbox reverse engineering, and user-directed vulnerability research.

    222 GitHub stars~1.8k tokensUpdated 2 mo ago
    SecurityAuto-check passed
  • Add Partial Recon

    samugit83/redamon

    Adding partial-recon support for a tool: running a single pipeline phase on demand from the workflow graph, reading its inputs from the existing Neo4j graph and merging results back.

    3k GitHub stars~1.1k tokensUpdated yesterday
    SecurityAuto-check passed

More from trilwu/secskills

All 50 skills in this repo
  • Audit source code for exploitable vulnerabilities using threat-model-driven review, taint tracing, invariant checking, and variant analysis.

    157 GitHub stars~3.2k tokensUpdated 1 mo ago
    Auto-check passed
  • Perform OSINT, subdomain enumeration, port scanning, web reconnaissance, email harvesting, and cloud asset discovery for initial access.

    157 GitHub stars~3.1k tokensUpdated 1 mo ago
    Auto-check: notes
  • Securing AI Systems

    trilwu/secskills

    Assess and harden LLM applications and agentic systems against prompt injection, tool misuse, excessive agency, memory poisoning, RAG data leakage, and model supply-chain risk, mapped to the OWASP…

    157 GitHub stars~2.9k tokensUpdated 1 mo ago
    Auto-check passed
  • Analyzing Binaries

    trilwu/secskills

    Reverse engineer compiled binaries, firmware, and mobile app packages using triage, static disassembly, decompilation, and dynamic instrumentation.

    157 GitHub stars~2.9k tokensUpdated 1 mo ago
    Auto-check passed
  • Analyzing Go Binaries

    trilwu/secskills

    Reverse engineer Go binaries by recovering function names and types from pclntab and moduledata using GoReSym, redress, and IDA/Ghidra Go plugins, and by reading Go's non-standard calling…

    157 GitHub stars~2k tokensUpdated 1 mo ago
    Auto-check passed
  • Analyzing iOS Binaries

    trilwu/secskills

    Analyze iOS applications at the binary level — decrypting FairPlay-protected IPAs with frida-ios-dump or bagbak, inspecting Mach-O load commands, recovering Objective-C headers with class-dump, and…

    157 GitHub stars~2k tokensUpdated 1 mo ago
    Auto-check passed

Categories

Questions about Reporting Security Findings

What does Reporting Security Findings do?

Write security findings and assessment reports — severity scoring with CVSS and business impact, reproducible proof of concept, remediation guidance, executive summaries, and coordinated disclosure. Reporting Security Findings is an agent skill from trilwu/secskills. Write security findings and assessment reports — severity scoring with CVSS and business impact, reproducible proof of concept, remediation guidance, executive summaries, and coordinated disclosure.

When should I use Reporting Security Findings?

Reporting Security Findings fits situations like: writing up a vulnerability; producing a pentest; triaging a bug bounty submission; preparing a disclosure timeline.

How do I install Reporting Security Findings in Claude Code?

Run `npx skills add trilwu/secskills --skill reporting-security-findings -a claude-code`. Or copy the skill folder (secskills-core/skills/reporting-security-findings in trilwu/secskills) into .claude/skills/reporting-security-findings in your project. Claude Code loads it when a task matches its description.

How do I install Reporting Security Findings in Codex?

Run `npx skills add trilwu/secskills --skill reporting-security-findings -a codex`. Or copy the skill folder (secskills-core/skills/reporting-security-findings in trilwu/secskills) into .agents/skills/reporting-security-findings in your project. Codex loads it when a task matches its description.

Can I use Reporting Security Findings in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add trilwu/secskills --skill reporting-security-findings -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/reporting-security-findings, .gemini/skills/reporting-security-findings, .github/skills/reporting-security-findings and .opencode/skills/reporting-security-findings in your project.

What does Reporting Security Findings need to run?

Going by SKILL.md and its folder, Reporting Security Findings needs the command-line tools its instructions call (curl and git).

Does Reporting Security Findings access the network?

SKILL.md names 1 domain. In commands or code: defuddle.md; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Reporting Security Findings safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Reporting Security Findings use?

Reporting Security Findings is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Reporting Security Findings use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Reporting Security Findings?

Skills that share tags, products or a category with Reporting Security Findings: Metabigor OSINT Recon (j3ssie/metabigor, 1.9k stars), Wooyun Legacy (tanweai/wooyun-legacy, 1.8k stars), Client Request Signature Reversal (awarexone/Agentic-Bug-Hunter, 5.3k stars) and Web3 Bug Bounty AI Tools (tradecatlabs/vibe-coding-cn, 17k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Reporting Security Findings?

trilwu (a GitHub user) maintains it in trilwu/secskills, which has 157 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on September 4, 2026.

Source: trilwu/secskills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.