Commit 2f5e895
Ubuntu
Fix CVE version-range matching: numeric comparison + Excluding bounds
query_cves() (the primary/default correlation path once the SQLite CVE
snapshot is installed) compared version_start/version_end with plain
SQL >=/<=, which is a lexicographic string comparison, not numeric.
"2.4.9" sorts after "2.4.10", so ranges spanning a digit-width boundary
silently produced both false negatives (real vulnerabilities missed)
and false positives (patched versions flagged). Version filtering now
happens in Python via cve_matcher.version_in_range, which does real
semver comparison.
Both the SQLite ingestion path (_extract_cpe_matches_from_node) and the
JSON-fallback path (cve_matcher.extract_cve_info) also only read NVD's
versionStartIncluding/versionEndIncluding fields, ignoring
versionStartExcluding/versionEndExcluding entirely. Since NVD commonly
expresses "fixed in version X" as an Excluding bound, this silently
dropped the upper bound for many CVEs (every later version stayed
"vulnerable" forever) and mistreated Excluding boundaries as inclusive
elsewhere. Both extraction paths now capture and honor exclusivity.
version_in_range's fallback for versions packaging.version can't parse
(e.g. Debian/Ubuntu-suffixed versions like "2.4.41-1ubuntu1", which are
extremely common in real banners) used to unconditionally `return True`
for any bounded range, which is the opposite of what this module exists
to prevent. It now recovers the leading numeric version when possible
and otherwise declines to claim a match rather than flooding results.
cve_matcher.py had zero test coverage before this change.1 parent e6b5846 commit 2f5e895
4 files changed
Lines changed: 349 additions & 59 deletions
File tree
- bitprobe/scanner
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
17 | 16 | | |
18 | 17 | | |
19 | 18 | | |
| |||
1067 | 1066 | | |
1068 | 1067 | | |
1069 | 1068 | | |
| 1069 | + | |
| 1070 | + | |
| 1071 | + | |
| 1072 | + | |
| 1073 | + | |
| 1074 | + | |
| 1075 | + | |
| 1076 | + | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
| 1081 | + | |
| 1082 | + | |
| 1083 | + | |
| 1084 | + | |
| 1085 | + | |
| 1086 | + | |
| 1087 | + | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
| 1091 | + | |
1070 | 1092 | | |
1071 | 1093 | | |
1072 | 1094 | | |
1073 | | - | |
1074 | | - | |
1075 | | - | |
1076 | | - | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
1077 | 1099 | | |
1078 | 1100 | | |
1079 | 1101 | | |
| |||
1235 | 1257 | | |
1236 | 1258 | | |
1237 | 1259 | | |
| 1260 | + | |
| 1261 | + | |
| 1262 | + | |
| 1263 | + | |
| 1264 | + | |
| 1265 | + | |
1238 | 1266 | | |
1239 | 1267 | | |
1240 | 1268 | | |
| |||
1247 | 1275 | | |
1248 | 1276 | | |
1249 | 1277 | | |
1250 | | - | |
| 1278 | + | |
1251 | 1279 | | |
1252 | 1280 | | |
1253 | 1281 | | |
| |||
1265 | 1293 | | |
1266 | 1294 | | |
1267 | 1295 | | |
1268 | | - | |
| 1296 | + | |
| 1297 | + | |
| 1298 | + | |
1269 | 1299 | | |
1270 | 1300 | | |
1271 | 1301 | | |
| |||
1279 | 1309 | | |
1280 | 1310 | | |
1281 | 1311 | | |
1282 | | - | |
1283 | | - | |
1284 | | - | |
1285 | | - | |
1286 | | - | |
1287 | | - | |
1288 | | - | |
1289 | | - | |
1290 | | - | |
1291 | | - | |
1292 | 1312 | | |
1293 | 1313 | | |
1294 | 1314 | | |
1295 | 1315 | | |
1296 | 1316 | | |
1297 | | - | |
| 1317 | + | |
1298 | 1318 | | |
1299 | | - | |
1300 | | - | |
| 1319 | + | |
| 1320 | + | |
| 1321 | + | |
| 1322 | + | |
| 1323 | + | |
| 1324 | + | |
| 1325 | + | |
| 1326 | + | |
| 1327 | + | |
| 1328 | + | |
| 1329 | + | |
| 1330 | + | |
| 1331 | + | |
| 1332 | + | |
| 1333 | + | |
| 1334 | + | |
1301 | 1335 | | |
1302 | 1336 | | |
1303 | 1337 | | |
1304 | 1338 | | |
1305 | 1339 | | |
1306 | 1340 | | |
1307 | | - | |
1308 | 1341 | | |
1309 | | - | |
| 1342 | + | |
1310 | 1343 | | |
1311 | 1344 | | |
1312 | 1345 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
129 | | - | |
130 | | - | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
131 | 166 | | |
132 | 167 | | |
133 | 168 | | |
134 | 169 | | |
135 | | - | |
136 | | - | |
137 | | - | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | | - | |
157 | | - | |
158 | | - | |
| 170 | + | |
| 171 | + | |
159 | 172 | | |
160 | 173 | | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
161 | 201 | | |
162 | 202 | | |
163 | 203 | | |
| |||
180 | 220 | | |
181 | 221 | | |
182 | 222 | | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
189 | | - | |
190 | | - | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
191 | 241 | | |
| 242 | + | |
| 243 | + | |
192 | 244 | | |
193 | 245 | | |
194 | 246 | | |
195 | 247 | | |
196 | 248 | | |
197 | 249 | | |
| 250 | + | |
| 251 | + | |
198 | 252 | | |
199 | 253 | | |
200 | 254 | | |
| |||
211 | 265 | | |
212 | 266 | | |
213 | 267 | | |
214 | | - | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
215 | 275 | | |
216 | 276 | | |
217 | 277 | | |
| |||
0 commit comments