Upload CVEscore model
Browse files- README.md +22 -7
- cvss_config.json +11 -11
- encoder/model.safetensors +1 -1
- 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,
|
| 20 |
| Metric | Value |
|
| 21 |
|---|---|
|
| 22 |
-
| Exact vector match | 0.
|
| 23 |
-
| Severity accuracy | 0.
|
| 24 |
-
| Base score MAE |
|
| 25 |
-
| Inference speed |
|
| 26 |
|
| 27 |
-
Per-metric macro F1: AV 0.
|
| 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 |
-
-
|
|
|
|
| 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.
|
| 47 |
-
"exact": 0.
|
| 48 |
-
"f1_AV": 0.
|
| 49 |
-
"f1_AC": 0.
|
| 50 |
-
"f1_PR": 0.
|
| 51 |
-
"f1_UI": 0.
|
| 52 |
-
"f1_S": 0.
|
| 53 |
-
"f1_C": 0.
|
| 54 |
-
"f1_I": 0.
|
| 55 |
-
"f1_A": 0.
|
| 56 |
-
"step":
|
| 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:
|
| 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:
|
| 3 |
size 72839
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b4e87e246fade5a7699ffe5571cc235a17774521a1512c78e31c590d198acacd
|
| 3 |
size 72839
|