On this page
What CVSS is and is not
CVSS — the Common Vulnerability Scoring System — is a rubric for scoring a vulnerability's technical severity. That is all it is. It is not a measure of business impact. It is not a measure of exploitability in your specific environment. It is not a measure of urgency. The score is a number between 0.0 and 10.0. The vector is the underlying breakdown of eight metrics that produces that number.
Most readers fixate on the number. That is the wrong habit. The number is a summary. The vector is the source. Two findings with the same score can have completely different attack profiles. A 7.5 that requires physical access to the machine is not the same risk as a 7.5 that is exploitable over the internet with no credentials. The number hides that distinction. The vector reveals it. Read the vector.
The eight metrics
CVSS v3.1 has eight base metrics. Each one answers a specific question about the vulnerability. Here is what each metric actually asks and what the values mean.
A worked example
Here is a SQL injection vector from a real pentest report. Read it left to right and translate each metric into a sentence.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H → 9.8 AV:N — Exploitable over the internet. No network adjacency needed. AC:L — Low complexity. The exploit works reliably, every time. PR:N — No credentials required. Anyone can attempt this. UI:N — No victim action needed. The attacker works alone. S:U — Scope unchanged. Impact stays within the database component. C:H — Full confidentiality loss. The attacker can read the entire database. I:H — Full integrity loss. The attacker can write, modify, or delete any row. A:H — Full availability loss. The attacker can drop tables or lock the database.
Put those sentences together: this SQL injection is exploitable from the internet, with low effort, by an unauthenticated attacker, requiring no victim interaction, fully compromising the confidentiality, integrity, and availability of the database. Of course it is a 9.8. Every metric is at its worst value. The only reason it is not a perfect 10.0 is that Scope is Unchanged — the attacker cannot use this bug to pivot outside the database component.
That analysis takes 60 seconds once you know the metrics. It tells you more than the score alone ever could. You now know exactly where the risk lives and what a fix needs to address: input validation before the query, parameterized statements, and no unauthenticated access to any endpoint that touches the database.
Score vs vector
The vector tells you more than the number. Here is a direct comparison. Both findings score 7.5. Their attack profiles are nothing alike.
Finding A — CVSS 7.5 AV:N / AC:L / PR:N / UI:N / S:U / C:H / I:N / A:N → Network reachable, no auth, no complexity. Data leak only — no write access. Finding B — CVSS 7.5 AV:L / AC:L / PR:H / UI:N / S:U / C:H / I:H / A:H → Requires local access and admin credentials. Full compromise once inside.
Finding A is publicly reachable by any unauthenticated user. The attacker population is the entire internet. Finding B requires local admin access — the attacker is already deeply inside your environment. The urgency for A is dramatically higher than B despite identical scores. If you only look at 7.5 vs 7.5, you schedule them identically. That is the wrong call.
Common misreadings
Three mistakes that show up constantly in security reviews.
- Treating the CVSS score as your risk. CVSS scores a class of vulnerability in the abstract. It does not know your WAF rules, your network segmentation, or whether that endpoint is even deployed in production. Your risk is CVSS score filtered through your environment. Do not skip the filtering step.
- Comparing CVSS 4.0 and CVSS 3.1 numbers directly. CVSS 4.0 is a newer scoring framework with different metrics and different math. A 7.0 in CVSS 4.0 is not the same as a 7.0 in CVSS 3.1. Check which version produced the score before comparing across reports. Most public vulnerability databases and scanners still report CVSS 3.1; newer tools are starting to ship 4.0. Mixing them without noting the version is how security reviews get wrong.
- Reading “Privileges Required: Low” as “requires an admin account.” Low privileges usually means any authenticated user. A free-tier account qualifies. A guest user qualifies. Anyone who can complete your signup flow qualifies. If your app allows self-service registration, PR:L is effectively unauthenticated for any attacker willing to create an account.