A report that opens with "Critical vulnerability, urgent" and nothing else is a report a triage team will argue with. Sometimes they will downgrade it, sometimes they will close it as informational, and occasionally they will be right to do so. The Common Vulnerability Scoring System exists to replace that argument with arithmetic. Learn it well and you stop guessing at severity, start predicting how a program will read your finding, and write reports that are harder to dismiss.
CVSS is a severity framework maintained by FIRST, and it is currently split between version 3.1, which still dominates bug bounty triage, and version 4.0, which most large programs are gradually adopting. Both do the same basic job: they take a set of observable characteristics about a vulnerability and produce a number from 0.0 to 10.0, mapped to a qualitative band.
The bands are simple. Low runs from 0.1 to 3.9, Medium from 4.0 to 6.9, High from 7.0 to 8.9, and Critical from 9.0 to 10.0. Anything scoring 0.0 is a non-issue in CVSS terms.
What CVSS does not measure is risk. Risk involves your target's business context, the value of the data behind the bug, how likely someone is to find and use it, and whether compensating controls exist. CVSS gives you the severity half of that conversation. Nothing more.
Base metrics describe the vulnerability as it exists, independent of time and environment. In CVSS 3.1 there are eight, and it helps to think of them in two families.
Version 4.0 reorganises this considerably, adding Attack Requirements, splitting impact into vulnerable-system and subsequent-system consequences, and grouping metrics into Base, Threat, Environmental, and Supplemental sets. The official FIRST calculator is the only reliable way to convert a vector into a number, so always generate scores there rather than by hand.
Take a reflected cross-site scripting bug in a search parameter, reachable without login, that fires when a victim clicks a crafted link. Nothing is stored, and the script runs in the origin of the target site.
That produces the vector CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N, which scores 6.1, Medium. Plenty of hunters would call this critical in the title and then wonder why the payout felt small. The vector explains the program's reasoning before they have to explain it to you.
For contrast, an unauthenticated SQL injection that lets you read the entire database but not write to it scores 7.5, High, using CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N. Same "critical" label from the hunter, very different number, and programs price accordingly.
Temporal metrics cover exploit maturity and remediation confidence. Environmental metrics let an organisation adjust for its own architecture, for example by raising Confidentiality when a database holds payment records. Most public bug bounty programs ignore both in triage because they describe the vendor's world, not the bug's.
If you want to show real-world urgency, express it in prose and point to evidence: a public proof-of-concept, active scanning, or a FIRST EPSS percentile where the program publishes one. A paragraph of reasoning is worth more than an inflated vector nobody trusts.
Severity is not the only input to a bounty, but it is usually the first filter. It sets internal SLAs, decides which team picks up the ticket, and often feeds directly into a reward band. A few practical consequences:
Build the vector, generate the number with the official calculator, then read your own report as a triage engineer would. Ask whether every metric is backed by evidence in the write-up, and whether the impact section and the vector tell the same story. Include the vector string inline with your severity line, add one short paragraph justifying the two metrics people argue about most, Attack Complexity and User Interaction, and stop there.
The hunters who get predictable payouts are not the ones who shout loudest. They are the ones whose severity numbers hold up under scrutiny, because a number nobody can argue with is a number nobody can talk down.
Photo: RDNE Stock project / Pexels
A practical roadmap for leaving a salaried IT security role for full-time bug bounty, covering skills, track record,...
A step-by-step build of a Subfinder, httpx and Nuclei recon pipeline — install, script, filter the noise, and...
A broken trust boundary in a SaaS API let an unauthenticated request header become a full identity — here's the...
Notes from the front lines of bug hunting.
Read More© 2026 Bug Hunter Journal · Theme by QuomodoTheme