blitzstrike 2.4.102 → 2.4.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ All notable changes to Blitz Strike are documented here.
5
5
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [2.4.103] — 2026-09-17
9
+
10
+ ### Added — version-precise fingerprint-first (semver narrowing)
11
+
12
+ - `watchlistCveMatches` / `live_recon` now narrow the suggested CVEs by the
13
+ detected VERSION, not just the product. Each version-aware CVE carries a
14
+ `fixed_in` (semver boundary) + `version_key`; a detected version >= `fixed_in`
15
+ is excluded as patched, so `live_recon` names the EXACT CVE for the running
16
+ version instead of the whole product family. Verified: Next.js 14.2.5 →
17
+ CVE-2025-29927 (affected) but not CVE-2024-34351 (patched 14.1.1); Next.js
18
+ 15.3.0 → both excluded; unknown version → full product list (fallback).
19
+
8
20
  ## [2.4.102] — 2026-09-17
9
21
 
10
22
  ### Added — `broken_link_scan` (broken-link hijacking live detector)
package/dist/index.js CHANGED
@@ -36189,18 +36189,41 @@ function watchlist() {
36189
36189
  const recommendation = `Prioritize the ${unsaturated.length} non-saturated classes (top: ${unsaturated.slice(0, 3).map((e) => e.cwe).join(", ")}) — high frequency + high payout + not yet saturated. Skip saturated/low-value classes (XSS/CSRF/open-redirect standalone) unless they chain into account takeover. FINGERPRINT FIRST: if the target stack matches a watchlist product (Next.js, Kibana, Langflow, Confluence/Jira, PAN-OS, Grafana), test that specific CVE — top EPSS/report CVEs: ${topCve}.`;
36190
36190
  return { cwe_frequency: entries, cve_watchlist, recommendation };
36191
36191
  }
