UGLABS // Intern Training CVE Anatomy · Module 02
Level ENTRY
Duration ~15 MIN
Sections 5
Pre-req MODULE 01
Progress
01 / 06

01 // The record

A CVE record has five parts

In Module 01 you learned that a CVE is just an identifier, a case number. Now we open the case file. When you look up a CVE on the National Vulnerability Database, what you're looking at is a structured record. Every record has the same five parts in roughly the same order. Once you can read one, you can read all of them.

Below is what the record for CVE-2024-3094, the XZ Utils backdoor, looks like, stripped down. We'll go through each row in the sections that follow.

CVE-2024-3094 Critical
1Description
Malicious code was discovered in the upstream tarballs of xz, starting with version 5.6.0. The build process extracts a prebuilt object file…
2Severity
10.0 Critical · CVSS 3.1 vector string attached
3Weakness
CWE-506: Embedded Malicious Code
4Affected
xz versions 5.6.0 and 5.6.1 (CPE configuration list)
5References
12+ links · vendor advisory, CISA alert, oss-security mailing list, patch, news coverage

These five rows tell you everything you need: what happened, how bad, what kind of bug, what's affected, where to read more. That's the whole skill.

Check your understanding

Why is a CVE record useful even if you don't understand every line in it?

02 // Row 1: description

The description is the canonical story

The description is one paragraph written by the CNA, the CVE Numbering Authority that assigned the ID. It is the official, primary record of what the vulnerability is. Every news article, every vendor advisory, every blog post about the bug starts from this paragraph.

Read it carefully. Descriptions are dense on purpose. A good one tells you: what software is affected, what the flaw is, and what an attacker can do with it.

CVE-2024-3094 · Description Critical
Malicious code was discovered in the upstream tarballs of xz, starting with version 5.6.0. Through a series of complex obfuscations, the liblzma build process extracts a prebuilt object file from a disguised test file existing in the source code, which is then used to modify specific functions in the liblzma code. This results in a modified liblzma library that can be used by any software linked against this library, intercepting and modifying the data interaction with this library.

Notice what's in there. What software: xz, specifically versions starting at 5.6.0. What the flaw is: malicious code hidden in the upstream package, activated during build. What an attacker can do: intercept and modify data going through liblzma. Because OpenSSH links against this library on many Linux systems, that means tampering with SSH authentication.

This particular bug has a story behind it. It was planted by an attacker who spent three years building credibility under the fake name Jia Tan, eventually becoming a trusted maintainer of xz. They were caught by accident when a Microsoft engineer noticed SSH logins on a test machine were running half a second slower than usual. The description above is the dry version. The real story is one of the best in modern security history.

The description tells you WHAT. The story behind it tells you WHY. Both matter.
Check your understanding

Based only on the description above, which of these is the most accurate one-line summary you could give a client?

03 // Row 2: severity

Severity gives you one number

Every analysed CVE has a CVSS score, Common Vulnerability Scoring System. It's a number from 0 to 10 that summarises how bad the flaw is. Bigger number, worse flaw. The XZ backdoor scored a perfect 10.0.

The score breaks into five bands. Each band has a name you'll see used everywhere: in ticketing systems, vendor advisories, client conversations. Memorise these.

None0.0
Low0.1 – 3.9
Medium4.0 – 6.9
High7.0 – 8.9
Critical9.0 – 10.0

Underneath the number sits a vector string, something like CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. That's a structured breakdown of why the score is what it is. It looks like nonsense right now. We'll unpack it properly in Module 03.

For now, you only need to know the bands. When a client asks "how bad is it," Critical, High, Medium, or Low is the answer. The exact decimal rarely matters in the first conversation.

Severity is one number with five bands. The vector string explains how the number was built. That comes next module.

One thing to flag now, before anyone gets carried away: CVSS measures technical severity. It doesn't know whether you run the affected software, whether the vulnerable code path is reachable in your setup, or whether your business cares about the system in question.

