shuvonsec/claude-bug-bounty/web2-vuln-classes
Claude Code and agent skill by shuvonsec/claude-bug-bounty
- community
Checking that the SKILL.md file is still in the repository.
Complete reference for 26 web2 bug classes with root causes, detection patterns, bypass tables, exploit techniques, and real paid examples. Covers IDOR, auth bypass, XSS (postMessage), SSRF (11 IP bypass techniques), SQLi, business logic, race conditions, OAuth/OIDC, file upload (10 bypass techniques), GraphQL, LLM/AI (ASI01-ASI10, MCP/RAG attacks), API misconfig (mass assignment, JWT, prototype pollution, CORS), ATO (9 paths), SSTI, subdomain takeover, cloud misconfig, HTTP smuggling, cache poisoning, MFA bypass (7 patterns), SAML attacks, error disclosure, CSS injection, LFI/RCE, insecure deserialization, dependency confusion, padding oracle. Use when hunting a specific vuln class or studying what makes bugs pay.
Install
npx vskill@latest install shuvonsec/claude-bug-bounty/web2-vuln-classesSKILL.md
WEB2 BUG CLASSES — 26 Classes
Root cause, pattern, bypass table, chaining opportunity, real paid examples.
Auth-required classes (🔐): the ones below need **at least one logged-insession** loaded into the hunt to be testable. Use `hunt.py --auth-file.private/T.jsonor--cookie/--bearer` flags — every recon/scan tool theninherits the headers automatically. For IDOR/BOLA/priv-esc, load **twosessions** (low- and high-priv) and diff. Seedocs/auth-sessions.md.🔐 IDOR · Broken Auth/Access Control · Mass Assignment · OAuth/OIDC · JWT ·GraphQL field-level auth · LLM/AI chatbot IDOR · MFA (rate-limit + responsemanipulation tests) · ATO chains · SSRF behind loginThe MFA workflow-skip and SAML signature-stripping probes intentionallystay unauthenticated even when a session is loaded — that's theattack premise.
1. IDOR — INSECURE DIRECT OBJECT REFERENCE 🔐
#1 most paid web2 class — 30% of all submissions that get paid.Needs two sessions (A=attacker, B=victim) — load both via--auth-fileand diff audit-logsession_idhashes to confirm cross-tenant access.
Root Cause
Variants
- V1: Numeric ID swap —
/api/user/123/profile→ change to 124 - V2: UUID swap — enumerate UUID via email invite or other endpoint
- V3: Indirect IDOR —
POST /api/export?report_id=456exports another user's report - V4: Parameter add —
?user_id=othermakes backend use it - V5: HTTP method swap — PUT protected, DELETE not
- V6: Old API version —
/v1/users/123lacks auth that/v2/has - V7: GraphQL node —
{ node(id: "base64(User:456)") { email } } - V8: WebSocket — WS sends
{"action":"get_history","userId":"client-generated-UUID"}
Testing Checklist
IDOR Chain Escalation
- IDOR + Read PII = Medium
- IDOR + Write (modify other's data) = High
- IDOR + Admin endpoint = Critical (privilege escalation)
- IDOR + Account takeover path = Critical
- IDOR + Chatbot reads other user's data = High
2. BROKEN AUTH / ACCESS CONTROL 🔐
#2 most paid class. The sibling function rule: if 9 endpoints have auth, the 10th that doesn't is your bug.Needs auth loaded — you're testing which sibling routes a logged-inuser can reach that shouldn't be reachable. Compare authed responsesagainst the same paths hit anonymously.
The Sibling Rule
Patterns
Real Paid Examples
- HackerOne TrustHub:
POST /graphqlwithTrustHubQuery— no auth, regular user reads all vendors (CVSS 8.7 High) - Vienna Chatbot: WebSocket
get_historyaccepts arbitrary UUID — no ownership check (P2)
3. XSS — CROSS-SITE SCRIPTING
Stored XSS (highest impact)
DOM XSS Sinks (grep for these)
postMessage is a DOM XSS source — same sinks above (innerHTML, eval, etc.) become reachable when fed byaddEventListener("message", ...)without properevent.originvalidation. See postMessage Testing below.
XSS Bypass Techniques
XSS Chains (escalate to High/Critical)
- XSS + sensitive page (banking/admin) = High
- XSS + CSRF token theft = CSRF bypass on critical action
- XSS + service worker = persistent XSS across pages
- XSS + credential theft via fake login form = ATO
- No JS allowed? CSS injection can still exfil tokens via attribute selectors — see CSS Injection
WAF bypass for XSS: Run bughunter/tools/waf_encoder.py "<payload>" --class xss to get 20+ variants (HTML entity, unicode escape, base64-wrapped). Try <svg onload=eval(atob('...'))> or <svg><animate onbegin=alert(1) attributeName=x dur=1s> when <script> is blocked. Probe which chars are allowed by testing individually, then construct payload from unblocked chars.
postMessage Testing
DOM XSS variant where window.addEventListener("message", ...) lacks proper event.origin validation. Common on SDK callbacks, OAuth redirect handlers, iframe widgets, chat/analytics scripts — easy to miss because the entry point is indirect (no URL parameter, no form field, source-code grep alone doesn't reveal whether the origin check is sound).
Vulnerable pattern:
Common origin-check bypasses:
| Weak check | Bypass | Example that passes | |
|---|---|---|---|
e.origin.indexOf("trusted") | substring anywhere | https://trusted.attacker.com | |
e.origin.startsWith("https://trusted") | suffix attack | https://trusted.attacker.com | |
e.origin.endsWith(".trusted.com") | infix attack | https://evil-trusted.com (no dot prefix) | |
e.origin === "null" | sandboxed iframe | srcdoc/sandbox iframe → origin literally "null" | |
Regex with unescaped . | . matches any char | /https?:\/\/trusted\.com/ matches https://trusted-com.evil.com | |
| No check at all | (just listen) | Any origin |
Finding listeners:
- Burp extension: postMessage-tracker — auto-logs every postMessage with sender origin
- The actual signal is whether the sink fires, not whether a listener exists — always confirm with the attacker page below
Attacker page template:
Chains That Pay:
Triage:
4. SSRF — SERVER-SIDE REQUEST FORGERY
Injection Points
SSRF Payloads (escalating impact)
SSRF IP Bypass Techniques (11 techniques)
| Technique | Example | Notes | |
|---|---|---|---|
| Decimal IP | http://2130706433 | 127.0.0.1 as decimal | |
| Octal IP | http://0177.0.0.1 | Octal 0177 = 127 | |
| Hex IP | http://0x7f.0x0.0x0.0x1 | Hex representation | |
| Short IP | http://127.1 | Abbreviated notation | |
| IPv6 | http://[::1] | Loopback in IPv6 | |
| IPv6 mapped | http://[::ffff:127.0.0.1] | IPv4-mapped IPv6 | |
| DNS rebinding | Attacker DNS → internal IP | First check = external, fetch = internal | |
| Redirect chain | External URL → 302 to internal | Vercel pattern — check each hop | |
| URL parser confusion | http://attacker.com#@internal | Parser inconsistency | |
| CNAME to internal | Attacker domain → internal hostname | DNS points inward | |
| Rare format | http://[::ffff:0x7f000001] | Mixed hex IPv6 |
SSRF Impact Chain
- DNS-only = Informational
- Internal service accessible = Medium
- Cloud metadata = High (key exposure)
- Cloud metadata + exfil keys = Critical
WAF bypass for SSRF: If WAF blocks 127.0.0.1/169.254.169.254, try 2130706433 (decimal), 0x7f000001 (hex), [::1] (IPv6), [::ffff:127.0.0.1] (IPv4-mapped), 127.0.0.1.nip.io (DNS rebind), or 127。0。0。1 (full-width period U+3002). Run payload through bughunter/tools/waf_encoder.py "<payload>" --class generic.
5. BUSINESS LOGIC
Transferred from web3's "incomplete code path" pattern.
Pattern 1: Fast Path Skips State Update
Pattern 2: Workflow Step Skip
Pattern 3: Negative / Zero Bypass
Pattern 4: Race Condition (TOCTOU)
6. RACE CONDITIONS
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/web2-vuln-classes/SKILL.md
Popularity
- Repository stars
- 870
- Repository forks
- 152
- 7-day trend score
- 34
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 17 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/shuvonsec/claude-bug-bounty/web2-vuln-classes)