blitzstrike 2.4.17 → 2.4.19
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 +25 -0
- package/dist/index.js +20 -11
- package/package.json +1 -1
- package/tools-catalog.json +17 -8
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,31 @@ 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.19] — 2026-09-14
|
|
9
|
+
|
|
10
|
+
### Added — unit tests for 5 deep modules + off-by-one fix
|
|
11
|
+
|
|
12
|
+
- 25 new hermetic checks: chain-executor dispatch (scan/crack/defer), memory
|
|
13
|
+
lifecycle (remember/dedup/lookup/forget), complex-bugs (deserialization /
|
|
14
|
+
type-juggling / mass-assignment / prototype-pollution / SSRF / SSTI / XXE),
|
|
15
|
+
route-confusion (dynamic dispatch/method/include/batch), universal-taint
|
|
16
|
+
(PHP command-injection + sanitizer suppression + language detection).
|
|
17
|
+
- Fixed an off-by-one in `detectBatchForwarding`: a single-line
|
|
18
|
+
`foreach (...) { forward(...); }` was missed because the body scan skipped the
|
|
19
|
+
`foreach` line itself.
|
|
20
|
+
|
|
21
|
+
## [2.4.18] — 2026-09-14
|
|
22
|
+
|
|
23
|
+
### Fixed — catalog placeholder installs (full audit)
|
|
24
|
+
|
|
25
|
+
- 3 Go tools that had a placeholder install now install for real:
|
|
26
|
+
cloudfox / ligolo-ng (`go install …@latest`), gophish (`go build`).
|
|
27
|
+
- 4 GUI/C2/versioned tools (havoc, ghidra, cutter, velociraptor) + burp-suite-mcp
|
|
28
|
+
are now flagged `installable: false` — bulk-install reports them as "manual
|
|
29
|
+
(install by hand)" instead of failing on a fake "download from github releases".
|
|
30
|
+
- `ensureTool` / `ensure_tool` now return `action: manual` + the note for these
|
|
31
|
+
tools instead of attempting the placeholder command.
|
|
32
|
+
|
|
8
33
|
## [2.4.17] — 2026-09-14
|
|
9
34
|
|
|
10
35
|
### 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
|
|
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) =>
|
|
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
|
-
|
|
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
|
|
16060
|
-
const targets = tools.filter((t) =>
|
|
16061
|
-
console.log(`Dry run — would attempt ${targets.length} tool(s); ${
|
|
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) =>
|
|
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
|
|
16089
|
-
if (
|
|
16090
|
-
console.log(`Skipped
|
|
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(`
|
|
@@ -55673,7 +55682,7 @@ function detectBatchForwarding(code, file, out) {
|
|
|
55673
55682
|
let m;
|
|
55674
55683
|
while ((m = BATCH_LOOP_RE.exec(code)) !== null) {
|
|
55675
55684
|
const ln = lineNo(code, m.index);
|
|
55676
|
-
const body = lines(code).slice(ln, ln + 8).join(`
|
|
55685
|
+
const body = lines(code).slice(ln - 1, ln + 8).join(`
|
|
55677
55686
|
`);
|
|
55678
55687
|
const forwards = /\b(call_user_func|forward|dispatch|resolve_route|invoke|handle|route)\s*\(/i.test(body);
|
|
55679
55688
|
if (!forwards)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.19",
|
|
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": {
|
package/tools-catalog.json
CHANGED
|
@@ -2696,7 +2696,7 @@
|
|
|
2696
2696
|
}
|
|
2697
2697
|
],
|
|
2698
2698
|
"install": {
|
|
2699
|
-
"linux": "
|
|
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": "
|
|
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": "
|
|
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
|
}
|