blitzstrike 2.4.17 → 2.4.18

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.18] — 2026-09-14
9
+
10
+ ### Fixed — catalog placeholder installs (full audit)
11
+
12
+ - 3 Go tools that had a placeholder install now install for real:
13
+ cloudfox / ligolo-ng (`go install …@latest`), gophish (`go build`).
14
+ - 4 GUI/C2/versioned tools (havoc, ghidra, cutter, velociraptor) + burp-suite-mcp
15
+ are now flagged `installable: false` — bulk-install reports them as "manual
16
+ (install by hand)" instead of failing on a fake "download from github releases".
17
+ - `ensureTool` / `ensure_tool` now return `action: manual` + the note for these
18
+ tools instead of attempting the placeholder command.
19
+
8
20
  ## [2.4.17] — 2026-09-14
9
21
 
10
22
  ### Added — auto-provision toolchains + non-interactive installs
package/dist/index.js CHANGED
@@ -7553,6 +7553,9 @@ function ensureTool(name) {
7553
7553
  if (!t) {
7554
7554
  return { found: false, query: name, suggestions: tools.slice(0, 5).map((x) => x.name) };
7555
7555
  }
7556
+ if (t.installable === false) {
7557
+ return { name: t.name, installed: false, action: "manual", note: t.note ?? "manual install (GUI/C2/versioned — install by hand)" };
7558
+ }
7556
7559
  const check = spawnSync(t.check_installed.command, { shell: true, timeout: 15000 });
7557
7560
  if (check.status !== 127 && check.error === undefined) {
7558
7561
  return { name: t.name, installed: true, action: "none", note: "already installed" };
@@ -7650,6 +7653,10 @@ function ensureToolAsync(name, timeoutMs = 300000) {
7650
7653
  resolve({ found: false, query: name });
7651
7654
  return;
7652
7655
  }
7656
+ if (t.installable === false) {
7657
+ resolve({ name: t.name, installed: false, action: "manual", note: t.note ?? "manual install (GUI/C2/versioned — install by hand)" });
7658
+ return;
7659
+ }
7653
7660
  const check = spawn(t.check_installed.command, { shell: true, timeout: 15000 });
7654
7661
  check.on("error", () => {});
7655
7662
  check.on("close", (code) => {
@@ -7699,9 +7706,9 @@ function ensureToolAsync(name, timeoutMs = 300000) {
7699
7706
  }
7700
7707
  async function installAllTools(opts = {}) {
7701
7708
  const tools = loadTools();
7702
- const skippedMcp = tools.filter((t) => t.category === "mcp-server" && t.installable !== true).map((t) => t.name);
7709
+ const skippedManual = tools.filter((t) => t.installable === false).map((t) => t.name);
7703
7710
  const cat = opts.category?.toLowerCase();
7704
- const targets = tools.filter((t) => (t.category !== "mcp-server" || t.installable === true) && (!cat || t.category === cat));
7711
+ const targets = tools.filter((t) => t.installable !== false && (!cat || t.category === cat));
7705
7712
  const concurrency = Math.max(1, opts.concurrency ?? 4);
7706
7713
  const results = [];
7707
7714
  let idx = 0;
@@ -7723,7 +7730,7 @@ async function installAllTools(opts = {}) {
7723
7730
  installed,
7724
7731
  already_installed: already,
7725
7732
  failed,
7726
- skipped_mcp_servers: skippedMcp,
7733
+ skipped_manual: skippedManual,
7727
7734
  results
7728
7735
  };
7729
7736
  }
@@ -16056,11 +16063,13 @@ async function runInstallTools(args) {
16056
16063
  await Promise.resolve().then(() => init_catalog());
16057
16064
  if (dryRun) {
16058
16065
  const tools = loadTools();
16059
- const mcp = tools.filter((t) => t.category === "mcp-server" && t.installable !== true);
16060
- const targets = tools.filter((t) => (t.category !== "mcp-server" || t.installable === true) && (!category || t.category === category.toLowerCase()));
16061
- console.log(`Dry run — would attempt ${targets.length} tool(s); ${mcp.length} MCP server(s) skipped (GUI/daemon — connect, not install):`);
16066
+ const manual = tools.filter((t) => t.installable === false);
16067
+ const targets = tools.filter((t) => t.installable !== false && (!category || t.category === category.toLowerCase()));
16068
+ console.log(`Dry run — would attempt ${targets.length} tool(s); ${manual.length} manual/skipped (GUI/C2/versioned — install by hand):`);
16062
16069
  for (const t of targets)
16063
16070
  console.log(` ${t.category.padEnd(11)} ${t.name}`);
16071
+ for (const t of manual)
16072
+ console.log(` [skip] ${t.name} — ${t.note ?? "manual install"}`);
16064
16073
  return;
16065
16074
  }
16066
16075
  console.log(`Installing catalog tools${category ? ` (category: ${category})` : ""} — concurrency ${concurrency}
@@ -16071,7 +16080,7 @@ async function runInstallTools(args) {
16071
16080
  `);
16072
16081
  }
16073
16082
  const tools = loadTools();
16074
- const totalTargets = tools.filter((t) => (t.category !== "mcp-server" || t.installable === true) && (!category || t.category === category.toLowerCase())).length;
16083
+ const totalTargets = tools.filter((t) => t.installable !== false && (!category || t.category === category.toLowerCase())).length;
16075
16084
  let done = 0;
16076
16085
  const r = await installAllTools({
16077
16086
  category,
@@ -16085,9 +16094,9 @@ async function runInstallTools(args) {
16085
16094
  });
16086
16095
  console.log(`
16087
16096
  Summary: ${r.target_count} targets · ${r.installed} newly installed · ${r.already_installed} already present · ${r.failed} failed`);
16088
- const mcp = r.skipped_mcp_servers;
16089
- if (mcp.length)
16090
- console.log(`Skipped MCP servers (connect them): ${mcp.join(", ")}`);
16097
+ const manual = r.skipped_manual;
16098
+ if (manual.length)
16099
+ console.log(`Skipped manual tools (GUI/C2/versioned — install by hand): ${manual.join(", ")}`);
16091
16100
  const failedList = r.results.filter((x) => x.installed !== true);
16092
16101
  if (failedList.length) {
16093
16102
  console.log(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blitzstrike",
3
- "version": "2.4.17",
3
+ "version": "2.4.18",
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": {
@@ -2696,7 +2696,7 @@
2696
2696
  }
2697
2697
  ],
2698
2698
  "install": {
2699
- "linux": "download from github releases",
2699
+ "linux": "go install github.com/nicocha30/ligolo-ng@latest",
2700
2700
  "darwin": "manual",
2701
2701
  "win32": "manual"
2702
2702
  },
@@ -2823,7 +2823,9 @@
2823
2823
  ],
2824
2824
  "requires_root": false,
2825
2825
  "pipes": [],
2826
- "homepage": ""
2826
+ "homepage": "",
2827
+ "installable": false,
2828
+ "note": "C2 framework — source build (Go + Qt), manual setup"
2827
2829
  },
2828
2830
  {
2829
2831
  "name": "metasploit",
@@ -2912,7 +2914,7 @@
2912
2914
  }
2913
2915
  ],
2914
2916
  "install": {
2915
- "linux": "download from github releases",
2917
+ "linux": "git clone --depth 1 https://github.com/gophish/gophish.git && cd gophish && go build && cp gophish /usr/local/bin/",
2916
2918
  "darwin": "manual",
2917
2919
  "win32": "manual"
2918
2920
  },
@@ -3477,7 +3479,9 @@
3477
3479
  "alternatives": [],
3478
3480
  "requires_root": false,
3479
3481
  "pipes": [],
3480
- "homepage": ""
3482
+ "homepage": "",
3483
+ "installable": false,
3484
+ "note": "DFIR agent — versioned binary download, manual"
3481
3485
  },
3482
3486
  {
3483
3487
  "name": "ghidra",
@@ -3512,7 +3516,9 @@
3512
3516
  ],
3513
3517
  "requires_root": false,
3514
3518
  "pipes": [],
3515
- "homepage": ""
3519
+ "homepage": "",
3520
+ "installable": false,
3521
+ "note": "GUI reverse-engineering suite (Java) — download from NSA GitHub releases, manual"
3516
3522
  },
3517
3523
  {
3518
3524
  "name": "radare2",
@@ -3627,7 +3633,9 @@
3627
3633
  ],
3628
3634
  "requires_root": false,
3629
3635
  "pipes": [],
3630
- "homepage": ""
3636
+ "homepage": "",
3637
+ "installable": false,
3638
+ "note": "GUI reverse-engineering suite (Rizin-based) — AppImage download, manual"
3631
3639
  },
3632
3640
  {
3633
3641
  "name": "gdb",
@@ -4841,7 +4849,7 @@
4841
4849
  }
4842
4850
  ],
4843
4851
  "install": {
4844
- "linux": "download from github releases",
4852
+ "linux": "go install github.com/BishopFox/cloudfox@latest",
4845
4853
  "darwin": "manual",
4846
4854
  "win32": "manual"
4847
4855
  },
@@ -5633,7 +5641,8 @@
5633
5641
  "requires_root": false,
5634
5642
  "pipes": [],
5635
5643
  "homepage": "https://github.com/PortSwigger/mcp-server",
5636
- "installable": false
5644
+ "installable": false,
5645
+ "note": "Java GUI (Burp) — build JAR + load in Burp Extensions, then connect SSE"
5637
5646
  }
5638
5647
  ]
5639
5648
  }