angronain commited on
Commit
ed4580a
·
verified ·
1 Parent(s): 0cff4fd

Upload CVEscore model

Browse files
Files changed (4) hide show
  1. README.md +22 -7
  2. cvss_config.json +11 -11
  3. encoder/model.safetensors +1 -1
  4. heads.pt +1 -1
README.md CHANGED
@@ -11,20 +11,34 @@ base_model: microsoft/deberta-v3-base
11
  Fine-tuned `microsoft/deberta-v3-base` with 8 classification heads (AV, AC, PR, UI, S, C, I, A).
12
  The base score and severity are computed from the predicted vector with the official CVSS v3.1 formula.
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  ## Training data and split
15
  NVD CVE JSON 2.0 feeds, CVEs with a CVSS v3.1 vector (NVD score preferred, CNA score otherwise).
16
  **Time-based split**: train on CVEs published before 2024-10-01, validate up to the end of 2024,
17
  test on CVEs published from 2025 onwards. No random split, so no leakage from the future.
18
 
19
- ## Test results (123,460 CVEs published in 2025+)
20
  | Metric | Value |
21
  |---|---|
22
- | Exact vector match | 0.401 |
23
- | Severity accuracy | 0.629 |
24
- | Base score MAE | 1.036 |
25
- | Inference speed | 0.99 ms/CVE (RTX 5080, batched) |
26
 
27
- Per-metric macro F1: AV 0.761, AC 0.672, PR 0.741, UI 0.880, S 0.843, C 0.760, I 0.764, A 0.625
28
 
29
  ## Intended use
30
  Triage aid: pre-score new CVEs before official scoring is available, and route low-confidence
@@ -33,7 +47,8 @@ Not a replacement for analyst scoring.
33
 
34
  ## Limitations
35
  - English descriptions only; vague descriptions ("unspecified vulnerability") are scored poorly.
36
- - Labels mix NVD and vendor (CNA) scores, which sometimes disagree.
 
37
  - CVSS v3.1 only (no v4.0).
38
 
39
  ## Usage
 
11
  Fine-tuned `microsoft/deberta-v3-base` with 8 classification heads (AV, AC, PR, UI, S, C, I, A).
12
  The base score and severity are computed from the predicted vector with the official CVSS v3.1 formula.
13
 
14
+ ## Input format
15
+ Prefix the description with who will score the CVE, as in training:
16
+
17
+ - `[NVD] <description>` predicts the vector NVD would give.
18
+ - `[CNA: <org>] <description>` predicts the vector that CNA would give. `<org>` is the domain of the CNA's
19
+ email without the TLD (`security@wordfence.com` -> `wordfence`), or `cisa-adp` for CISA's ADP.
20
+
21
+ Remove CVSS vectors and scores quoted in the description first (`strip_cvss` in `src/cvss_text.py`):
22
+ the model was trained without them.
23
+
24
+ With every CVE prompted as `[NVD]`, exact match is 0.393 overall (0.552 on NVD-scored CVEs).
25
+ Tagging each CVE with its real scorer raises CNA-scored exact match from 0.339 to 0.438.
26
+ Ablation: https://github.com/atomic-crafter/CVEscore/blob/master/results/ablation.md
27
+
28
  ## Training data and split
29
  NVD CVE JSON 2.0 feeds, CVEs with a CVSS v3.1 vector (NVD score preferred, CNA score otherwise).
30
  **Time-based split**: train on CVEs published before 2024-10-01, validate up to the end of 2024,
31
  test on CVEs published from 2025 onwards. No random split, so no leakage from the future.
32
 
33
+ ## Test results (123,459 CVEs published in 2025+, each tagged with its scorer)
34
  | Metric | Value |
35
  |---|---|
36
+ | Exact vector match | 0.467 |
37
+ | Severity accuracy | 0.691 |
38
+ | Base score MAE | 0.860 |
39
+ | Inference speed | 1.01 ms/CVE (RTX 5080, batched) |
40
 
41
+ Per-metric macro F1: AV 0.782, AC 0.707, PR 0.746, UI 0.903, S 0.851, C 0.819, I 0.819, A 0.796
42
 
43
  ## Intended use
44
  Triage aid: pre-score new CVEs before official scoring is available, and route low-confidence
 
47
 
48
  ## Limitations
49
  - English descriptions only; vague descriptions ("unspecified vulnerability") are scored poorly.
50
+ - NVD and vendor (CNA) scores disagree on most CVEs scored by both (18% exact agreement in 2025+),
51
+ which caps achievable accuracy.
52
  - CVSS v3.1 only (no v4.0).
53
 
54
  ## Usage
cvss_config.json CHANGED
@@ -43,17 +43,17 @@
43
  "max_length": 256,
44
  "val_start": "2024-10-01",
45
  "best_val": {
46
- "mean_macro_f1": 0.7967916131945477,
47
- "exact": 0.4899665551839465,
48
- "f1_AV": 0.727,
49
- "f1_AC": 0.6857,
50
- "f1_PR": 0.7472,
51
- "f1_UI": 0.9159,
52
- "f1_S": 0.9198,
53
- "f1_C": 0.8651,
54
- "f1_I": 0.8507,
55
- "f1_A": 0.663,
56
- "step": 10360,
57
  "epoch": 3
58
  }
59
  }
 
43
  "max_length": 256,
44
  "val_start": "2024-10-01",
45
  "best_val": {
46
+ "mean_macro_f1": 0.836034779434055,
47
+ "exact": 0.5682831661092531,
48
+ "f1_AV": 0.7348,
49
+ "f1_AC": 0.7293,
50
+ "f1_PR": 0.7529,
51
+ "f1_UI": 0.9366,
52
+ "f1_S": 0.9351,
53
+ "f1_C": 0.878,
54
+ "f1_I": 0.8784,
55
+ "f1_A": 0.8432,
56
+ "step": 17448,
57
  "epoch": 3
58
  }
59
  }
encoder/model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:9fe5687f3a53d137afd6d90ba6376fbf5b3822201f8d3933ea962bb0470c77df
3
  size 735348840
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b009823848a5c5833226ddd386c081955551d3cfb44b2cefbf937f5873c37cb8
3
  size 735348840
heads.pt CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:53e6f7f799ff589a01f8b87552653559c51c373d84441dc79be94eba323a58df
3
  size 72839
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b4e87e246fade5a7699ffe5571cc235a17774521a1512c78e31c590d198acacd
3
  size 72839