root@thehacksparrow:~/writeups$ SYSTEM ONLINE
root@sparrow:~/writeups$ cat owasp-vulnerabilities-explained.md
// bug-bounty

OWASP-Style Web Vulnerabilities, Explained

23 Jul 2026 · 6 min read

Bug bounty hunting is mostly pattern recognition: the same fifteen or so vulnerability classes resurface across almost every web application, dressed up differently each time. This is the plain-English map — what each class is, where it tends to show up, and why it's worth your time.

🔓 IDOR / BOLA

You access another user's data just by changing an ID in the request — /api/invoices/1001 becomes /api/invoices/1002, and you're looking at someone else's invoice. It shows up anywhere a resource is addressed by an ID: orders, files, tickets, messages, projects.

Where it shows up: Test it with two accounts: create a resource with account A, capture the request, replay it as account B.

👑 Broken Access Control

Same family as IDOR, one level up: you can call an action your role shouldn't allow at all, not just read someone else's data. A normal user hitting an admin-only endpoint and having it actually work.

Where it shows up: Admin panels, team/workspace management, billing and permission settings are the classic places it hides.

🔐 Account Takeover

Any flaw that lets you seize control of someone else's account — usually through password reset, email change, OTP verification or session handling gone wrong. It's consistently one of the highest-value bug classes.

Where it shows up: Look at every 'edge path' in an auth flow: expired tokens, reused tokens, changing email without confirmation, alternate recovery routes.

🧾 JWT Vulnerabilities

JWTs used for auth carry their own class of bugs: tokens that don't expire, remain valid after logout or password change, or accept alg: none — meaning the signature check can be skipped entirely.

Where it shows up: Decode any JWT you get and check what happens if you tamper with role, expiry or algorithm.

📦 File Upload Vulnerabilities

Uploading a file that the server or a victim's browser later executes — an SVG with embedded JavaScript, an HTML file served from a trusted origin, a double extension that slips past a naive filter.

Where it shows up: Avatars, attachments, CSV imports and support tickets are the usual entry points.

🌍 SSRF

You make the server itself issue a request to a URL you control. Anywhere an app fetches a URL on your behalf — image import, webhook, link preview, PDF generator — is a candidate.

Where it shows up: A safe first test: point it at your own domain via Burp Collaborator and see if a request lands.

🧬 GraphQL Misconfiguration

GraphQL endpoints often ship with introspection wide open, exposing the entire schema, or with mutations that skip the authorization checks their REST equivalents would have.

Where it shows up: Look for /graphql, /gql; a simple { __schema { types { name } } } query tells you a lot.

🛒 Price Manipulation

Tampering with price, quantity, discount or plan fields from the client side, and having the backend simply trust them instead of recalculating server-side.

Where it shows up: Carts, checkouts, coupon codes and subscription plans are the classic targets.

📩 Email / OTP Verification Bypass

Skipping an email, SMS or OTP check entirely — an empty code that's accepted, a code for one account reused against another, no rate limit on attempts.

Where it shows up: Signup, login, 2FA, password reset and email/phone changes all rely on this kind of check.

🧑‍💼 Privilege Escalation

A normal user ending up with admin-level permissions — often by replaying an admin-only role-change request with their own session, or editing a hidden role field the client wasn't supposed to touch.

Where it shows up: Team/workspace management and permission settings are where this tends to live.

🗂️ Directory Traversal / LFI

Reading files the application never meant to expose, by manipulating a file=/path= parameter with relative paths like ../../../../etc/passwd.

Where it shows up: Download and document-export endpoints are the usual suspects.

🔎 Sensitive Data Exposure

The API quietly returns more than the UI shows — internal notes, roles, tokens, billing details sitting in a JSON response nobody bothered to trim.

Where it shows up: Always read the full response body, not just what renders on screen.

🧨 Race Condition

Firing a one-time action many times in parallel, before the backend has a chance to update its state — redeeming a coupon twice, claiming a reward more than once.

Where it shows up: Anything tied to a limited resource — stock, credits, votes, gift cards — is worth racing.

🧷 CORS Misconfiguration

An authenticated endpoint that reflects an arbitrary Origin header back in Access-Control-Allow-Origin while also allowing credentials — letting any external site read the victim's private data.

Where it shows up: Add Origin: https://evil.com to an authenticated request and check the response headers.

🔁 CSRF

Tricking an authenticated victim's browser into firing a sensitive request without their consent — changing an email, adding a payment method, deleting an account.

Where it shows up: Check whether the action requires a CSRF token at all, and whether cookies are SameSite-protected.