blitzstrike 1.0.69 → 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 +12 -0
- package/dist/index.js +14 -4
- package/package.json +1 -1
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
|
+
## [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
|
+
|
|
8
20
|
## [1.0.69] — 2026-09-13
|
|
9
21
|
|
|
10
22
|
### Changed — agent-native skills polish
|
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.
|
|
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": {
|