blitzstrike 1.0.77 → 1.0.79
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 +23 -0
- package/dist/index.js +18 -3
- package/package.json +1 -1
- package/skills/bs-orchestrate-engagement.md +20 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,29 @@ 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.79] — 2026-09-13
|
|
9
|
+
|
|
10
|
+
### Fixed — scheme-less URL routing
|
|
11
|
+
|
|
12
|
+
- `classifyTarget` now recognizes URLs without a scheme: a bare domain, IP, or
|
|
13
|
+
host:port (`example.com`, `192.168.1.1`, `example.com:8080`) is classified as
|
|
14
|
+
live and gets `https://` auto-prepended; a bare code filename (`myfile.php`)
|
|
15
|
+
is classified as source. `run_engagement` uses it, so a scheme-less URL routes
|
|
16
|
+
to the live pipeline without the caller normalizing it.
|
|
17
|
+
- Routing doctrine (skill + MCP `instructions`) updated to state that a URL
|
|
18
|
+
often carries no `http://`/`https://` prefix.
|
|
19
|
+
|
|
20
|
+
## [1.0.78] — 2026-09-13
|
|
21
|
+
|
|
22
|
+
### Added — automatic target routing (URL vs source)
|
|
23
|
+
|
|
24
|
+
- `bs-orchestrate-engagement` now leads with a "Target routing" table: a URL
|
|
25
|
+
or bare hostname → live engagement (scope-gated); a filesystem path / code
|
|
26
|
+
extension → source audit — classified automatically, no need to ask.
|
|
27
|
+
- MCP `instructions` gained a "0. ROUTE BY TARGET" step so a driving LLM
|
|
28
|
+
auto-classifies the target and routes to the live or source pipeline without
|
|
29
|
+
being told.
|
|
30
|
+
|
|
8
31
|
## [1.0.77] — 2026-09-13
|
|
9
32
|
|
|
10
33
|
### Fixed — explicit tool argument names in doctrine
|
package/dist/index.js
CHANGED
|
@@ -30824,6 +30824,21 @@ function formatPlanChecklist(plan) {
|
|
|
30824
30824
|
return rows.join(`
|
|
30825
30825
|
`);
|
|
30826
30826
|
}
|
|
30827
|
+
function classifyTarget(target) {
|
|
30828
|
+
if (/^https?:\/\//i.test(target))
|
|
30829
|
+
return { kind: "live", target };
|
|
30830
|
+
try {
|
|
30831
|
+
if (existsSync4(target) && (statSync2(target).isDirectory() || statSync2(target).isFile())) {
|
|
30832
|
+
return { kind: "source", target };
|
|
30833
|
+
}
|
|
30834
|
+
} catch {}
|
|
30835
|
+
const CODE_EXT = /\.(php|phtml|py|js|ts|jsx|tsx|java|rb|go|c|cpp|cs|swift|kt|rs|pl|sh|sql|html|vue|m|mm)$/i;
|
|
30836
|
+
if (CODE_EXT.test(target) && !target.includes("/")) {
|
|
30837
|
+
return { kind: "source", target };
|
|
30838
|
+
}
|
|
30839
|
+
const host = /^[\w.-]+\.[a-zA-Z]{2,}(:\d+)?([/?#].*)?$/.test(target) || /^\d{1,3}(\.\d{1,3}){3}(:\d+)?$/.test(target);
|
|
30840
|
+
return { kind: "live", target: host ? `https://${target}` : target };
|
|
30841
|
+
}
|
|
30827
30842
|
var _chainsCache = null;
|
|
30828
30843
|
function loadChains() {
|
|
30829
30844
|
if (_chainsCache)
|
|
@@ -53328,7 +53343,7 @@ function createServer() {
|
|
|
53328
53343
|
name: "blitzstrike",
|
|
53329
53344
|
version: "1.0.0"
|
|
53330
53345
|
}, {
|
|
53331
|
-
instructions: "Blitz Strike is a universal penetration-testing toolbelt with three tiers — " + "BLITZ (reconnaissance / attack-surface mapping), EAGLE-EYE (source-to-sink " + "analysis), STRIKE (live validation) — plus a canonical evidence-first finding " + "engine and a multi-language taint engine.\\n\\n" + "CORE MENTAL MODEL:\\n" + "- A scanner hit is a HYPOTHESIS, not a finding. Live verification (or data-flow " + " proof) is the verdict. Never report an unverified hit as a vulnerability.\\n" + "- Distinguish REACHABLE from mere PRESENT: a sink is only a finding when tainted " + " input reaches it AND it is not neutralized by a sanitizer and not guarded by an " + " auth gate.\\n\\n" + "HOW TO RUN AN AUDIT (start here):\\n" + "1. SCOPE FIRST. Call scope_check(target, scope, mode) before ANY active testing. " + " Passive analysis (reading source, fingerprinting public pages) needs no gate; " + " active probing (exploitation, fuzzing, path brute-force) is blocked until scope " + " authorizes it.\\n" + "2. MAP THE SURFACE (BLITZ). For a source tree use blitz_scan (tree) or blitz_file " + " (single file) then enrich_scan to match sinks to escalation chains. For a live " + " URL use live_recon for a full pass (fingerprint/WAF/tech/version/crawler/params/" + " subdomains/API endpoints/intel correlation) — it returns next_steps. active_scan " + " is the lighter gated alternative. Both re-check scope internally.\\n" + "3. TRACE REACHABILITY (EAGLE-EYE). For every sink, determine whether attacker " + " input actually reaches it:\\n" + " - PHP/JS/TS/Python/Java source: taint_file (auto-detects language) or " + " taint_scan/taint_tree (PHP AST). list_languages shows what's supported.\\n" + " - Any language: trace_data_flow (window heuristic) and eagle_eye/eagle_grep " + " (function-scoped view of sinks + auth gates). Beyond taint: route_scan (route confusion / dispatch abuse / batch forwarding) and complex_scan (deserialization->POP, type juggling, mass assignment) catch classes plain taint misses.\\n" + " A sink counts only if tainted input reaches it unsanitized and unguarded.\\n" + "4. VALIDATE (STRIKE). Confirm live with strike_verify using a MARKER plus a " + " NEGATIVE CONTROL plus a BASELINE. The verdict is deterministic: marker " + " reflected AND control inert = confirmed; both reflected = false_positive; " + " marker not reflected = unconfirmed. Feed the verdict to strike_resolve to " + " advance the finding lifecycle (hypothesis->validating->confirmed). Use " + " read_tool_manual for the exploit tool's manual, payload_lookup for payloads, " + " detect_waf/tech_correlation for context.\\n" + "5. RECORD + REPORT. Create a canonical finding with finding_create, advance it " + " through the lifecycle with finding_transition, attach confidence_score, and " + " redact any secrets before persisting. Only report findings that survived " + " verification.\\n\\n" + "SUPPORTING LAYERS:\\n" + "- run_engagement: ONE call does the whole audit (no babysitting). Source path -> " + " full static pipeline + inline report (markdown/JSON/SARIF). URL target -> " + " autonomous live marker sweep + confirmed findings + report. Prefer this first.\\n" + "- list_languages / taint_file: multi-language taint (PHP, JS/TS, Python, Java).\\n" + "- list_chains: 57 escalation chains (source -> sink -> impact).\\n" + "- tool_lookup / ensure_tool / list_tools: 130-tool catalog, auto-install.\\n" + "- skill_lookup / read_skill / list_skills: 38 skills (WP/PHP 0-day, AD, " + " malware, mobile, cloud, etc.).\\n" + "- read_playbook / read_tool_manual / list_manuals: 270 tool manuals + engagement " + " playbooks.\\n" + "- detect_waf / tech_correlation / cve_correlation / port_correlation: signature " + " + correlation intelligence.\\n" + "- nvd_lookup / fofa_search: CVE + asset reconnaissance (FOFA needs env creds).\\n" + "- remember / memory_lookup / memory_list: persist + recall verified knowledge.\\n\\n" + "IRON RULES:\\n" + "- Scope first; authorized targets only. Refuse out-of-scope or destructive/DoS work.\\n" + "- A hit is a hypothesis; a verified exploit (or proven data-flow) is the finding.\\n" + "- Prefer the one-call run_engagement path; fall back to granular tools when you " + " need finer control."
|
|
53346
|
+
instructions: "Blitz Strike is a universal penetration-testing toolbelt with three tiers — " + "BLITZ (reconnaissance / attack-surface mapping), EAGLE-EYE (source-to-sink " + "analysis), STRIKE (live validation) — plus a canonical evidence-first finding " + "engine and a multi-language taint engine.\\n\\n" + "CORE MENTAL MODEL:\\n" + "- A scanner hit is a HYPOTHESIS, not a finding. Live verification (or data-flow " + " proof) is the verdict. Never report an unverified hit as a vulnerability.\\n" + "- Distinguish REACHABLE from mere PRESENT: a sink is only a finding when tainted " + " input reaches it AND it is not neutralized by a sanitizer and not guarded by an " + " auth gate.\\n\\n" + "HOW TO RUN AN AUDIT (start here):\\n" + "0. ROUTE BY TARGET. Classify the target automatically - no need to ask. A " + " URL - with or without http/https (example.com, 192.168.1.1, host:8080) - " + " is LIVE (scope-gated, then live_recon + active_scan + strike_verify). A " + " filesystem path (exists on disk, or a code extension) is SOURCE audit " + " (blitz_scan + eagle_eye2 + complex_scan/route_scan). If the scheme is " + " missing, prepend https://. run_engagement auto-detects both internally.\\n" + "1. SCOPE FIRST. Call scope_check(target, scope, mode) before ANY active testing. " + " Passive analysis (reading source, fingerprinting public pages) needs no gate; " + " active probing (exploitation, fuzzing, path brute-force) is blocked until scope " + " authorizes it.\\n" + "2. MAP THE SURFACE (BLITZ). For a source tree use blitz_scan (tree) or blitz_file " + " (single file) then enrich_scan to match sinks to escalation chains. For a live " + " URL use live_recon for a full pass (fingerprint/WAF/tech/version/crawler/params/" + " subdomains/API endpoints/intel correlation) — it returns next_steps. active_scan " + " is the lighter gated alternative. Both re-check scope internally.\\n" + "3. TRACE REACHABILITY (EAGLE-EYE). For every sink, determine whether attacker " + " input actually reaches it:\\n" + " - PHP/JS/TS/Python/Java source: taint_file (auto-detects language) or " + " taint_scan/taint_tree (PHP AST). list_languages shows what's supported.\\n" + " - Any language: trace_data_flow (window heuristic) and eagle_eye/eagle_grep " + " (function-scoped view of sinks + auth gates). Beyond taint: route_scan (route confusion / dispatch abuse / batch forwarding) and complex_scan (deserialization->POP, type juggling, mass assignment) catch classes plain taint misses.\\n" + " A sink counts only if tainted input reaches it unsanitized and unguarded.\\n" + "4. VALIDATE (STRIKE). Confirm live with strike_verify using a MARKER plus a " + " NEGATIVE CONTROL plus a BASELINE. The verdict is deterministic: marker " + " reflected AND control inert = confirmed; both reflected = false_positive; " + " marker not reflected = unconfirmed. Feed the verdict to strike_resolve to " + " advance the finding lifecycle (hypothesis->validating->confirmed). Use " + " read_tool_manual for the exploit tool's manual, payload_lookup for payloads, " + " detect_waf/tech_correlation for context.\\n" + "5. RECORD + REPORT. Create a canonical finding with finding_create, advance it " + " through the lifecycle with finding_transition, attach confidence_score, and " + " redact any secrets before persisting. Only report findings that survived " + " verification.\\n\\n" + "SUPPORTING LAYERS:\\n" + "- run_engagement: ONE call does the whole audit (no babysitting). Source path -> " + " full static pipeline + inline report (markdown/JSON/SARIF). URL target -> " + " autonomous live marker sweep + confirmed findings + report. Prefer this first.\\n" + "- list_languages / taint_file: multi-language taint (PHP, JS/TS, Python, Java).\\n" + "- list_chains: 57 escalation chains (source -> sink -> impact).\\n" + "- tool_lookup / ensure_tool / list_tools: 130-tool catalog, auto-install.\\n" + "- skill_lookup / read_skill / list_skills: 38 skills (WP/PHP 0-day, AD, " + " malware, mobile, cloud, etc.).\\n" + "- read_playbook / read_tool_manual / list_manuals: 270 tool manuals + engagement " + " playbooks.\\n" + "- detect_waf / tech_correlation / cve_correlation / port_correlation: signature " + " + correlation intelligence.\\n" + "- nvd_lookup / fofa_search: CVE + asset reconnaissance (FOFA needs env creds).\\n" + "- remember / memory_lookup / memory_list: persist + recall verified knowledge.\\n\\n" + "IRON RULES:\\n" + "- Scope first; authorized targets only. Refuse out-of-scope or destructive/DoS work.\\n" + "- A hit is a hypothesis; a verified exploit (or proven data-flow) is the finding.\\n" + "- Prefer the one-call run_engagement path; fall back to granular tools when you " + " need finer control."
|
|
53332
53347
|
});
|
|
53333
53348
|
server.registerTool("blitz_scan", {
|
|
53334
53349
|
title: "BLITZ scan",
|
|
@@ -53526,8 +53541,8 @@ function createServer() {
|
|
|
53526
53541
|
remember: boolean2().optional().describe("Auto-capture matched chains to memory (default true)")
|
|
53527
53542
|
}
|
|
53528
53543
|
}, async ({ target, scope, mode, max_files, remember }) => {
|
|
53529
|
-
const
|
|
53530
|
-
const r =
|
|
53544
|
+
const cls = classifyTarget(target);
|
|
53545
|
+
const r = cls.kind === "live" ? await runLiveEngagement(cls.target, scope ?? "", mode ?? "bug-bounty") : runEngagement(cls.target, scope ?? "", mode ?? "bug-bounty", max_files ?? 2000, remember ?? true);
|
|
53531
53546
|
const banner = typeof r.banner === "string" ? r.banner : "";
|
|
53532
53547
|
const planText = Array.isArray(r.plan) && r.plan.length ? `
|
|
53533
53548
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.79",
|
|
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": {
|
|
@@ -8,6 +8,26 @@ description: Use when the user asks for a full security engagement ("fullscan",
|
|
|
8
8
|
You are the brain. Blitz Strike is the hands. Drive the full cycle with the
|
|
9
9
|
deterministic MCP tools; never guess a finding — produce it from tool output.
|
|
10
10
|
|
|
11
|
+
## Target routing (auto-detect first — no need to ask)
|
|
12
|
+
|
|
13
|
+
Classify the target before any tool call. This is automatic, driven by the
|
|
14
|
+
shape of what the user gave you. A URL often has NO `http://`/`https://` prefix
|
|
15
|
+
— a bare domain, IP, or host:port is still a live target:
|
|
16
|
+
|
|
17
|
+
| Target shape | Flow |
|
|
18
|
+
|---|---|
|
|
19
|
+
| URL — with or without scheme (`https://x.com`, `x.com`, `sub.x.com/path`, `x.com:8080`, `192.168.1.1`) | **Live** — `scope_check` (authorization) → `live_recon` → `active_scan` → `strike_verify` → report |
|
|
20
|
+
| Filesystem path (exists on disk, or starts `/` `./` `../` `~`, or ends in a code extension `.php` `.py` `.js` `.ts` `.java` …) | **Source** — `blitz_scan` → `eagle_eye2` → `complex_scan`/`route_scan` → report |
|
|
21
|
+
|
|
22
|
+
Rule of thumb: check "is it a filesystem path?" FIRST (exists on disk, or a
|
|
23
|
+
code extension). If it is NOT a path, treat it as a live host — prepend
|
|
24
|
+
`https://` when the scheme is missing (`example.com` → `https://example.com`)
|
|
25
|
+
and confirm scope before any request.
|
|
26
|
+
|
|
27
|
+
`run_engagement` auto-detects both internally (path on disk → source pipeline;
|
|
28
|
+
anything else → live, scope-gated). For the granular sub-agent flow, route the
|
|
29
|
+
workstreams yourself: URL → live workstreams, path → source workstreams.
|
|
30
|
+
|
|
11
31
|
## The cycle
|
|
12
32
|
|
|
13
33
|
1. **Scope gate (always first).** Call `scope_check` before any live action.
|