36192
- function watchlistCveMatches(techs, headers = {}, body = "") {
36192
+ function semverLt(a, b) {
36193
+ const pa = a.replace(/^v/, "").split(/[-+.]/).map((x) => parseInt(x, 10) || 0);
36194
+ const pb = b.replace(/^v/, "").split(/[-+.]/).map((x) => parseInt(x, 10) || 0);
36195
+ for (let i = 0;i < Math.max(pa.length, pb.length); i++) {
36196
+ const x = pa[i] ?? 0;
36197
+ const y = pb[i] ?? 0;
36198
+ if (x !== y)
36199
+ return x < y;
36200
+ }
36201
+ return false;
36202
+ }
36203
+ function watchlistCveMatches(techs, headers = {}, body = "", versions = []) {
36193
36204
  const { cve_watchlist } = loadWatchlist();
36194
36205
  const haystack = `${techs.join(" ")} ${Object.keys(headers).join(" ")} ${Object.values(headers).join(" ")} ${body}`.toLowerCase();
36195
36206
  return cve_watchlist.filter((c) => {
36196
36207
  const m = c.match;
36197
36208
  if (!m)
36198
36209
  return false;
36210
+ let matched = false;
36199
36211
  try {
36200
- return new RegExp(m, "i").test(haystack);
36212
+ matched = new RegExp(m, "i").test(haystack);
36201
36213
  } catch {
36214
+ matched = false;
36215
+ }
36216
+ if (!matched)
36202
36217
  return false;
36218
+ const fixedIn = c.fixed_in;
36219
+ const vkey = c.version_key;
36220
+ if (fixedIn && vkey) {
36221
+ const v = versions.find((x) => x.product.toLowerCase().includes(vkey.toLowerCase()));
36222
+ if (v?.version && !semverLt(v.version, fixedIn)) {
36223
+ return false;
36224
+ }
36203
36225
  }
36226
+ return true;
36204
36227
  });
36205
36228
  }
36206
36229
 
@@ -36638,7 +36661,7 @@ async function liveRecon(target, includeActive = false) {
36638
36661
  const waf = detectWaf(root.headers, root.body);
36639
36662
  const techs = detectTech(root.headers, root.body);
36640
36663
  const versions = extractVersion(root.headers, root.body);
36641
- const suggestedCves = watchlistCveMatches(techs, root.headers, root.body);
36664
+ const suggestedCves = watchlistCveMatches(techs, root.headers, root.body, versions);
36642
36665
  const { links, scripts } = crawlLinks(base, root.body);
36643
36666
  const { robots, sitemap } = await fetchRobotsAndSitemap(base);
36644
36667
  const allUrls = [...links, ...scripts, ...robots, ...sitemap];
@@ -181,7 +181,9 @@
181
181
  "epss": 1.0,
182
182
  "reports": 2669,
183
183
  "fingerprint": "Confluence (Server/Data Center) \u2014 /login.action, confluence headers",
184
- "match": "confluence|login\\.action|atlassian"
184
+ "match": "confluence|login\\.action|atlassian",
185
+ "fixed_in": "7.13.0",
186
+ "version_key": "confluence"
185
187
  },
186
188
  {
187
189
  "cve": "CVE-2025-29927",
@@ -191,7 +193,9 @@
191
193
  "epss": 0.9962,
192
194
  "reports": 132,
193
195
  "fingerprint": "_next/static/chunks/ bundles; x-middleware-subrequest header",
194
- "match": "_next/|__next|next\\.js|middleware"
196
+ "match": "_next/|__next|next\\.js|middleware",
197
+ "fixed_in": "15.2.3",
198
+ "version_key": "next"
195
199
  },
196
200
  {
197
201
  "cve": "CVE-2025-55182",
@@ -201,7 +205,9 @@
201
205
  "epss": 0.9956,
202
206
  "reports": 415,
203
207
  "fingerprint": "_next/ + Server Function / flight endpoints",
204
- "match": "_next/|server function|react server|rsc"
208
+ "match": "_next/|server function|react server|rsc",
209
+ "fixed_in": null,
210
+ "version_key": null
205
211
  },
206
212
  {
207
213
  "cve": "CVE-2025-3248",
@@ -211,7 +217,9 @@
211
217
  "epss": 0.9997,
212
218
  "reports": 29,
213
219
  "fingerprint": "/api/v1/validate/code \u2014 AI/agent tooling",
214
- "match": "langflow|validate/code"
220
+ "match": "langflow|validate/code",
221
+ "fixed_in": null,
222
+ "version_key": null
215
223
  },
216
224
  {
217
225
  "cve": "CVE-2024-34351",
@@ -221,7 +229,9 @@
221
229
  "epss": 0.0545,
222
230
  "reports": 50,
223
231
  "fingerprint": "Next.js Server Actions (Host header + relative redirect)",
224
- "match": "_next/|server action"
232
+ "match": "_next/|server action",
233
+ "fixed_in": "14.1.1",
234
+ "version_key": "next"
225
235
  },
226
236
  {
227
237
  "cve": "CVE-2025-0133",
@@ -231,7 +241,9 @@
231
241
  "epss": 0.4352,
232
242
  "reports": 1990,
233
243
  "fingerprint": "GlobalProtect captive portal",
234
- "match": "globalprotect|palo alto|pan-os|pan os"
244
+ "match": "globalprotect|palo alto|pan-os|pan os",
245
+ "fixed_in": null,
246
+ "version_key": null
235
247
  },
236
248
  {
237
249
  "cve": "CVE-2026-0257",
@@ -241,7 +253,9 @@
241
253
  "epss": 0.8668,
242
254
  "reports": 27,
243
255
  "fingerprint": "GlobalProtect portal/gateway",
244
- "match": "globalprotect|palo alto|pan-os|pan os"
256
+ "match": "globalprotect|palo alto|pan-os|pan os",
257
+ "fixed_in": null,
258
+ "version_key": null
245
259
  },
246
260
  {
247
261
  "cve": "CVE-2025-4123",
@@ -251,7 +265,9 @@
251
265
  "epss": 0.9781,
252
266
  "reports": 220,
253
267
  "fingerprint": "Grafana path traversal + open redirect (Image Renderer)",
254
- "match": "grafana|x-grafana"
268
+ "match": "grafana|x-grafana",
269
+ "fixed_in": null,
270
+ "version_key": null
255
271
  },
256
272
  {
257
273
  "cve": "CVE-2021-20323",
@@ -261,7 +277,9 @@
261
277
  "epss": 0.3725,
262
278
  "reports": 107,
263
279
  "fingerprint": "Keycloak auth flows",
264
- "match": "keycloak|kc-|realms/"
280
+ "match": "keycloak|kc-|realms/",
281
+ "fixed_in": null,
282
+ "version_key": null
265
283
  },
266
284
  {
267
285
  "cve": "CVE-2018-5230",
@@ -271,7 +289,9 @@
271
289
  "epss": 0.3761,
272
290
  "reports": 4694,
273
291
  "fingerprint": "Jira /issuecollector custom fields",
274
- "match": "jira|issuecollector|atlassian"
292
+ "match": "jira|issuecollector|atlassian",
293
+ "fixed_in": null,
294
+ "version_key": null
275
295
  },
276
296
  {
277
297
  "cve": "CVE-2026-33461",
@@ -281,7 +301,9 @@
281
301
  "epss": 0.0028,
282
302
  "reports": 8,
283
303
  "fingerprint": "Kibana internal Fleet endpoints",
284
- "match": "kibana|elastic|fleet"
304
+ "match": "kibana|elastic|fleet",
305
+ "fixed_in": null,
306
+ "version_key": null
285
307
  },
286
308
  {
287
309
  "cve": "CVE-2026-49093",
@@ -291,7 +313,9 @@
291
313
  "epss": 0.002,
292
314
  "reports": 5,
293
315
  "fingerprint": "Kibana connectors / allowlist bypass",
294
- "match": "kibana|elastic|connector"
316
+ "match": "kibana|elastic|connector",
317
+ "fixed_in": null,
318
+ "version_key": null
295
319
  },
296
320
  {
297
321
  "cve": "CVE-2026-26938",
@@ -301,7 +325,9 @@
301
325
  "epss": 0.0025,
302
326
  "reports": 5,
303
327
  "fingerprint": "Kibana Workflows",
304
- "match": "kibana|elastic|workflow"
328
+ "match": "kibana|elastic|workflow",
329
+ "fixed_in": null,
330
+ "version_key": null
305
331
  },
306
332
  {
307
333
  "cve": "CVE-2026-33068",
@@ -311,7 +337,9 @@
311
337
  "epss": 0.0034,
312
338
  "reports": 5,
313
339
  "fingerprint": "repo .claude/settings.json",
314
- "match": "\\.claude/settings"
340
+ "match": "\\.claude/settings",
341
+ "fixed_in": null,
342
+ "version_key": null
315
343
  },
316
344
  {
317
345
  "cve": "CVE-2025-25297",
@@ -321,7 +349,9 @@
321
349
  "epss": 0.0062,
322
350
  "reports": 2,
323
351
  "fingerprint": "Label Studio S3 integration",
324
- "match": "label ?studio|labelstudio|label-studio"
352
+ "match": "label ?studio|labelstudio|label-studio",
353
+ "fixed_in": null,
354
+ "version_key": null
325
355
  },
326
356
  {
327
357
  "cve": "CVE-2026-33309",
@@ -331,7 +361,9 @@
331
361
  "epss": 0.0142,
332
362
  "reports": 6,
333
363
  "fingerprint": "Langflow multipart upload filename",
334
- "match": "langflow"
364
+ "match": "langflow",
365
+ "fixed_in": null,
366
+ "version_key": null
335
367
  },
336
368
  {
337
369
  "cve": "CVE-2026-45543",
@@ -341,7 +373,9 @@
341
373
  "epss": 0.0027,
342
374
  "reports": 5,
343
375
  "fingerprint": "Nextcloud Forms collaborator removal",
344
- "match": "nextcloud|ocs-provider"
376
+ "match": "nextcloud|ocs-provider",
377
+ "fixed_in": null,
378
+ "version_key": null
345
379
  },
346
380
  {
347
381
  "cve": "CVE-2017-15277",
@@ -351,7 +385,9 @@
351
385
  "epss": 0.1919,
352
386
  "reports": 5914,
353
387
  "fingerprint": "image processing (GIF upload)",
354
- "match": "imagemagick|graphicsmagick"
388
+ "match": "imagemagick|graphicsmagick",
389
+ "fixed_in": null,
390
+ "version_key": null
355
391
  }
356
392
  ]
357
393
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "2.4.102",
3
+ "version": "2.4.103",
4
4
  "description": "Blitz Strike — a universal MCP security-audit toolbelt. BLITZ sweeps the attack surface, EAGLE-EYE traces source-to-sink, STRIKE verifies live. 57 attack chains, 130-tool catalog, intelligence data layer. One server, every agent.",
5
5
  "type": "module",
6
6
  "bin": {