blitzstrike 1.0.84 → 1.0.86
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 +42 -1
- package/intelligence/orchestration.json +115 -0
- package/package.json +1 -1
- package/skills/bs-orchestrate-engagement.md +27 -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.86] — 2026-09-13
|
|
9
|
+
|
|
10
|
+
### Added — orchestration framework (`orchestration`)
|
|
11
|
+
|
|
12
|
+
- New `orchestration` MCP tool + `intelligence/orchestration.json`: the
|
|
13
|
+
engagement lifecycle (6 phases — scope → recon → analyze → deep → verify →
|
|
14
|
+
report, each with entry/exit criteria), the sub-agent team (4 roles with
|
|
15
|
+
tools + deterministic output contract), the handoff contract, and termination
|
|
16
|
+
criteria. The driving LLM loads it at engagement start instead of improvising.
|
|
17
|
+
- RESOURCE MAP leads with `orchestration()`; `bs-orchestrate-engagement`
|
|
18
|
+
gained a "Lifecycle, team, and termination" section.
|
|
19
|
+
|
|
20
|
+
## [1.0.85] — 2026-09-13
|
|
21
|
+
|
|
22
|
+
### Added — no-babysitting during scan + test
|
|
23
|
+
|
|
24
|
+
- MCP `instructions` gained a "NO-BABYSITTING (while scanning + testing)"
|
|
25
|
+
section: scan the whole surface before reporting, test every hypothesis
|
|
26
|
+
through its full cycle, persist through partial results, and only surface to
|
|
27
|
+
the user for scope/consent/completion.
|
|
28
|
+
- `bs-orchestrate-engagement` carries the same rule, so a driving agent keeps
|
|
29
|
+
scanning + testing autonomously instead of pausing to ask after each step.
|
|
30
|
+
|
|
8
31
|
## [1.0.84] — 2026-09-13
|
|
9
32
|
|
|
10
33
|
### Added — structured failure recovery (`retry_guidance`)
|
package/dist/index.js
CHANGED
|
@@ -31671,6 +31671,38 @@ function retryGuidance(signal) {
|
|
|
31671
31671
|
return { found: false, signal, suggestions: data.modes.map((m) => m.id) };
|
|
31672
31672
|
return { found: true, mode: match.id, signal: match.signal, actions: match.actions };
|
|
31673
31673
|
}
|
|
31674
|
+
function orchestration(part) {
|
|
31675
|
+
const data = loadJson("orchestration");
|
|
31676
|
+
if (!data)
|
|
31677
|
+
return { found: false, error: "orchestration.json not found" };
|
|
31678
|
+
if (!part) {
|
|
31679
|
+
return {
|
|
31680
|
+
found: true,
|
|
31681
|
+
phases: data.lifecycle.map((p) => ({ phase: p.phase, name: p.name })),
|
|
31682
|
+
team: data.team.map((r) => ({ id: r.id, name: r.name }))
|
|
31683
|
+
};
|
|
31684
|
+
}
|
|
31685
|
+
const q = part.toLowerCase();
|
|
31686
|
+
if (q === "lifecycle" || q === "phases")
|
|
31687
|
+
return { found: true, lifecycle: data.lifecycle };
|
|
31688
|
+
if (q === "team" || q === "roles")
|
|
31689
|
+
return { found: true, team: data.team };
|
|
31690
|
+
if (q === "handoff")
|
|
31691
|
+
return { found: true, handoff: data.handoff };
|
|
31692
|
+
if (q === "termination" || q === "done")
|
|
31693
|
+
return { found: true, termination: data.termination };
|
|
31694
|
+
const phase = data.lifecycle.find((p) => String(p.phase) === q);
|
|
31695
|
+
if (phase)
|
|
31696
|
+
return { found: true, ...phase };
|
|
31697
|
+
const role = data.team.find((r) => String(r.id) === q);
|
|
31698
|
+
if (role)
|
|
31699
|
+
return { found: true, ...role };
|
|
31700
|
+
return {
|
|
31701
|
+
found: false,
|
|
31702
|
+
part,
|
|
31703
|
+
suggestions: ["lifecycle", "team", "handoff", "termination", ...data.lifecycle.map((p) => String(p.phase)), ...data.team.map((r) => String(r.id))]
|
|
31704
|
+
};
|
|
31705
|
+
}
|
|
31674
31706
|
|
|
31675
31707
|
// src/active.ts
|
|
31676
31708
|
var TIMEOUT_MS2 = 20000;
|
|
@@ -53432,7 +53464,7 @@ function createServer() {
|
|
|
53432
53464
|
name: "blitzstrike",
|
|
53433
53465
|
version: "1.0.0"
|
|
53434
53466
|
}, {
|
|
53435
|
-
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_chains: 57 escalation chains (source -> sink -> impact).\\n" + "- list_languages / taint_file: multi-language taint (PHP, JS/TS, Python, Java).\\n" + "- tool_lookup / ensure_tool / list_tools: 130-tool catalog, auto-install.\\n" + "- read_playbook / list_playbooks: 17 engagement playbooks (web-app, api-security, " + " source-code-audit, active-directory, mobile, external-attack-surface, ...).\\n" + "- skill_lookup / read_skill / list_skills: 38 skills (6 bs-* agent doctrine + " + " technique playbooks: WP/PHP 0-day, AD, malware, mobile, cloud).\\n" + "- read_tool_manual / list_manuals: 317 tool manuals (sqlmap, nmap, commix, ...).\\n" + "- payload_lookup / read_payload: 66 payload collections (sqli, xss, ssti, xxe, lfi).\\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" + "RESOURCE MAP (know what to reach for):\\n" + "- TOOL = acts (scan, taint, verify, record, correlate). Call it to DO something.\\n" + "- PLAYBOOK = campaign plan for a target TYPE. read_playbook(web-application) " + " BEFORE a full engagement of that type.\\n" + "- SKILL = procedure doctrine. Load the bs-* skill for the phase you are on " + " (orchestrate, scope, source-audit, verify, review, report); load a technique " + " skill for the specific technique (WP 0-day, AD, malware).\\n" + "- MANUAL = deep reference for ONE tool. read_tool_manual right before using it.\\n" + "- PAYLOAD = attack payloads for a class. payload_lookup before crafting a probe.\\n" + "- INTELLIGENCE = knowledge. list_attack_vectors (34 categories) maps the " + " full surface during RECON; list_chains (36) turns a finding into impact; " + " chain_links composes chains for complex bugs; bypass_lookup when blocked; " + " payload_lookup when crafting a probe. Reach for them at that moment.\\n\\n" + "PERSISTENCE (complex bugs - do not give up):\\n" + "- On any failure (empty output, blocked probe, failed sub-agent/model), call " + " retry_guidance(signal) for concrete recovery actions before giving up.\\n" + "- One failed probe != not vulnerable. Vary: alternative sinks, other params, " + " encoding/case/whitespace bypasses, different injection context.\\n" + "- Empty output != no findings. Re-run (server may be stale after an upgrade - " + " /reload-mcp), or escalate to route_scan / complex_scan for classes taint " + " misses (POP chains, type juggling, mass assignment, route confusion).\\n" + "- A 'sanitized' sink may not be safe. Challenge the sanitizer: loose == vs ===, " + " missing EXTR_SKIP, int cast truncation, weak regex.\\n" + "- An unconfirmed hypothesis is KEPT as hypothesis - try alternate verification, " + " then let adversarial review decide.\\n" + "- Complex chains (deserialization->POP, LFI->RCE) need the FULL chain traced, " + ` not just the first sink.\\n
|
|
53467
|
+
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_chains: 57 escalation chains (source -> sink -> impact).\\n" + "- list_languages / taint_file: multi-language taint (PHP, JS/TS, Python, Java).\\n" + "- tool_lookup / ensure_tool / list_tools: 130-tool catalog, auto-install.\\n" + "- read_playbook / list_playbooks: 17 engagement playbooks (web-app, api-security, " + " source-code-audit, active-directory, mobile, external-attack-surface, ...).\\n" + "- skill_lookup / read_skill / list_skills: 38 skills (6 bs-* agent doctrine + " + " technique playbooks: WP/PHP 0-day, AD, malware, mobile, cloud).\\n" + "- read_tool_manual / list_manuals: 317 tool manuals (sqlmap, nmap, commix, ...).\\n" + "- payload_lookup / read_payload: 66 payload collections (sqli, xss, ssti, xxe, lfi).\\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" + "RESOURCE MAP (know what to reach for):\\n" + "- ORCHESTRATION = the engagement framework. orchestration() returns the " + " lifecycle (scope->recon->analyze->deep->verify->report, each with " + " entry/exit criteria) + sub-agent team + handoff contract + termination " + " criteria. Load it at engagement start.\\n" + "- TOOL = acts (scan, taint, verify, record, correlate). Call it to DO something.\\n" + "- PLAYBOOK = campaign plan for a target TYPE. read_playbook(web-application) " + " BEFORE a full engagement of that type.\\n" + "- SKILL = procedure doctrine. Load the bs-* skill for the phase you are on " + " (orchestrate, scope, source-audit, verify, review, report); load a technique " + " skill for the specific technique (WP 0-day, AD, malware).\\n" + "- MANUAL = deep reference for ONE tool. read_tool_manual right before using it.\\n" + "- PAYLOAD = attack payloads for a class. payload_lookup before crafting a probe.\\n" + "- INTELLIGENCE = knowledge. list_attack_vectors (34 categories) maps the " + " full surface during RECON; list_chains (36) turns a finding into impact; " + " chain_links composes chains for complex bugs; bypass_lookup when blocked; " + " payload_lookup when crafting a probe. Reach for them at that moment.\\n\\n" + "NO-BABYSITTING (while scanning + testing):\\n" + "- Scan the WHOLE surface before reporting - every file, entry point, and sink. " + " Do not stop after the first hit to ask; keep enumerating the full tree.\\n" + "- Test every hypothesis through its full verification cycle - vary probes on " + " failure, apply bypasses when blocked, keep going. Do not pause to ask.\\n" + "- Persist through partial results: a scan that surfaces few sinks is NOT done - " + " widen the surface, escalate detectors, dig into each reachable sink.\\n" + "- Only surface to the user when: scope/authorization is genuinely unclear, a " + " destructive or DoS action needs explicit consent, or the engagement is complete.\\n\\n" + "PERSISTENCE (complex bugs - do not give up):\\n" + "- On any failure (empty output, blocked probe, failed sub-agent/model), call " + " retry_guidance(signal) for concrete recovery actions before giving up.\\n" + "- One failed probe != not vulnerable. Vary: alternative sinks, other params, " + " encoding/case/whitespace bypasses, different injection context.\\n" + "- Empty output != no findings. Re-run (server may be stale after an upgrade - " + " /reload-mcp), or escalate to route_scan / complex_scan for classes taint " + " misses (POP chains, type juggling, mass assignment, route confusion).\\n" + "- A 'sanitized' sink may not be safe. Challenge the sanitizer: loose == vs ===, " + " missing EXTR_SKIP, int cast truncation, weak regex.\\n" + "- An unconfirmed hypothesis is KEPT as hypothesis - try alternate verification, " + " then let adversarial review decide.\\n" + "- Complex chains (deserialization->POP, LFI->RCE) need the FULL chain traced, " + ` not just the first sink.\\n
|
|
53436
53468
|
` + "- When a probe is BLOCKED by a WAF/filter/sanitizer, call bypass_lookup(defense) " + " for concrete techniques (encoding, case, comment insertion, chunked, null byte, " + " double-encoding, verb tampering, header spoofing) and apply them - do not give up.\\n" + "- CHAIN findings: a low-severity finding usually escalates. list_chains and match it " + " to a multi-stage chain (SSRF->metadata, SQLi->RCE, LFI->RCE, upload->shell) instead " + " of stopping at the first vuln.\\n\\n" + "- Complex bugs chain ACROSS chains: after confirming one chain, chain_links " + " shows what follows (SSRF->metadata then default-creds->pivot via stolen IAM). " + " Trace the full composition, not just a single chain.\\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."
|
|
53437
53469
|
});
|
|
53438
53470
|
server.registerTool("blitz_scan", {
|
|
@@ -53945,6 +53977,15 @@ ${statusLine}` : statusLine },
|
|
|
53945
53977
|
}, async ({ signal }) => {
|
|
53946
53978
|
return { content: [{ type: "text", text: JSON.stringify(retryGuidance(signal)) }] };
|
|
53947
53979
|
});
|
|
53980
|
+
server.registerTool("orchestration", {
|
|
53981
|
+
title: "Orchestration framework",
|
|
53982
|
+
description: "INTEL: return the orchestration framework — the engagement lifecycle (scope→recon→analyze→deep→verify→report, each with entry/exit criteria), the sub-agent team (roles + tools + returns), the handoff contract, and the termination criteria. Load this at engagement start; pass a phase/role id (scope, recon, analyze, deep, verify, report, or team/handoff/termination) to focus.",
|
|
53983
|
+
inputSchema: {
|
|
53984
|
+
part: string2().optional().describe("Optional focus: lifecycle / team / handoff / termination, or a phase id (scope, recon, analyze, deep, verify, report) or role id (recon, taint, deep, verify).")
|
|
53985
|
+
}
|
|
53986
|
+
}, async ({ part }) => {
|
|
53987
|
+
return { content: [{ type: "text", text: JSON.stringify(orchestration(part)) }] };
|
|
53988
|
+
});
|
|
53948
53989
|
server.registerTool("read_payload", {
|
|
53949
53990
|
title: "Read a payload collection",
|
|
53950
53991
|
description: "INTEL: read the full payload collection for a category (or a specific file).",
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "The Blitz Strike orchestration framework. The driving LLM loads this at engagement start and follows the lifecycle phase by phase, fanning out the team in parallel where phases are independent.",
|
|
3
|
+
"lifecycle": [
|
|
4
|
+
{
|
|
5
|
+
"phase": "scope",
|
|
6
|
+
"name": "Scope & gate",
|
|
7
|
+
"goal": "confirm target, scope, and authorization before touching anything",
|
|
8
|
+
"entry": "engagement start",
|
|
9
|
+
"exit": "target classified (URL vs source), scope_check passed",
|
|
10
|
+
"tools": ["scope_check"],
|
|
11
|
+
"parallel": false
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"phase": "recon",
|
|
15
|
+
"name": "Recon (BLITZ)",
|
|
16
|
+
"goal": "map the full attack surface — entry points, sinks, framework, tech",
|
|
17
|
+
"entry": "scope confirmed",
|
|
18
|
+
"exit": "entry points + sinks + framework enumerated (no surface left unmapped)",
|
|
19
|
+
"tools": ["blitz_scan", "blitz_file", "live_recon", "detect_framework", "list_attack_vectors"],
|
|
20
|
+
"parallel": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"phase": "analyze",
|
|
24
|
+
"name": "Analyze (EAGLE-EYE)",
|
|
25
|
+
"goal": "trace source→sink reachability for every candidate sink",
|
|
26
|
+
"entry": "surface mapped",
|
|
27
|
+
"exit": "each sink classified reachable / unreachable / sanitized, with a source→sink trace",
|
|
28
|
+
"tools": ["eagle_eye2", "taint_file", "taint_scan", "trace_data_flow"],
|
|
29
|
+
"parallel": true
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"phase": "deep",
|
|
33
|
+
"name": "Deep (complex bugs)",
|
|
34
|
+
"goal": "hunt complex-bug classes breadth detectors miss",
|
|
35
|
+
"entry": "taint analysis complete",
|
|
36
|
+
"exit": "POP chains, type juggling, mass assignment, route confusion candidates enumerated + linked to escalation chains",
|
|
37
|
+
"tools": ["complex_scan", "route_scan", "list_chains", "chain_links"],
|
|
38
|
+
"parallel": true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"phase": "verify",
|
|
42
|
+
"name": "Verify (STRIKE)",
|
|
43
|
+
"goal": "confirm each hypothesis live with deterministic evidence",
|
|
44
|
+
"entry": "hypotheses exist",
|
|
45
|
+
"exit": "every hypothesis confirmed or rejected (marker + negative control)",
|
|
46
|
+
"tools": ["strike_verify", "strike_resolve", "finding_create", "finding_transition", "finding_attach_evidence"],
|
|
47
|
+
"parallel": true
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"phase": "report",
|
|
51
|
+
"name": "Report",
|
|
52
|
+
"goal": "emit submission-ready, deduplicated findings",
|
|
53
|
+
"entry": "verification complete",
|
|
54
|
+
"exit": "report emitted (markdown/JSON/SARIF) with SHA-256 integrity hash",
|
|
55
|
+
"tools": ["dedup_findings", "generate_report"],
|
|
56
|
+
"parallel": false
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"team": [
|
|
60
|
+
{
|
|
61
|
+
"id": "recon",
|
|
62
|
+
"name": "Recon agent (BLITZ tier)",
|
|
63
|
+
"responsibility": "map the exposed attack surface",
|
|
64
|
+
"tools": ["blitz_scan", "blitz_file", "live_recon", "detect_framework", "list_attack_vectors"],
|
|
65
|
+
"returns": "enumerated entry points + sinks + framework/tech, each with file:line or URL"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "taint",
|
|
69
|
+
"name": "Taint agent (EAGLE-EYE tier)",
|
|
70
|
+
"responsibility": "trace source→sink reachability",
|
|
71
|
+
"tools": ["eagle_eye2", "taint_file", "taint_scan", "trace_data_flow"],
|
|
72
|
+
"returns": "reachable sinks with a source→sink trace and a reachability verdict"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "deep",
|
|
76
|
+
"name": "Deep agent (complex bugs)",
|
|
77
|
+
"responsibility": "hunt complex-bug classes taint misses",
|
|
78
|
+
"tools": ["complex_scan", "route_scan", "list_chains", "chain_links"],
|
|
79
|
+
"returns": "POP chain / type juggling / mass assignment / route confusion candidates, linked to escalation chains"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "verify",
|
|
83
|
+
"name": "Verify agent (STRIKE tier)",
|
|
84
|
+
"responsibility": "confirm live with evidence",
|
|
85
|
+
"tools": ["strike_verify", "strike_resolve", "finding_create", "finding_transition", "finding_attach_evidence"],
|
|
86
|
+
"returns": "confirmed or rejected findings, each with marker + negative control + evidence"
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"handoff": {
|
|
90
|
+
"delegate_contract": [
|
|
91
|
+
"a specific, self-contained goal",
|
|
92
|
+
"the exact tool names to use",
|
|
93
|
+
"the exact argument names (source-analysis tools take `path`, only `run_engagement` takes `target`)",
|
|
94
|
+
"what deterministic output is required back"
|
|
95
|
+
],
|
|
96
|
+
"result_contract": [
|
|
97
|
+
"deterministic evidence (file:line, sink, trace, marker reflection) — never prose",
|
|
98
|
+
"a verdict per finding: confirmed / hypothesis / rejected",
|
|
99
|
+
"no fabricated results — empty is reported as empty, not filled in"
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"termination": {
|
|
103
|
+
"done_when": [
|
|
104
|
+
"every reachable sink has been traced",
|
|
105
|
+
"every hypothesis is confirmed or rejected",
|
|
106
|
+
"findings are deduplicated and the report is emitted",
|
|
107
|
+
"no pending hypotheses remain"
|
|
108
|
+
],
|
|
109
|
+
"not_done_when": [
|
|
110
|
+
"a scan surfaced few sinks but the target surface is wider",
|
|
111
|
+
"hypotheses remain unverified",
|
|
112
|
+
"a low-severity finding has not been checked for escalation (chain_links)"
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blitzstrike",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.86",
|
|
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": {
|
|
@@ -63,6 +63,27 @@ step you are on. Do not improvise a plan the playbook already spells out.
|
|
|
63
63
|
|
|
64
64
|
6. **Report.** Emit `generate_report` + `cvss_score` + `write-report`.
|
|
65
65
|
|
|
66
|
+
## Lifecycle, team, and termination
|
|
67
|
+
|
|
68
|
+
Load the full framework with `orchestration` (or focus it:
|
|
69
|
+
`orchestration(lifecycle)`, `orchestration(team)`, `orchestration(handoff)`,
|
|
70
|
+
`orchestration(termination)`, or a single phase/role id). It is the authoritative
|
|
71
|
+
reference — do not improvise the shape of the engagement:
|
|
72
|
+
|
|
73
|
+
- **6 phases, each with entry/exit criteria**: scope → recon (BLITZ) → analyze
|
|
74
|
+
(EAGLE-EYE) → deep (complex bugs) → verify (STRIKE) → report. A phase is not
|
|
75
|
+
done until its exit criterion is met.
|
|
76
|
+
- **4 sub-agent roles** with tools + a deterministic output contract:
|
|
77
|
+
`recon` (surface), `taint` (reachability), `deep` (POP/type-juggling/route
|
|
78
|
+
confusion), `verify` (live confirmation + evidence).
|
|
79
|
+
- **Handoff contract**: every delegate carries a specific goal, the exact tool
|
|
80
|
+
names, the exact arg names (`path` vs `target`), and the required evidence
|
|
81
|
+
back. Results come back as deterministic evidence — never prose.
|
|
82
|
+
- **Termination**: done when every reachable sink is traced, every hypothesis is
|
|
83
|
+
confirmed or rejected, and the report is emitted (deduplicated). NOT done when
|
|
84
|
+
the surface is wider than the scan, hypotheses remain unverified, or a
|
|
85
|
+
low-severity finding hasn't been checked for escalation (`chain_links`).
|
|
86
|
+
|
|
66
87
|
## Orchestration pattern (native plan + sub-agents)
|
|
67
88
|
|
|
68
89
|
You are the orchestrator — use your platform's native planning and delegation
|
|
@@ -104,6 +125,12 @@ user sees you working, not a silent tool call.
|
|
|
104
125
|
|
|
105
126
|
## Rules
|
|
106
127
|
|
|
128
|
+
- **No-babysitting during scan + test.** Scan the whole surface before
|
|
129
|
+
reporting — every file, entry point, sink. Test every hypothesis through its
|
|
130
|
+
full cycle — vary probes on failure, apply bypasses when blocked, keep going.
|
|
131
|
+
A scan that surfaces few sinks is not done: widen the surface and escalate
|
|
132
|
+
detectors. Only pause for the user when scope is genuinely unclear, a
|
|
133
|
+
destructive action needs consent, or the engagement is complete.
|
|
107
134
|
- **Persist — complex bugs do not give up.** A failed probe is not "not
|
|
108
135
|
vulnerable" (vary sinks, params, encodings); empty output is not "no
|
|
109
136
|
findings" (re-run or escalate to `route_scan`/`complex_scan`); a "sanitized"
|