30 bugcrowd reporting
Skill 0xGhostCAT/claude-ai-cyber-security-skills/skills/30-bugcrowd-reporting
Write Bugcrowd-format reports — VRT (Vulnerability Rating Taxonomy) mapping, P1-P5 severity, impact-led writing, and Bugcrowd-specific submission etiquette. Use AFTER triage-validation passes for Bugcrowd programs.From its SKILL.md
npx -y skills add 0xGhostCAT/claude-ai-cyber-security-skills --skill 30-bugcrowd-reportingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
SKILL.md
12.4 KB, ~3.2k tokens by cl100k_base, as published. Nobody here has run it
Bugcrowd Reporting
Bugcrowd uses VRT, not CVSS. Map your bug to the VRT entry first.
When to invoke
Trigger phrases:
- "Bugcrowd report"
- "VRT mapping"
- "submit on Bugcrowd"
- "format for BC"
VRT primer
Bugcrowd's VRT (Vulnerability Rating Taxonomy) is a hierarchical category tree. Each category has a default priority (P1-P5).
P1 — Critical (e.g., RCE, SQLi data extraction)
P2 — High (e.g., stored XSS w/ auth bypass, IDOR critical data)
P3 — Medium (e.g., reflected XSS, IDOR less-sensitive)
P4 — Low (e.g., minor info disclosure)
P5 — Informational
Reference: https://bugcrowd.com/vulnerability-rating-taxonomy
When submitting, pick the most specific VRT category that fits — vague mapping triggers downgrade.
Bugcrowd report structure
The submission form has:
- Title — see formula
- VRT (Bug Type) — dropdown of categories
- Severity — auto-filled from VRT, but you can adjust
- Target — which in-scope asset
- Description — main body (markdown supported)
The Description should contain:
## Summary
[1-2 sentences — the bug + its impact]
## Description
[3-5 sentences — affected feature, mechanism]
## Steps to Reproduce
1. ...
2. ...
## PoC
[Code, requests, screenshots]
## Impact
[Concrete impact statement]
## Suggested Fix
[Actionable]
Title formula (same as H1)
Format: <Severity tag>: <vuln class> in <endpoint> enables <impact>
# Good
P1 — SSRF in document import URL leading to AWS IAM credential disclosure
P2 — Stored XSS via SVG avatar enables full session theft of profile viewers
P3 — IDOR in GraphQL user query exposes email and phone of any user
P1 — Authentication bypass via alg=none JWT acceptance
# Avoid
XSS
Bug
Possible XSS
VRT category mapping (top examples)
Map each bug class to the BC VRT path:
| Bug | VRT Path | Default Priority |
|---|---|---|
| RCE via SSTI / template injection | Server Security Misconfiguration > Server-Side Template Injection > Remote Code Execution | P1 |
| RCE via deserialization | Server-Side Injection > Remote Code Execution | P1 |
| SQL injection (data extraction) | Server-Side Injection > SQL Injection > Vulnerable | P1-P2 |
| Stored XSS (high impact) | Cross-Site Scripting (XSS) > Stored | P2-P3 |
| Reflected XSS | Cross-Site Scripting (XSS) > Reflected | P3-P4 |
| DOM XSS | Cross-Site Scripting (XSS) > DOM | P3-P4 |
| IDOR (critical data) | Broken Access Control > Insecure Direct Object Reference > Critical | P2 |
| IDOR (moderate data) | Broken Access Control > IDOR > Moderate | P3 |
| Auth bypass | Broken Authentication and Session Management > Auth Bypass | P1-P2 |
| SSRF (internal access) | Server-Side Request Forgery > Internal | P2 |
| SSRF (cloud metadata) | Server-Side Request Forgery > Internal > Cloud Metadata | P1 |
| File upload RCE | Server Security Misconfiguration > Insecure File Upload > RCE | P1 |
| Stored XSS via file upload | Server Security Misconfiguration > Insecure File Upload > XSS | P2 |
| JWT alg=none | Broken Authentication > JWT > Algorithm None | P1 |
| OAuth redirect_uri bypass | Insufficient Security Configurability > OAuth Misconfig | P1-P2 |
| Account takeover | Sensitive Data Exposure > Account Takeover | P1 |
| Subdomain takeover | Server Security Misconfiguration > Subdomain Takeover | P2-P3 |
| Open redirect | Server Security Misconfiguration > Insecure URL Redirect > Open Redirect | P4-P5 |
| HTTP smuggling | Server-Side Injection > HTTP Response Smuggling | P1-P2 |
| Cache poisoning | Server Security Misconfiguration > Web Cache Poisoning | P2-P3 |
| Prototype pollution (exploitable) | Server-Side Injection > Prototype Pollution | P2-P3 |
| Mass assignment | Broken Access Control > Mass Assignment | P2-P3 |
| Race condition (real $$$) | Broken Access Control > Race Condition | P2-P3 |
| GraphQL introspection alone | Sensitive Data Exposure > GraphQL Introspection | P4-P5 |
| GraphQL IDOR | Broken Access Control > Insecure Direct Object Reference | P2-P3 |
→ See https://bugcrowd.com/vulnerability-rating-taxonomy for the complete tree.
VRT cheat: P-ratings (typical bounty multiples)
P1 — Critical ← $1k–25k+ (program-dependent)
P2 — High ← $500–5k
P3 — Medium ← $100–1k
P4 — Low ← $50–250
P5 — Info ← $0 or swag/kudos
The full report (production-grade example)
## Summary
The `/api/v3/import/url` endpoint is vulnerable to Server-Side Request Forgery (SSRF). By supplying the AWS EC2 metadata endpoint URL, any authenticated user can retrieve IAM credentials for the EC2 role attached to the application's web servers, enabling full AWS account access.
## VRT
Server-Side Request Forgery > Internal > Cloud Metadata → P1 (Critical)
## Description
While reviewing the document import feature, I noticed it accepts any URL and fetches its content. The implementation does not validate the URL host. Sending `http://169.254.169.254/...` returns the EC2 metadata service responses, including IAM credentials. The IAM role attached (`web-prod-role`) has read/write access to S3 buckets containing user-uploaded PII.
## Steps to Reproduce
1. Log in as any user (signup is free)
2. Send the following request:
```http
POST /api/v3/import/url HTTP/1.1
Host: app.target.com
Cookie: session=USER_SESSION
Content-Type: application/json
{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}
-
Response:
web-prod-role -
Now fetch credentials:
POST /api/v3/import/url HTTP/1.1 ... {"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/web-prod-role"} -
Response contains:
{ "AccessKeyId": "ASIA...", "SecretAccessKey": "...", "Token": "...", "Expiration": "2026-06-02T15:42:18Z" } -
Credentials verified via AWS CLI:
$ AWS_ACCESS_KEY_ID=ASIA... AWS_SECRET_ACCESS_KEY=... AWS_SESSION_TOKEN=... aws sts get-caller-identity { "UserId": "AROA...", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/web-prod-role/i-..." }
PoC
Attached:
screenshot-credential-extraction.png— the actual response with credentials (redacted)aws-sts-output.png— verification of credential validityrepro.har— HAR file of the entire reproduction
Impact
- AWS IAM credential disclosure for production EC2 role
- The role
web-prod-rolehas:- Read/write to S3 bucket
target-user-uploads(~50M files including PII) - SQS read on
target-jobs-queue - RDS describe-instances (info disclosure)
- Read/write to S3 bucket
- Confirmed via
enumerate-iamafter extraction - Persistent: while credentials rotate, the SSRF allows re-fetching at any time
- Potential to pivot to full AWS account access if the role can be chained / privilege escalated
Suggested Fix
- Allowlist URL hosts — reject requests to RFC1918 ranges (10/8, 172.16/12, 192.168/16), 169.254/16, and localhost
- Enforce IMDSv2 on EC2 instances (PUT-based token required)
- Reduce IAM role permissions to least privilege (this role appears over-permitted)
- Validate URL scheme — accept only
https://and only after host validation
Notes
- All testing performed on my own test account
- No third-party / real user data was accessed via the extracted credentials
- Extracted credentials NOT used to access S3 contents beyond
aws sts get-caller-identity - Available for verification or remediation discussion
## VRT-specific considerations
### Always map specifically
Bad: "Misc Server Security Misconfiguration"
Good: "Server-Side Request Forgery > Internal > Cloud Metadata"
Specific mapping = correct default priority = correct bounty.
### Justify VRT upgrade if needed
If you think the bug deserves higher than VRT default:
Severity Note
The default VRT priority for "OAuth Misconfiguration > Redirect URI Bypass" is P3, but in this implementation it enables one-click ATO of any user. I'm proposing P1 / Critical given:
- Zero credentials required
- Affects all 2M+ users
- Full session token capture
- Chained with the existing open redirect at /redirect?url= (no separate vuln)
### CVSS optional but useful
Bugcrowd accepts a CVSS vector in the report. Include it as additional evidence:
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N = 8.1 (High)
## Bugcrowd-specific etiquette
### "Researcher Comments"
Bugcrowd has a comments section beneath the report. Use it for:
- Clarifications when triage asks
- "I noticed X also has same issue, want me to submit separately?"
- Negotiation around VRT mapping
### Reasonable response time
Bugcrowd has SLAs published per program. Don't ping early.
### Crowd messaging
Don't share details outside the platform (Discord, Twitter) before disclosure.
### Disclosure
After fix + payout, you can request disclosure. Builds your portfolio.
## VRT references to memorize
The 20 most-common VRT categories you'll use:
- Cross-Site Scripting (XSS) > Stored
- Cross-Site Scripting (XSS) > Reflected
- Cross-Site Scripting (XSS) > DOM
- Server-Side Injection > SQL Injection
- Server-Side Injection > Command Injection
- Server-Side Injection > Code Injection
- Server-Side Injection > XML External Entities
- Server-Side Request Forgery > Internal
- Server-Side Request Forgery > Internal > Cloud Metadata
- Broken Access Control > Insecure Direct Object Reference
- Broken Access Control > Privilege Escalation
- Broken Access Control > Mass Assignment
- Broken Authentication > Authentication Bypass
- Broken Authentication > JWT > Algorithm None
- Server Security Misconfiguration > Insecure File Upload
- Server Security Misconfiguration > Subdomain Takeover
- Server Security Misconfiguration > Web Cache Poisoning
- Sensitive Data Exposure > Account Takeover
- Insufficient Security Configurability > OAuth Misconfiguration
- Cross-Site Request Forgery > Authenticated Action
## H1 vs Bugcrowd quick diff
| Aspect | H1 | BC |
|---|---|---|
| Severity model | CVSS 3.1 | VRT + P1-P5 |
| Categorization | CWE | VRT tree |
| Markdown | Yes | Yes |
| Bounty table | Per program | Per program (VRT-driven) |
| Triage style | Often faster | Tends to follow VRT defaults strictly |
| Disclosure | Researcher-initiated post-payout | Same |
The report content is the same. The category field is different — use VRT for BC.
## Cross-references
- `[[triage-validation]]` — run before this
- `[[hackerone-reporting]]` — H1 equivalent
- All vuln-class skills — back-reference impact
## Common pitfalls
1. **Wrong VRT mapping.** "Misc" category → P5 default → minimal bounty.
2. **No P1/P2 justification for high-impact bugs.** Argue the upgrade.
3. **Confusing VRT priority with CVSS.** They differ. Use both.
4. **Reporting same bug under multiple categories.** Pick one (the most-specific).
5. **Inflating to P1 when the bug is P2.** Reputation suffers.
## Bugcrowd reward tiers (illustrative — varies by program)
P1 Critical → often $1k–25k+, top programs $5k+ minimum P2 High → often $500–5k P3 Medium → often $150–1k P4 Low → often $50–250 P5 Info → $0 + kudos
Pick programs with strong P-rating bounty tables. Check before hunting.
## Bugcrowd-only features
- **Researcher leaderboard** — top hunters get exclusive private invites
- **VRT votes** — researchers can propose VRT updates
- **Bug Bash events** — sponsored events with bonus bounties
- **Crowd Control** for orgs — researchers don't see this but it's how triage queues work
- **Asset bonuses** — some programs add bonuses for hunting specific assets
## Quick markdown skeleton
```markdown
## Summary
[1-2 sentences — bug + impact]
## VRT
[Specific VRT path]
Suggested Priority: P[1-5] (Critical/High/Medium/Low/Info)
## Description
[Affected feature + root cause hypothesis]
## Steps to Reproduce
1. ...
2. ...
3. ...
## PoC
[code blocks, attachment list]
## Impact
[Concrete, business-grade]
## Suggested Fix
[Actionable]
## CVSS (Optional supplementary)
[CVSS vector]
## Notes
- Test accounts used; no real user data accessed
- Available for verification questions
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most docs writing skills give in ~3.2k tokens
Counted across 1,637 of the 3,044 authors here whose files we hold, read 2026-08-07
- Announce the skill at startin 54 of 1637, across 26 files
- Convert legacy doc files before editingin 45 of 1637, across 7 files
- Predict questions readers might askin 42 of 1637, across 4 files
- Generate clarifying questions for initial contextin 42 of 1637, across 3 files
- Create document scaffold with placeholder textin 42 of 1637, across 3 files
- Brainstorm content options for each sectionin 42 of 1637, across 3 files
- Test the document with a fresh context-less instancein 42 of 1637, across 3 files
- Include exact file paths in every taskin 42 of 1637, across 15 files
- Ask interview questions one at a timein 42 of 1637, across 27 files
- Apply surgical edits during refinementin 41 of 1637, across 2 files
- Offer structured workflow or freeformin 40 of 1637, across 1 file
- Ask for document meta-contextin 40 of 1637, across 2 files
Said here and by no other author read
- map vulnerability to most specific VRT category
- justify any proposed VRT priority upgrade
- use severity tag, vulnerability class, endpoint, and impact in title
- include summary, description, steps, PoC, impact, and fix
- write concrete, impact-led summary statements
- include CVSS vector as supplementary evidence
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.