blitzstrike 1.0.68 → 1.0.70

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,35 @@ 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
+ ## [1.0.70] — 2026-09-13
9
+
10
+ ### Fixed — polish from live LLM-driven verification
11
+
12
+ - `scope_check` now recognizes filesystem paths (static source) as always
13
+ in-scope instead of refusing with a misleading empty-host message.
14
+ - `blitz_scan` (breadth) now matches Laravel static DB facade sinks
15
+ (`DB::select`/`DB::raw`/`DB::statement`/`DB::insert`/`DB::update`/
16
+ `DB::unprepared`, `->selectRaw`) — consistent with the depth layer.
17
+ - `generate_report` no longer renders `undefined` for findings that lack
18
+ `status`/`confidence`/`id`; it defaults to `detected` / `unscored` / `(no id)`.
19
+
20
+ ## [1.0.69] — 2026-09-13
21
+
22
+ ### Changed — agent-native skills polish
23
+
24
+ - `bs-source-audit` now points the driving agent at the dedicated `route_scan`
25
+ and `complex_scan` detectors for the deep/complex classes.
26
+ - `bs-orchestrate-engagement` gained a skill-chain map (which skill to load per
27
+ phase) and a stale-server pitfall (reload MCP if a detector returns
28
+ suspiciously empty output after an upgrade).
29
+
30
+ ## [1.0.67] — 2026-09-13
31
+
32
+ ### Changed — internal cleanup
33
+
34
+ - Removed stale internal references from source comments and docs so public
35
+ artifacts are self-contained and generic.
36
+
8
37
  ## [1.0.66] — 2026-09-13
9
38
 
10
39
  ### Changed — LLM-driven architecture (Mission Control removed)
package/dist/index.js CHANGED
@@ -7209,6 +7209,13 @@ var init_scanner = __esm(() => {
7209
7209
  "$wpdb->get_results(": "SQL injection (unprepared query)",
7210
7210
  "->query(": "SQL injection (query builder)",
7211
7211
  "->whereRaw(": "SQL injection (raw where)",
7212
+ "->selectRaw(": "SQL injection (raw select)",
7213
+ "DB::select(": "SQL injection (raw query)",
7214
+ "DB::raw(": "SQL injection (raw expression)",
7215
+ "DB::statement(": "SQL injection (raw statement)",
7216
+ "DB::insert(": "SQL injection (raw insert)",
7217
+ "DB::update(": "SQL injection (raw update)",
7218
+ "DB::unprepared(": "SQL injection (raw unprepared query)",
7212
7219
  "wp_remote_get(": "SSRF (unvalidated URL fetch)",
7213
7220
  "wp_remote_post(": "SSRF (unvalidated URL fetch)",
7214
7221
  "file_get_contents(": "SSRF / file read",
@@ -30486,7 +30493,7 @@ function summarize(findings) {
30486
30493
  const bySeverity = {};
30487
30494
  let evidenceArtifacts = 0;
30488
30495
  for (const f of findings) {
30489
- byStatus[f.status] = (byStatus[f.status] ?? 0) + 1;
30496
+ byStatus[f.status ?? "detected"] = (byStatus[f.status ?? "detected"] ?? 0) + 1;
30490
30497
  const sev = f.classification?.severity ?? "informational";
30491
30498
  bySeverity[sev] = (bySeverity[sev] ?? 0) + 1;
30492
30499
  evidenceArtifacts += f.evidence?.reduce((n, e) => n + (e.artifacts?.length ?? 0), 0) ?? 0;
@@ -30555,10 +30562,10 @@ function reportMarkdown(findings, opts = {}) {
30555
30562
  `;
30556
30563
  }
30557
30564
  for (const f of findings) {
30558
- lines.push(`### ${f.id} — ${f.title} [${severityLabel(f.classification?.severity ?? "informational")}]`);
30565
+ lines.push(`### ${f.id ?? "(no id)"} — ${f.title} [${severityLabel(f.classification?.severity ?? "informational")}]`);
30559
30566
  lines.push("");
30560
- lines.push(`- **Status**: \`${f.status}\``);
30561
- lines.push(`- **Confidence**: ${f.confidence} (${f.confidence_level})`);
30567
+ lines.push(`- **Status**: \`${f.status ?? "detected"}\``);
30568
+ lines.push(`- **Confidence**: ${f.confidence ?? "—"} (${f.confidence_level ?? "unscored"})`);
30562
30569
  if (f.classification?.cwe)
30563
30570
  lines.push(`- **CWE**: ${f.classification.cwe}`);
30564
30571
  if (f.classification?.cvss_score != null)
@@ -30796,6 +30803,9 @@ function loadChains() {
30796
30803
  }
30797
30804
  }
30798
30805
  function scopeCheck(target, scope = "", mode = "bug-bounty") {
30806
+ if (target.startsWith("/") || target.startsWith("./") || target.startsWith("../") || target.startsWith("~") || /^[a-zA-Z]:[\\/]/.test(target)) {
30807
+ return { target, allowed: true, enforcement: "off", reason: "static source path — always in-scope" };
30808
+ }
30799
30809
  let result;
30800
30810
  if (mode === "ctf" || mode === "reverse-engineering" || mode === "offensive") {
30801
30811
  result = { target, allowed: true, enforcement: "off", reason: `mode=${mode} disables scope enforcement` };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "1.0.68",
3
+ "version": "1.0.70",
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": {