Commit bd487f4
Add --triage: order findings by exploitation evidence, not just severity
Severity says how bad a vulnerability would be if exploited. It says
nothing about whether anyone is exploiting it, and on real output those
two questions give very different answers. --triage adds the second,
from EPSS (a daily per-CVE forecast of exploitation activity) and
CISA's known-exploited catalog.
The reordering is the point, and it is large. The likeliest-to-be-
exploited finding in debian:12 is CVE-2011-3389 at the 99.4th
percentile, and it is UNKNOWN-severity -- so --severity CRITICAL,HIGH
throws it away. Six of that image's eight CRITICALs sit between the
28th and 40th percentile, below the median.
Nothing is hidden and nothing is rewritten. The flag adds two columns
and changes the order: known-exploited first, then EPSS percentile
descending, then everything unscored in the severity order it had. No
status changes and no severity changes, because whether a vulnerability
is being exploited on someone else's network says nothing about whether
the code is present here -- the only question this tool answers.
There is no blended score. internal/cvss already documents Rank as a
display order and not a comparison order, for this exact reason: a
priority = f(cvss, epss, kev) number would be an opinion dressed as
arithmetic.
Both feeds are keyed by CVE and vexscan's findings often are not. On
rancher/rke2-runtime not one of 865 findings carries a CVE in any of
its own fields; expanding each through the OSV alias list the resolver
already fetched scores 834 of them anyway. The 31 that reach no CVE
cannot ever be scored, and are the case this could most easily have got
wrong: they sort last, which in a list ordered by likelihood reads as
"least likely". So the report says in as many words that they sort last
for lack of data rather than lack of risk, and counts "no CVE at all"
apart from "a CVE the feed has not scored yet" because the two have
different fixes -- nothing, and wait a day.
Absence from KEV means nothing at all. It is 1,660 entries against
EPSS's 355,094 and fired on zero of the 1,026 findings across both test
images. The summary states it as a checked fact rather than leaving a
blank column, and an unreachable feed prints a NOTE without failing the
run -- like --vexhub and unlike an unreadable package database, because
it over-reports rather than under-reports.
Feeds are cached under VEXSCAN_TRIAGE_CACHE. EPSS is served under a
dated filename, so the 302 is a HEAD that costs no bytes and a second
scan the same day downloads nothing; KEV revalidates with an ETag. A
cached copy is used when the network fails, and both the summary and
the caveat mark it (cached) with its date, because a percentile is a
claim about a day and a CI log read next month must not pretend
otherwise.
Measured: debian:12 scores 145 of 161, the 16 misses being exactly the
two ids EPSS has not reached yet; rke2-runtime scores 834 of 865 with
no CVE anywhere in the rows. Without the flag the output is
byte-identical to the previous release, diffed over a full 176-line
scan.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>1 parent 665d158 commit bd487f4
14 files changed
Lines changed: 2175 additions & 2 deletions
File tree
- internal
- analyze
- ecosystem
- triage
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
931 | 931 | | |
932 | 932 | | |
933 | 933 | | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
934 | 1038 | | |
935 | 1039 | | |
936 | 1040 | | |
| |||
1021 | 1125 | | |
1022 | 1126 | | |
1023 | 1127 | | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
1024 | 1136 | | |
1025 | 1137 | | |
1026 | 1138 | | |
| |||
1037 | 1149 | | |
1038 | 1150 | | |
1039 | 1151 | | |
1040 | | - | |
| 1152 | + | |
| 1153 | + | |
| 1154 | + | |
| 1155 | + | |
| 1156 | + | |
1041 | 1157 | | |
1042 | 1158 | | |
1043 | 1159 | | |
| |||
1090 | 1206 | | |
1091 | 1207 | | |
1092 | 1208 | | |
| 1209 | + | |
1093 | 1210 | | |
1094 | 1211 | | |
1095 | 1212 | | |
| |||
1140 | 1257 | | |
1141 | 1258 | | |
1142 | 1259 | | |
| 1260 | + | |
1143 | 1261 | | |
1144 | 1262 | | |
1145 | 1263 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
| |||
113 | 114 | | |
114 | 115 | | |
115 | 116 | | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
116 | 127 | | |
117 | 128 | | |
118 | 129 | | |
| |||
181 | 192 | | |
182 | 193 | | |
183 | 194 | | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
184 | 199 | | |
185 | 200 | | |
186 | 201 | | |
| |||
511 | 526 | | |
512 | 527 | | |
513 | 528 | | |
| 529 | + | |
514 | 530 | | |
515 | 531 | | |
516 | 532 | | |
| |||
657 | 673 | | |
658 | 674 | | |
659 | 675 | | |
| 676 | + | |
660 | 677 | | |
661 | 678 | | |
662 | 679 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
0 commit comments