A CVSS 10.0 in software you don't run is a 0 to you. A CVSS 6.5 in your customer payment system is your whole afternoon. The score is a starting point, not a verdict.

Check your understanding

A new CVE drops with a CVSS score of 7.4. Which band does it fall into?

04 // Rows 3 & 4: weakness + affected

What's broken, and where

Two rows of the record answer "what kind of bug is this, and which software does it affect". They look related but they are different things, and the difference matters.

CWE: Weakness
The category of the bug
CWE stands for Common Weakness Enumeration. It is a catalogue of vulnerability types. SQL injection is CWE-89. Buffer overflow is CWE-120. Embedded malicious code is CWE-506. One CWE covers thousands of individual bugs.
CWE-506 :: Embedded Malicious Code · the XZ bug's weakness type
CPE: Affected
The exact software versions
CPE stands for Common Platform Enumeration. It is a machine-readable list of every product version that is vulnerable. Looks ugly, but scanners and SBOM tools read it to know what to flag.
cpe:2.3:a:tukaani:xz:5.6.0:*:*:*:*:*:*:*
cpe:2.3:a:tukaani:xz:5.6.1:*:*:*:*:*:*:*

So for the XZ backdoor: the weakness type is CWE-506 (Embedded Malicious Code: rare and dramatic; most bugs are unintentional). The affected products are exactly xz versions 5.6.0 and 5.6.1. Earlier versions are fine. Later versions are fine. Just those two.

Why both? CWE tells you what to understand. If you've learned CWE-89 once, every SQL injection CVE makes sense the moment you see the category. CPE tells you what to scan for: automated tools compare your software inventory against the CPE list to find matches.

CWE = the type of bug (reusable across many CVEs). CPE = the exact software affected (specific to this CVE).
Check your understanding

A new CVE has the weakness type CWE-89 (SQL injection). A few weeks later, another CVE is published, also tagged CWE-89. What does that tell you?

05 // Row 5: references

References are the goldmine

The bottom of every CVE record is a list of links. This is where most interns stop reading. Don't be one of them. The references section is where the actual story lives: patches, vendor advisories, technical writeups, exploit details. Each link is tagged with what type of source it is.

Four reference tags you'll see most often:

Patch: links to the fix. First thing you check. If a Patch reference exists, the bug has an official remedy. If not, you might be looking at a zero-day or an unresponsive vendor.

Vendor Advisory: the official statement from whoever maintains the software. Microsoft, Red Hat, Cisco, the open-source project. Trust this over third-party writeups.

Third Party Advisory: a security researcher's or vendor's external writeup. Often more readable than the official version. Often more thorough.

Exploit: proof-of-concept code or technical exploitation detail. Not always present, sometimes deliberately withheld. When it's there, you read it. You don't run it against anything you don't own.

Tag each reference. What type is it?
access.redhat.com/security/cve/CVE-2024-3094
Source type?
cisa.gov/news-events/alerts/2024/03/29/reported-supply-chain-compromise-affecting-xz-utils
Source type?
github.com/tukaani-project/xz/commit/0b1f7d3e: "Revert build-to-host.m4 to upstream"
Source type?
openwall.com/lists/oss-security/2024/03/29/4: Andres Freund's full disclosure post
Source type?

06 // Final check

Read a record end to end

Three questions. They draw on everything above. If you get all three, you're ready for Module 03 (CVSS scoring). If you miss any, the result card tells you which section to re-read.

Question 1 of 3

A CVE record shows CWE-79 (Cross-site Scripting) for the weakness and CVSS 6.1 for the score. Which band, and what does the CWE tell you?

Question 2 of 3

You're triaging a CVE. You see Vendor Advisory and Patch references in the list, but no Exploit reference. What does the absence of an Exploit reference tell you?

Question 3 of 3

A client runs xz version 5.4.6. They've read the news about the XZ backdoor and they're worried. Based on the record you saw in this module, what do you tell them?

0/3

> Review before Module 03