blitzstrike 2.4.152 → 2.4.153

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.153] — 2026-10-11
9
+
10
+ ### Fixed — blind_oracle/confirm trailing-slash redirect false-negative
11
+
12
+ - Real-target bug: `baseUrl.replace(/\/+$/,"")` stripped the trailing slash, so a
13
+ path-based endpoint (e.g. /Less-8) hit a 301 redirect and the probe hashed the
14
+ redirect body instead of the real response — causing false negatives that a
15
+ flat mock lab never exposed. Now the base keeps a trailing slash and fetches
16
+ follow redirects. Verified against sqli-labs Less-8 (boolean blind) and Less-9
17
+ (time blind): blind_oracle flags sql context, blind_sqli_confirm reports
18
+ CONFIRMED via boolean (706b vs 722b) + time (~5001ms vs ~2ms) differentials.
19
+
8
20
  ## [2.4.152] — 2026-10-11
9
21
 
10
22
  ### Added — autonomous blind SQLi confirmation (blind_sqli_confirm)
package/dist/index.js CHANGED
@@ -62357,7 +62357,7 @@ function classifyBlindProbe(input) {
62357
62357
  return { same_as_baseline: same, signal, reason };
62358
62358
  }
62359
62359
  async function blindOracle(baseUrl, param, value, opts = {}) {
62360
- const base = baseUrl.replace(/\/+$/, "");
62360
+ const base = baseUrl.replace(/\/+$/, "") + "/";
62361
62361
  const sinks = opts.sinks ?? ["sql", "ssti", "xss"];
62362
62362
  const timeDbms = opts.timeDbms ?? "mysql";
62363
62363
  const marker = `zz${Math.random().toString(36).slice(2, 10)}zz`;
@@ -62368,7 +62368,7 @@ async function blindOracle(baseUrl, param, value, opts = {}) {
62368
62368
  let baselineSize = 0;
62369
62369
  let baselineStatus = 0;
62370
62370
  try {
62371
- const r = await fetch(build(value), { headers, redirect: "manual", signal: AbortSignal.timeout(timeoutMs) });
62371
+ const r = await fetch(build(value), { headers, redirect: "follow", signal: AbortSignal.timeout(timeoutMs) });
62372
62372
  baselineStatus = r.status;
62373
62373
  const body = await r.text();
62374
62374
  baselineHash = sha256(body);
@@ -62389,7 +62389,7 @@ async function blindOracle(baseUrl, param, value, opts = {}) {
62389
62389
  for (const p of probes) {
62390
62390
  const t0 = Date.now();
62391
62391
  try {
62392
- const r = await fetch(build(p.payload), { headers, redirect: "manual", signal: AbortSignal.timeout(timeoutMs) });
62392
+ const r = await fetch(build(p.payload), { headers, redirect: "follow", signal: AbortSignal.timeout(timeoutMs) });
62393
62393
  const timing = Date.now() - t0;
62394
62394
  const status = r.status;
62395
62395
  const body = await r.text();
@@ -62444,7 +62444,7 @@ async function blindOracle(baseUrl, param, value, opts = {}) {
62444
62444
  };
62445
62445
  }
62446
62446
  async function confirmBlindSqli(baseUrl, param, value, dbms = "mysql") {
62447
- const base = baseUrl.replace(/\/+$/, "");
62447
+ const base = baseUrl.replace(/\/+$/, "") + "/";
62448
62448
  const p = blindSqli(dbms);
62449
62449
  if (!p)
62450
62450
  return { error: `no blind-SQLi playbook for '${dbms}'`, known: ["mysql", "postgresql", "mssql", "oracle", "sqlite"] };
@@ -62452,7 +62452,7 @@ async function confirmBlindSqli(baseUrl, param, value, dbms = "mysql") {
62452
62452
  const build = (payload) => `${base}?${encodeURIComponent(param)}=${encodeURIComponent(payload)}`;
62453
62453
  const fetchSize = async (payload) => {
62454
62454
  try {
62455
- const r = await fetch(build(payload), { headers, redirect: "manual", signal: AbortSignal.timeout(9000) });
62455
+ const r = await fetch(build(payload), { headers, redirect: "follow", signal: AbortSignal.timeout(9000) });
62456
62456
  const body = await r.text();
62457
62457
  return { ok: true, status: r.status, size: body.length };
62458
62458
  } catch (e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "2.4.152",
3
+ "version": "2.4.153",
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": {