blitzstrike 2.4.181 → 2.4.183
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 +29 -13
- package/dist/index.js +90 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,23 @@ 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.
|
|
8
|
+
## [2.4.183] — 2026-11-03
|
|
9
|
+
|
|
10
|
+
### Fixed — corrected stale CHANGELOG release dates
|
|
11
|
+
|
|
12
|
+
- Entries 2.4.169–2.4.178 were dated 2026-10-11 but published 2026-10-12;
|
|
13
|
+
2.4.179 published 2026-10-18; 2.4.182 published 2026-11-03. Dates corrected
|
|
14
|
+
to match the npm publish times.
|
|
15
|
+
|
|
16
|
+
## [2.4.182] — 2026-11-03
|
|
17
|
+
|
|
18
|
+
### Added — HTTP-level asset fingerprinting (Shodan-style MMH3)
|
|
19
|
+
|
|
20
|
+
- New `favicon_hash` tool + `src/fingerprint.ts`: MurmurHash3 (x86 32-bit) favicon
|
|
21
|
+
fingerprint — the Shodan-compatible `http.favicon.hash` (verified against the
|
|
22
|
+
python `mmh3` reference: 9/9 vectors match) — plus body SHA-256 for content dedup
|
|
23
|
+
and the base64 `mmh3:` form. The same favicon hash means the same product/tech
|
|
24
|
+
even across unrelated hosts, so it is the strongest web-asset pivoting signal.
|
|
9
25
|
|
|
10
26
|
### Changed — goal decomposition corrected (goal = deliverable, not process)
|
|
11
27
|
|
|
@@ -20,7 +36,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
20
36
|
a new target discovered outside the constraints is recorded as an out-of-scope
|
|
21
37
|
fact and skipped, never authorized.
|
|
22
38
|
|
|
23
|
-
### Added —
|
|
39
|
+
### Added — 6 doctrine rules
|
|
24
40
|
|
|
25
41
|
- `constraint_self_contained`, `record_is_memory` (write-back is anti-compaction
|
|
26
42
|
long-term memory — record immediately, only increments), `wrapup_highest_priority`
|
|
@@ -29,7 +45,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
29
45
|
`serial_chain_discipline` (each chain step consumes the prior step's REAL output),
|
|
30
46
|
`compression_discipline` (synthesize causally, preserve observed/inferred + source ids).
|
|
31
47
|
|
|
32
|
-
## [2.4.179] — 2026-10-
|
|
48
|
+
## [2.4.179] — 2026-10-18
|
|
33
49
|
|
|
34
50
|
### Added — WordPress P1-P6 vulnerability pattern taxonomy
|
|
35
51
|
|
|
@@ -40,7 +56,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
40
56
|
fixed (the correct control), and anchor WPVDB record ids.
|
|
41
57
|
- `frameworkProfile()` exposes `patterns`; `framework_intel` returns them.
|
|
42
58
|
|
|
43
|
-
## [2.4.178] — 2026-10-
|
|
59
|
+
## [2.4.178] — 2026-10-12
|
|
44
60
|
|
|
45
61
|
### Added — goal decomposition (six-phase plan)
|
|
46
62
|
|
|
@@ -49,7 +65,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
49
65
|
ESCALATION → REPORT), each with its own quantitative condition. `goal_tree`
|
|
50
66
|
shows the parent → sub-goal hierarchy and per-parent progress.
|
|
51
67
|
|
|
52
|
-
## [2.4.177] — 2026-10-
|
|
68
|
+
## [2.4.177] — 2026-10-12
|
|
53
69
|
|
|
54
70
|
### Added — surface coverage tracker (quantitative progress)
|
|
55
71
|
|
|
@@ -60,7 +76,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
60
76
|
- Gives the agent a measurable "how done are we" number — a goal like
|
|
61
77
|
"coverage >= 80%" is now verifiable against the measured pct before prove_goal.
|
|
62
78
|
|
|
63
|
-
## [2.4.176] — 2026-10-
|
|
79
|
+
## [2.4.176] — 2026-10-12
|
|
64
80
|
|
|
65
81
|
### Added — retest context (completes the retest loop)
|
|
66
82
|
|
|
@@ -69,7 +85,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
69
85
|
evidence grouped by role (proof/baseline/verification) + reproducible flag,
|
|
70
86
|
the active operation constraints, and the current goal state.
|
|
71
87
|
|
|
72
|
-
## [2.4.175] — 2026-10-
|
|
88
|
+
## [2.4.175] — 2026-10-12
|
|
73
89
|
|
|
74
90
|
### Added — evidence roles (structured proof/baseline/verification/supporting)
|
|
75
91
|
|
|
@@ -79,7 +95,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
79
95
|
returns the role breakdown + a `reproducible` flag (true only when a finding has
|
|
80
96
|
proof + baseline + verification — the three roles a HackerOne-grade PoC needs).
|
|
81
97
|
|
|
82
|
-
## [2.4.174] — 2026-10-
|
|
98
|
+
## [2.4.174] — 2026-10-12
|
|
83
99
|
|
|
84
100
|
### Added — observation ledger + lineage (third write-back channel)
|
|
85
101
|
|
|
@@ -89,7 +105,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
89
105
|
- Completes the three write-back channels: findings (vulns), assets (asset_discovery),
|
|
90
106
|
and facts (neutral/negative observations that would otherwise be lost).
|
|
91
107
|
|
|
92
|
-
## [2.4.173] — 2026-10-
|
|
108
|
+
## [2.4.173] — 2026-10-12
|
|
93
109
|
|
|
94
110
|
### Added — goal tracking + prove_goal (completion signal)
|
|
95
111
|
|
|
@@ -99,7 +115,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
99
115
|
- A goal with a quantitative condition must have its measured value verified before
|
|
100
116
|
proving it met; the task is complete only when `all_met` is true.
|
|
101
117
|
|
|
102
|
-
## [2.4.172] — 2026-10-
|
|
118
|
+
## [2.4.172] — 2026-10-12
|
|
103
119
|
|
|
104
120
|
### Added — operation constraint registry (deterministic red lines)
|
|
105
121
|
|
|
@@ -111,11 +127,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
111
127
|
(host/port/param). DENY rules always win; allowlist mode fails closed.
|
|
112
128
|
- The operation red line is injected as the top rule of the system prompt.
|
|
113
129
|
|
|
114
|
-
## [2.4.171] — 2026-10-
|
|
130
|
+
## [2.4.171] — 2026-10-12
|
|
115
131
|
|
|
116
132
|
### Changed — internal docs cleanup
|
|
117
133
|
|
|
118
|
-
## [2.4.170] — 2026-10-
|
|
134
|
+
## [2.4.170] — 2026-10-12
|
|
119
135
|
|
|
120
136
|
### Added — 3-way retest verdict + planner discipline
|
|
121
137
|
|
|
@@ -129,7 +145,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
129
145
|
re-check once), `observed_vs_inferred` (never upgrade a version/CVE/inferred hit
|
|
130
146
|
to confirmed).
|
|
131
147
|
|
|
132
|
-
## [2.4.169] — 2026-10-
|
|
148
|
+
## [2.4.169] — 2026-10-12
|
|
133
149
|
|
|
134
150
|
### Added — finding retest loop (post-confirmation lifecycle)
|
|
135
151
|
|
package/dist/index.js
CHANGED
|
@@ -64119,6 +64119,81 @@ function coverageSummary() {
|
|
|
64119
64119
|
};
|
|
64120
64120
|
}
|
|
64121
64121
|
|
|
64122
|
+
// src/fingerprint.ts
|
|
64123
|
+
function mmh3(data, seed = 0) {
|
|
64124
|
+
const c1 = 3432918353;
|
|
64125
|
+
const c2 = 461845907;
|
|
64126
|
+
let h1 = seed | 0;
|
|
64127
|
+
const len = data.length;
|
|
64128
|
+
const nblocks = len >> 2;
|
|
64129
|
+
for (let i = 0;i < nblocks; i++) {
|
|
64130
|
+
const o = i << 2;
|
|
64131
|
+
let k1 = data[o] | data[o + 1] << 8 | data[o + 2] << 16 | data[o + 3] << 24 | 0;
|
|
64132
|
+
k1 = Math.imul(k1, c1) | 0;
|
|
64133
|
+
k1 = k1 << 15 | k1 >>> 17;
|
|
64134
|
+
k1 = Math.imul(k1, c2) | 0;
|
|
64135
|
+
h1 ^= k1;
|
|
64136
|
+
h1 = h1 << 13 | h1 >>> 19;
|
|
64137
|
+
h1 = Math.imul(h1, 5) + 3864292196 | 0;
|
|
64138
|
+
}
|
|
64139
|
+
let k1 = 0;
|
|
64140
|
+
const tail = nblocks << 2;
|
|
64141
|
+
switch (len & 3) {
|
|
64142
|
+
case 3:
|
|
64143
|
+
k1 ^= data[tail + 2] << 16;
|
|
64144
|
+
case 2:
|
|
64145
|
+
k1 ^= data[tail + 1] << 8;
|
|
64146
|
+
case 1:
|
|
64147
|
+
k1 ^= data[tail];
|
|
64148
|
+
k1 = Math.imul(k1, c1) | 0;
|
|
64149
|
+
k1 = k1 << 15 | k1 >>> 17;
|
|
64150
|
+
k1 = Math.imul(k1, c2) | 0;
|
|
64151
|
+
h1 ^= k1;
|
|
64152
|
+
}
|
|
64153
|
+
h1 ^= len;
|
|
64154
|
+
h1 ^= h1 >>> 16;
|
|
64155
|
+
h1 = Math.imul(h1, 2246822507) | 0;
|
|
64156
|
+
h1 ^= h1 >>> 13;
|
|
64157
|
+
h1 = Math.imul(h1, 3266489909) | 0;
|
|
64158
|
+
h1 ^= h1 >>> 16;
|
|
64159
|
+
return h1 | 0;
|
|
64160
|
+
}
|
|
64161
|
+
function faviconHash(bytes) {
|
|
64162
|
+
return mmh3(bytes, 0);
|
|
64163
|
+
}
|
|
64164
|
+
function fingerprintBundle(faviconBytes, body) {
|
|
64165
|
+
let favicon_mmh3 = null;
|
|
64166
|
+
let favicon_mmh3_b64 = null;
|
|
64167
|
+
if (faviconBytes && faviconBytes.length > 0) {
|
|
64168
|
+
favicon_mmh3 = faviconHash(faviconBytes);
|
|
64169
|
+
const buf = new ArrayBuffer(4);
|
|
64170
|
+
const dv = new DataView(buf);
|
|
64171
|
+
dv.setInt32(0, favicon_mmh3, false);
|
|
64172
|
+
favicon_mmh3_b64 = btoa(String.fromCharCode(...new Uint8Array(buf)));
|
|
64173
|
+
}
|
|
64174
|
+
return { favicon_mmh3, favicon_mmh3_b64, body_sha256: sha256(body) };
|
|
64175
|
+
}
|
|
64176
|
+
function decodeFavicon(data, encoding = "base64") {
|
|
64177
|
+
try {
|
|
64178
|
+
if (encoding === "hex") {
|
|
64179
|
+
const s = data.replace(/[^0-9a-fA-F]/g, "");
|
|
64180
|
+
if (s.length % 2 !== 0 || s.length === 0)
|
|
64181
|
+
return null;
|
|
64182
|
+
const out = new Uint8Array(s.length / 2);
|
|
64183
|
+
for (let i = 0;i < out.length; i++)
|
|
64184
|
+
out[i] = parseInt(s.slice(i * 2, i * 2 + 2), 16);
|
|
64185
|
+
return out;
|
|
64186
|
+
}
|
|
64187
|
+
const bin = atob(data);
|
|
64188
|
+
const out = new Uint8Array(bin.length);
|
|
64189
|
+
for (let i = 0;i < bin.length; i++)
|
|
64190
|
+
out[i] = bin.charCodeAt(i);
|
|
64191
|
+
return out;
|
|
64192
|
+
} catch {
|
|
64193
|
+
return null;
|
|
64194
|
+
}
|
|
64195
|
+
}
|
|
64196
|
+
|
|
64122
64197
|
// src/sibling-scan.ts
|
|
64123
64198
|
var SIBLING_SUFFIXES = [
|
|
64124
64199
|
"export",
|
|
@@ -67230,6 +67305,21 @@ ${statusLine}` : statusLine },
|
|
|
67230
67305
|
}]
|
|
67231
67306
|
};
|
|
67232
67307
|
});
|
|
67308
|
+
server.registerTool("favicon_hash", {
|
|
67309
|
+
title: "Favicon MMH3 hash (Shodan-style asset fingerprint)",
|
|
67310
|
+
description: "RECON: compute the Shodan-compatible MurmurHash3 (MMH3) fingerprint of a favicon (or any raw bytes) — the strongest pivoting signal for web assets: the SAME favicon hash means the SAME product/tech even across unrelated hosts. Pass base64/hex-encoded favicon bytes (or the response body to also get its SHA-256 for content dedup). Use to fingerprint a live target, dedup assets by body hash, and pivot to every host serving the same favicon.",
|
|
67311
|
+
inputSchema: {
|
|
67312
|
+
data: string2().describe("Favicon bytes as base64 (default) or hex"),
|
|
67313
|
+
encoding: _enum(["base64", "hex"]).optional().describe("How `data` is encoded (default base64)"),
|
|
67314
|
+
body: string2().optional().describe("Optional response body — returns its SHA-256 for content-based asset dedup")
|
|
67315
|
+
}
|
|
67316
|
+
}, async ({ data, encoding, body }) => {
|
|
67317
|
+
const bytes = decodeFavicon(data, encoding ?? "base64");
|
|
67318
|
+
if (!bytes)
|
|
67319
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: "invalid favicon data" }) }] };
|
|
67320
|
+
const bundle = fingerprintBundle(bytes, body ?? "");
|
|
67321
|
+
return { content: [{ type: "text", text: JSON.stringify(bundle) }] };
|
|
67322
|
+
});
|
|
67233
67323
|
server.registerTool("framework_intel", {
|
|
67234
67324
|
title: "Framework security knowledge",
|
|
67235
67325
|
description: "PHASE 5: return a framework's security knowledge (sources, sinks, sanitizers, auth gates, routing, ORM, middleware, and — for WordPress — the P1-P6 vulnerability pattern taxonomy: RCE / upload / ATO / reset / priv-esc / AJAX-REST-authz, each with signals, detect, fixed, and anchor WPVDB ids) and optionally scan code with those patterns.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.183",
|
|
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": {
|