blitzstrike 2.4.120 → 2.4.121
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 +15 -0
- package/dist/index.js +33 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,21 @@ 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.121] — 2026-09-29
|
|
9
|
+
|
|
10
|
+
### Added — empirical ledger auto-feed + benchmark coverage 30/30
|
|
11
|
+
|
|
12
|
+
- The live probers now auto-record their VERIFIED verdicts into the empirical
|
|
13
|
+
ledger (`intelligence()`): `cve_verify`/`nuclei_scan` (vector "cve"),
|
|
14
|
+
`jwt_forge` (jwt_alg_confusion), `proto_pollution_probe`
|
|
15
|
+
(prototype_pollution), `smuggling_test` (http_request_smuggling) — so a
|
|
16
|
+
confirmed hit feeds attack_plan's Bayesian hit-rates cross-target.
|
|
17
|
+
- Updated the Hackbot-Arena VECTOR_MAP with the new detectors + live probers
|
|
18
|
+
(cache_deception, client_trusted_flag, jwt_alg_confusion, prototype_pollution,
|
|
19
|
+
request-smuggling, password-reset) → detector coverage 26/30 → 30/30 (the 4
|
|
20
|
+
previously-unmapped labs — CacheKey, PasswordResetHarm, StaffDirectory,
|
|
21
|
+
NoteLock — are now covered).
|
|
22
|
+
|
|
8
23
|
## [2.4.120] — 2026-09-29
|
|
9
24
|
|
|
10
25
|
### Added — `nuclei_scan` (fingerprint-driven full DAST) + corpus precision fix
|
package/dist/index.js
CHANGED
|
@@ -59779,18 +59779,22 @@ function load5() {
|
|
|
59779
59779
|
}
|
|
59780
59780
|
}
|
|
59781
59781
|
var VECTOR_MAP = [
|
|
59782
|
-
{ re: /jwt|algorithm confusion|rs256|hs256/i, vectors: ["jwt"], detectors: ["missing_authz"], chains: ["jwt"], tools: ["jwt_analyze", "live_recon"] },
|
|
59782
|
+
{ re: /jwt|algorithm confusion|rs256|hs256/i, vectors: ["jwt"], detectors: ["missing_authz", "jwt_alg_confusion"], chains: ["jwt"], tools: ["jwt_analyze", "jwt_forge", "live_recon"] },
|
|
59783
59783
|
{ re: /ssrf|server-side request/i, vectors: ["ssrf"], detectors: ["ssrf"], chains: ["ssrf"], tools: ["live_recon", "blind_oracle", "active_scan"] },
|
|
59784
59784
|
{ re: /sql injection|sqli|postgresql|sql/i, vectors: ["sql_injection"], detectors: ["sql_injection"], chains: ["sql_injection"], tools: ["live_recon", "blind_oracle", "active_scan"] },
|
|
59785
59785
|
{ re: /ssti|template injection|liquid|jinja|twig/i, vectors: ["ssti"], detectors: ["ssti"], chains: ["ssti"], tools: ["live_recon", "blind_oracle"] },
|
|
59786
59786
|
{ re: /command injection|os command|command execution/i, vectors: ["command_injection"], detectors: ["command_injection"], chains: ["command_injection"], tools: ["live_recon", "blind_oracle"] },
|
|
59787
|
-
{ re: /idor|bola|authorization|broken function|role|membership|ownership|entitlement|directory search|excessive data|data exposure|harvest/i, vectors: ["broken_object_level_authorization"], detectors: ["missing_authz"], chains: ["idor"], tools: ["live_recon", "active_scan", "param_precedence"] },
|
|
59787
|
+
{ re: /idor|bola|authorization|broken function|role|membership|ownership|entitlement|directory search|excessive data|data exposure|harvest|substring|search|disclosure/i, vectors: ["broken_object_level_authorization"], detectors: ["missing_authz"], chains: ["idor"], tools: ["live_recon", "active_scan", "param_precedence", "sibling_scan"] },
|
|
59788
59788
|
{ re: /graphql/i, vectors: ["graphql_exposure"], detectors: ["graphql_exposure", "sql_injection"], chains: ["graphql"], tools: ["live_recon", "active_scan"] },
|
|
59789
|
-
{ re: /cache/i, vectors: ["web_cache_deception"], detectors: [], chains: ["cache_deception"], tools: ["cache_gap", "live_recon"] },
|
|
59789
|
+
{ re: /cache/i, vectors: ["web_cache_deception"], detectors: ["cache_deception"], chains: ["cache_deception"], tools: ["cache_gap", "live_recon"] },
|
|
59790
59790
|
{ re: /credential|key|token|bearer|secret|leak|websocket|rum|api key/i, vectors: ["hardcoded_secret"], detectors: ["hardcoded_secret"], chains: ["secret_leak"], tools: ["live_recon", "drive_devtools", "scan_git_history"] },
|
|
59791
59791
|
{ re: /rate.limit|batching|otp/i, vectors: ["business_logic"], detectors: [], chains: ["rate_limit_bypass"], tools: ["race_test", "active_scan"] },
|
|
59792
59792
|
{ re: /mass assignment|self.regist|admin account|user creation|scope/i, vectors: ["mass_assignment"], detectors: ["mass_assignment", "missing_authz"], chains: ["mass_assignment"], tools: ["live_recon", "active_scan"] },
|
|
59793
|
-
{ re: /deserialization|rce|workflow|execution/i, vectors: ["code_execution"], detectors: ["deserialization"], chains: ["deserialization"], tools: ["live_recon", "active_scan"] }
|
|
59793
|
+
{ re: /deserialization|rce|workflow|execution/i, vectors: ["code_execution"], detectors: ["deserialization"], chains: ["deserialization"], tools: ["live_recon", "active_scan"] },
|
|
59794
|
+
{ re: /read.only|readonly|canedit|can_edit|ui.*bypass|client.*flag|client.*trusted|disabled.*field|isadmin|is_admin|withvip|premium|unmasked/i, vectors: ["client_trusted_flag"], detectors: ["client_trusted_flag"], chains: ["xss_to_account_takeover"], tools: ["live_recon", "active_scan"] },
|
|
59795
|
+
{ re: /password reset|reset.*password|third.party harm|password.*reset/i, vectors: ["business_logic"], detectors: ["missing_authz"], chains: ["idor"], tools: ["live_recon", "sibling_scan"] },
|
|
59796
|
+
{ re: /prototype|pollution|__proto__/i, vectors: ["prototype_pollution"], detectors: ["prototype_pollution"], chains: ["prototype_pollution"], tools: ["proto_pollution_probe", "live_recon"] },
|
|
59797
|
+
{ re: /smuggl|desync|cl\.te|te\.cl/i, vectors: ["http_request_smuggling"], detectors: [], chains: ["http_request_smuggling"], tools: ["smuggling_test", "live_recon"] }
|
|
59794
59798
|
];
|
|
59795
59799
|
function mapLab(lab) {
|
|
59796
59800
|
const out = { vectors: [], detectors: [], chains: [], tools: [] };
|
|
@@ -64161,7 +64165,11 @@ ${statusLine}` : statusLine },
|
|
|
64161
64165
|
target: string2().describe("Target URL, e.g. https://target.com")
|
|
64162
64166
|
}
|
|
64163
64167
|
}, async ({ cve, target }) => {
|
|
64164
|
-
|
|
64168
|
+
const r = cveVerify(cve, target);
|
|
64169
|
+
if (r.status === "verified") {
|
|
64170
|
+
recordVerdict({ vector: "cve", outcome: "confirmed", target, severity: r.matched[0]?.severity });
|
|
64171
|
+
}
|
|
64172
|
+
return { content: [{ type: "text", text: JSON.stringify(r) }] };
|
|
64165
64173
|
});
|
|
64166
64174
|
server.registerTool("nuclei_scan", {
|
|
64167
64175
|
title: "Fingerprint-driven full DAST scan via nuclei",
|
|
@@ -64175,7 +64183,11 @@ ${statusLine}` : statusLine },
|
|
|
64175
64183
|
max: number2().optional().describe("Max findings to return (default 50)")
|
|
64176
64184
|
}
|
|
64177
64185
|
}, async (opts) => {
|
|
64178
|
-
|
|
64186
|
+
const r = await nucleiScan(opts);
|
|
64187
|
+
for (const f of r.findings) {
|
|
64188
|
+
recordVerdict({ vector: "cve", outcome: "confirmed", target: opts.target, severity: f.severity });
|
|
64189
|
+
}
|
|
64190
|
+
return { content: [{ type: "text", text: JSON.stringify(r) }] };
|
|
64179
64191
|
});
|
|
64180
64192
|
server.registerTool("jwt_forge", {
|
|
64181
64193
|
title: "Forge JWT confusion tokens and verify which is accepted live",
|
|
@@ -64189,7 +64201,11 @@ ${statusLine}` : statusLine },
|
|
|
64189
64201
|
public_key: string2().optional().describe("Public key (PEM) to sign HS256 with for the key-confusion attack")
|
|
64190
64202
|
}
|
|
64191
64203
|
}, async (opts) => {
|
|
64192
|
-
|
|
64204
|
+
const r = await jwtForge(opts);
|
|
64205
|
+
if (r.status === "ok" && r.forged.some((f) => f.accepted)) {
|
|
64206
|
+
recordVerdict({ vector: "jwt_alg_confusion", outcome: "confirmed", target: opts.endpoint });
|
|
64207
|
+
}
|
|
64208
|
+
return { content: [{ type: "text", text: JSON.stringify(r) }] };
|
|
64193
64209
|
});
|
|
64194
64210
|
server.registerTool("proto_pollution_probe", {
|
|
64195
64211
|
title: "Probe for prototype pollution with a reflection canary",
|
|
@@ -64201,7 +64217,11 @@ ${statusLine}` : statusLine },
|
|
|
64201
64217
|
param: string2().optional().describe("JSON key to nest the poison under (default 'data')")
|
|
64202
64218
|
}
|
|
64203
64219
|
}, async (opts) => {
|
|
64204
|
-
|
|
64220
|
+
const r = await protoPollutionProbe(opts);
|
|
64221
|
+
if (r.status === "verified") {
|
|
64222
|
+
recordVerdict({ vector: "prototype_pollution", outcome: "confirmed", target: opts.target });
|
|
64223
|
+
}
|
|
64224
|
+
return { content: [{ type: "text", text: JSON.stringify(r) }] };
|
|
64205
64225
|
});
|
|
64206
64226
|
server.registerTool("smuggling_test", {
|
|
64207
64227
|
title: "Detect HTTP request-smuggling (CL.TE / TE.CL) desync live",
|
|
@@ -64210,7 +64230,11 @@ ${statusLine}` : statusLine },
|
|
|
64210
64230
|
target: string2().describe("Target URL, e.g. https://target.com")
|
|
64211
64231
|
}
|
|
64212
64232
|
}, async ({ target }) => {
|
|
64213
|
-
|
|
64233
|
+
const r = await smugglingTest(target);
|
|
64234
|
+
if (r.status === "desync") {
|
|
64235
|
+
recordVerdict({ vector: "http_request_smuggling", outcome: "confirmed", target });
|
|
64236
|
+
}
|
|
64237
|
+
return { content: [{ type: "text", text: JSON.stringify(r) }] };
|
|
64214
64238
|
});
|
|
64215
64239
|
server.registerTool("auto_poc", {
|
|
64216
64240
|
title: "Auto-PoC — generate a copy-paste-ready reproduction recipe",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.121",
|
|
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": {
|