blitzstrike 1.0.81 → 1.0.83

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 CHANGED
@@ -5,6 +5,43 @@ 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.83] — 2026-09-13
9
+
10
+ ### Removed — dead code, dead data, and stale docs (no decoration)
11
+
12
+ Full dead-code/dead-data audit. Removed:
13
+
14
+ - 16 `intelligence/*.json` files that were remnants of the removed deterministic
15
+ engine and no longer loaded by any code (`ab_signals`, `attack_chains`,
16
+ `awaiting_input_markers`, `endpoint_patterns`, `escalation_patterns`,
17
+ `file_extensions`, `patterns`, `refusal_markers`, `scan_profiles`, `skills`,
18
+ `tools`, `tools_meta`, `unified_patterns`, `verification_patterns`,
19
+ `vuln_ontology`, `waff_bypass`) — superseded by `chains.json`, `skills/`,
20
+ `tools-catalog.json`, and the live intel files.
21
+ - 3 `examples/*.sh` that invoked the removed `mission`/`benchmark` CLI.
22
+ - `templates/cves.json` (2.1 MB) — never loaded (NVD lookups use the API,
23
+ CVE correlation uses `cve_correlations.json`).
24
+
25
+ Rewrote `docs/AUTONOMY.md` (was describing the removed deterministic engine)
26
+ to document the LLM-driven model, and updated `README.md` / `docs/usage.md` /
27
+ `THIRD-PARTY-NOTICES.md` to drop the removed `mission`/`benchmark` CLI,
28
+ `run_benchmark`, and the stale 12-sink-class / 106-check counts.
29
+
30
+ ## [1.0.82] — 2026-09-13
31
+
32
+ ### Added — attack-vector focus + chain-to-chain composition
33
+
34
+ - Attack vectors are now actionable: each of the 34 categories in
35
+ `attack_vectors.json` gained a `focus` (what to test / look for), surfaced by
36
+ `list_attack_vectors` and `attackVectors` — no longer bare names.
37
+ - New `chain_links` MCP tool + `intelligence/chain_links.json`: 18 chain→chain
38
+ compositions (SSRF→metadata → default-creds→pivot via stolen IAM, XXE→SSRF →
39
+ cloud metadata, SQLi→RCE → hash-dump, …) so a complex bug can be traced across
40
+ chains instead of stopping at one.
41
+ - Doctrine: RESOURCE MAP now tells a driving LLM WHEN to reach for each —
42
+ `list_attack_vectors` during recon, `list_chains` for escalation, `chain_links`
43
+ to compose chains, `bypass_lookup` when blocked, `payload_lookup` for probes.
44
+
8
45
  ## [1.0.81] — 2026-09-13
9
46
 
10
47
  ### Added — bypass techniques + chain doctrine
package/README.md CHANGED
@@ -54,24 +54,25 @@ confirms it.
54
54
 
55
55
  ---
56
56
 
57
- ## Autonomous engine
57
+ ## Autonomous, LLM-driven
58
58
 
59
- Beyond single-tool calls, Blitz Strike ships a **self-driving security research
60
- engine** (Mission Control). Give it a target and a scope — it plans, executes,
61
- verifies, reviews against false positives, fills coverage gaps, and reports,
62
- all without babysitting:
59
+ Blitz Strike is driven by the LLM — Claude, Hermes, OpenCode, Codex, or any
60
+ MCP client. **The LLM is the brain** (plans, routes, delegates, judges); **Blitz
61
+ Strike is the deterministic hands + knowledge + guardrails**.
62
+
63
+ A full engagement is one call, or a granular agent-orchestrated cycle:
63
64
 
64
65
  ```bash
65
- npx blitzstrike mission ./path/to/source --mode source
66
- npx blitzstrike mission https://example.com --mode web --scope example.com
67
- npx blitzstrike benchmark --full
66
+ npx blitzstrike serve --mcp # connect your agent, then ask it to
67
+ # "audit ./src" (source) or "audit https://example.com" (live)
68
68
  ```
69
69
 
70
- It is deterministic by default (no model calls unless configured), persists
71
- every mission (resumable), enforces scope + budget + termination policy, and
72
- keeps long-term memory of findings and failed approaches.
70
+ The LLM classifies the target automatically (URL → live pipeline, filesystem
71
+ path → source pipeline), then drives recon → analyze → verify → review →
72
+ report — guided by the bundled doctrine (`instructions` + skills + per-step
73
+ `next_steps`) and fanned out across the platform's native sub-agents.
73
74
 
74
- → [Autonomous engine](docs/AUTONOMY.md) — full architecture + reference.
75
+ → [Autonomy & doctrine](docs/AUTONOMY.md) — how the LLM is steered.
75
76
 
76
77
  ## Why TypeScript / Bun
77
78
 
@@ -136,8 +137,6 @@ blitzstrike serve --mcp # start MCP server over stdio (default)
136
137
  blitzstrike doctor # health check: runtime + 130-tool catalog + creds
137
138
  blitzstrike install # write MCP config to detected clients (Claude/Cursor/OpenCode)
138
139
  blitzstrike install --dry-run # preview the config without writing
139
- blitzstrike mission <target> # run an autonomous mission (source or web)
140
- blitzstrike benchmark # run the autonomous benchmark (--full for whole corpus)
141
140
  blitzstrike sync-data # fetch heavy datasets (payloads + templates) on-demand
142
141
  blitzstrike update # check for a newer version + refresh the data cache
143
142
  blitzstrike version # print version
@@ -220,8 +219,8 @@ MCP servers. With no client detected, it prints the snippet for manual paste.
220
219
  | `cvss_score(AV, AC, PR, UI, S, C, I, A)` | Compute a deterministic CVSS v3.1 base score + vector + severity (self-computed, not read from NVD). |
221
220
  | `dedup_findings(findings)` | Collapse findings that share a root cause (sink × source × CWE) into one group per root cause. |
222
221
  | `generate_report(findings, format)` | Emit a reproducible markdown/JSON report with summary + SHA-256 integrity hash. |
223
- | `run_benchmark()` | Run the labelled corpus and report detection rate, false-positive rate, and precision. |
224
- | `coverage_matrix()` | Enumerate language × sink-class coverage (4 languages × 12 sink classes) + coverage ratio. |
222
+ | `run_enterprise_benchmark()` | Run the labelled enterprise corpus and report detection rate, false-positive rate, and precision. |
223
+ | `coverage_matrix()` | Enumerate language × sink-class coverage (4 languages × 15 sink classes) + coverage ratio. |
225
224
 
226
225
  ### EAGLE-EYE — taint + data-flow
227
226
 
@@ -359,7 +358,7 @@ All other tools need no credentials.
359
358
  bun install # deps
360
359
  bun run typecheck # tsc --noEmit
361
360
  bun run build # ESM bundle → dist/index.js
362
- bun run test # regression + benchmark suite (106 checks)
361
+ bun run test # regression + benchmark suite (183 checks)
363
362
  bun run compile # single static binary → dist/blitzstrike
364
363
  ```
365
364
 
@@ -370,16 +369,17 @@ bun run compile # single static binary → dist/blitzstrike
370
369
  Blitz Strike carries a benchmark suite and a coverage matrix so quality is a
371
370
  number you can re-run, not a claim.
372
371
 
373
- - **Benchmark** (`run_benchmark`) — a labelled corpus of vulnerable + safe
374
- fixtures across PHP, JavaScript, Python, and Java. Current result:
372
+ - **Benchmark** (`run_enterprise_benchmark`) — a labelled corpus of vulnerable +
373
+ safe fixtures across PHP, JavaScript, Python, and Java. Current result:
375
374
  detection rate **1.0**, false-positive rate **0**, precision **1.0**.
376
- - **Coverage matrix** (`coverage_matrix`) — 4 languages × 12 sink classes =
377
- 35/48 pairs covered (**72.9%**). The two uncovered classes (`xml_processing`,
378
- `archive_extraction`) are tracked in the roadmap.
375
+ - **Coverage matrix** (`coverage_matrix`) — 4 languages × 15 sink classes =
376
+ 56/60 pairs covered. The four uncovered pairs are legitimately absent from
377
+ the language (e.g. Java has no `eval`, Python/Java no PHP-style file
378
+ inclusion, JS no deserialization sink).
379
379
  - **Attack-vector taxonomy** (`list_attack_vectors` / `attack_vectors`) — a
380
380
  master reference of 34 attack-vector categories (588 vectors) so a driving
381
381
  agent can map the *entire* attack surface, not just the obvious sinks.
382
- - **Regression suite** — `bun run test` runs 106 checks covering finding
382
+ - **Regression suite** — `bun run test` runs 183 checks covering finding
383
383
  lifecycle, evidence integrity, CVSS math, taint tracing, dedup, report
384
384
  integrity, and benchmark invariants. CI runs it on every push.
385
385
 
@@ -405,7 +405,7 @@ Do not use against systems without explicit permission from the owner.
405
405
 
406
406
  - [Installation](docs/installation.md) — prerequisites, install, client registration.
407
407
  - [Usage](docs/usage.md) — one-call engagement, granular path, modes, memory.
408
- - [Autonomous engine](docs/AUTONOMY.md) — Mission Control, agents, security graph, benchmark.
408
+ - [Autonomy & doctrine](docs/AUTONOMY.md) — LLM-driven autonomy, resource map, guardrails.
409
409
  - [Manifesto](docs/manifesto.md) — the invariants that drive the methodology.
410
410
  - [Contributing](CONTRIBUTING.md) — how to add chains, tools, and data.
411
411
  - [Changelog](CHANGELOG.md) — version history.
@@ -46,7 +46,7 @@ satisfies the attribution requirements of those licenses.
46
46
 
47
47
  - **Source:** https://github.com/projectdiscovery/nuclei-templates
48
48
  - **License:** MIT
49
- - **Used for:** ~11.9k YAML detection templates (`templates/`) + `cves.json`.
49
+ - **Used for:** ~11.9k YAML detection templates (`templates/`).
50
50
 
51
51
  ---
52
52
 
package/dist/index.js CHANGED
@@ -31429,7 +31429,7 @@ function listAttackVectors() {
31429
31429
  return {
31430
31430
  total_categories: data.categories.length,
31431
31431
  total_vectors: data.categories.reduce((n, c) => n + c.vectors.length, 0),
31432
- categories: data.categories.map((c) => ({ id: c.id, title: c.title, count: c.vectors.length }))
31432
+ categories: data.categories.map((c) => ({ id: c.id, title: c.title, count: c.vectors.length, focus: c.focus ?? "" }))
31433
31433
  };
31434
31434
  }
31435
31435
  function attackVectors(category) {
@@ -31442,7 +31442,7 @@ function attackVectors(category) {
31442
31442
  const matches = data.categories.filter((c) => c.title.toLowerCase().includes(category.toLowerCase()) || c.id.includes(q)).slice(0, 5).map((c) => c.id);
31443
31443
  return { found: false, query: category, suggestions: matches };
31444
31444
  }
31445
- return { found: true, id: found.id, title: found.title, count: found.vectors.length, vectors: found.vectors };
31445
+ return { found: true, id: found.id, title: found.title, focus: found.focus ?? "", count: found.vectors.length, vectors: found.vectors };
31446
31446
  }
31447
31447
  var PACKAGE_PAYLOADS = join8(ROOT3, "payloads");
31448
31448
  var PACKAGE_TEMPLATES = join8(ROOT3, "templates");
@@ -31624,6 +31624,12 @@ function bypassLookup(defense) {
31624
31624
  return { found: false, defense, suggestions: cats.map((c) => c.id) };
31625
31625
  return { found: true, defense: match.defense, techniques: match.techniques };
31626
31626
  }
31627
+ function chainLinks() {
31628
+ const data = loadJson("chain_links");
31629
+ if (!data)
31630
+ return { found: false, error: "chain_links.json not found" };
31631
+ return { found: true, total: data.links.length, links: data.links };
31632
+ }
31627
31633
 
31628
31634
  // src/active.ts
31629
31635
  var TIMEOUT_MS2 = 20000;
@@ -53385,9 +53391,8 @@ function createServer() {
53385
53391
  name: "blitzstrike",
53386
53392
  version: "1.0.0"
53387
53393
  }, {
53388
- 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 (chains, attack vectors, CVE/tech mapping).\\n
53389
- ` + "PERSISTENCE (complex bugs - do not give 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
53390
- ` + "- 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" + "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."
53394
+ 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" + "- 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
53395
+ ` + "- 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."
53391
53396
  });
53392
53397
  server.registerTool("blitz_scan", {
53393
53398
  title: "BLITZ scan",
@@ -53883,6 +53888,13 @@ ${statusLine}` : statusLine },
53883
53888
  }, async ({ defense }) => {
53884
53889
  return { content: [{ type: "text", text: JSON.stringify(bypassLookup(defense)) }] };
53885
53890
  });
53891
+ server.registerTool("chain_links", {
53892
+ title: "Chain-to-chain composition",
53893
+ description: "INTEL: return how escalation chains compose — which chain naturally follows another (e.g. SSRF->cloud-metadata then default-creds->internal-pivot via stolen IAM). Use it after confirming a chain to see what a complex bug chains into next, instead of stopping at one chain.",
53894
+ inputSchema: {}
53895
+ }, async () => {
53896
+ return { content: [{ type: "text", text: JSON.stringify(chainLinks()) }] };
53897
+ });
53886
53898
  server.registerTool("read_payload", {
53887
53899
  title: "Read a payload collection",
53888
53900
  description: "INTEL: read the full payload collection for a category (or a specific file).",
package/docs/AUTONOMY.md CHANGED
@@ -1,147 +1,59 @@
1
- # Blitz Strike — Autonomous Security Research & Verification Engine
1
+ # Blitz Strike — Autonomous Security Auditing (LLM-Driven)
2
2
 
3
- Blitz Strike's autonomous layer turns the three-tier methodology (BLITZ →
4
- EAGLE-EYE → STRIKE) into a **self-driving security research engine**. Give it a
5
- target and a scope; it plans, executes, verifies, reviews, and reports — without
6
- babysitting.
3
+ Blitz Strike is a **universal security-audit toolbelt** that an LLM agent
4
+ (Hermes, Claude, OpenCode, Codex — any MCP client) drives end-to-end without
5
+ babysitting. The split is deliberate:
7
6
 
8
- This document describes the autonomous engine added on top of the existing
9
- deterministic core. The core (`blitz_scan`, `eagle_eye2`, `strike_verify`, the
10
- taint engine, live recon) is unchanged and always available.
7
+ - **The LLM is the brain** — it plans, routes, reasons over results, delegates,
8
+ and judges. It is never replaced by a deterministic loop.
9
+ - **Blitz Strike is the hands + knowledge + guardrails** — deterministic
10
+ analysis, verification, the finding lifecycle, and the intelligence data
11
+ layer.
11
12
 
12
- ---
13
+ ## The three tiers
13
14
 
14
- ## 1. Design principles
15
+ | Tier | What it does | Key tools |
16
+ |------|-------------|-----------|
17
+ | **BLITZ** | Attack-surface mapping, recon | `blitz_scan`, `blitz_file`, `live_recon`, `detect_framework`, `list_attack_vectors` |
18
+ | **EAGLE-EYE** | Source→sink reachability | `taint_file`, `eagle_eye2`, `trace_data_flow`, `route_scan`, `complex_scan` |
19
+ | **STRIKE** | Live validation | `strike_verify` (baseline + marker + negative control), `strike_resolve` |
15
20
 
16
- - **Detection is not proof.** A scan hit is a hypothesis; only live verification
17
- (or an adversarial review) turns it into a finding.
18
- - **A hypothesis is not a finding.** They are separate states that never conflate.
19
- - **AI reasoning is not evidence.** Every finding carries deterministic evidence
20
- (marker reflection, negative control, source→sink trace).
21
- - **The LLM never controls policy.** Routing is
22
- `LLM → Planner → Policy engine → Task executor → Tool`, never an arbitrary
23
- shell call. The policy engine enforces scope, risk, and budgets.
24
- - **Deterministic by default.** No model is called unless a provider is
25
- explicitly configured (§Model routing).
26
-
27
- ---
28
-
29
- ## 2. Components
30
-
31
- | Component | Module | Role |
32
- |---|---|---|
33
- | Mission State | `src/mission/state.ts` | Persistent, resumable missions (`~/.blitzstrike/missions/<id>.json`) |
34
- | Task Graph | `src/mission/taskgraph.ts` | Dependency-aware, parallel scheduler |
35
- | Mission Control | `src/mission/control.ts` | The autonomous loop (observe → act → replan → terminate) |
36
- | Specialized Agents | `src/agents.ts` | 13 deterministic agents (recon, source, auth, validator, reviewer, browser, …) |
37
- | Security Graph | `src/mission/graph.ts` | Shared world model (targets, sinks, endpoints, chains) |
38
- | Hypothesis Engine | `src/mission/hypothesis.ts` | observation → hypothesis → validated finding / rejected |
39
- | Adaptive Planner | `src/mission/planner.ts` | Evidence-driven next actions (SSRF → metadata, LFI → logs, …) |
40
- | Escalation Graph | `src/mission/planner.ts` | The 57 chains integrated into the world model |
41
- | Coverage Scheduler | `src/mission/coverage.ts` | Auto-generates tasks for under-explored dimensions |
42
- | Failure Recovery | `src/mission/recovery.ts` | Diagnose → retry / alternative / record — never repeat a mistake |
43
- | Adversarial Reviewer | `src/mission/reviewer.ts` | Ten §questions → CONFIRMED / REJECTED / NEEDS_MORE_EVIDENCE |
44
- | Browser Agent | `src/browser-agent.ts` | Session-based real browser (login flows, DOM issues) |
45
- | Model Router | `src/mission/router.ts` | Task → model tier (pure routing, deterministic default) |
46
- | Budget Controller | `src/mission/budget.ts` | time / tasks / requests / tokens / cost + per-task budget |
47
- | Termination Engine | `src/mission/termination.ts` | Seven traceable termination reasons |
48
- | Cross-agent Memory | `src/mission/memory.ts` | Persist findings + failed approaches (with `future_policy`) |
49
- | Benchmark | `src/mission/benchmark.ts` | Full-engine precision / recall / F1 against a labelled corpus |
50
-
51
- ---
52
-
53
- ## 3. Mission lifecycle
54
-
55
- ```
56
- ┌──────────────────────────────────────────────┐
57
- │ Mission Control │
58
- target ─▶ │ OBSERVE → schedule → execute → collect │
59
- scope ─▶ │ ↓ │
60
- │ REPLAN (validator → reviewer → reporter, │
61
- │ coverage gaps) │
62
- │ ↓ │
63
- │ terminate (traceable reason) │
64
- └──────────────────────────────────────────────┘
65
- │ │
66
- Security Graph (world model) ←→ Hypothesis Engine
67
- │
68
- Cross-agent Memory (findings + failed approaches)
69
- ```
70
-
71
- A mission is a state machine persisted to disk after every step, so it survives
72
- a process restart and can be resumed with `blitz mission resume <id>`.
73
-
74
- ### Termination reasons (§Termination)
75
-
76
- `objective_complete` · `no_progress` · `max_iterations` · `budget_exhausted` ·
77
- `user_interrupted` · `safety_violation` · `scope_violation`. Each is recorded in
78
- the mission's `decision_log` with a detail string.
79
-
80
- ---
81
-
82
- ## 4. Safety invariants (never bypassed)
83
-
84
- - **Scope gate** — a URL target requires an authorized scope before any agent
85
- runs; local source paths are always allowed.
86
- - **No raw secrets persisted** — `redactSecrets` runs before anything is written.
87
- - **Negative controls** — a finding is only confirmed when the control stays inert.
88
- - **No destructive actions** — the engine is read-only / probe-only.
89
- - **Deterministic by default** — no model call unless configured.
21
+ Plus a canonical evidence-first finding engine (`finding_create` →
22
+ `finding_transition` → `finding_attach_evidence`) and a multi-language taint
23
+ engine (PHP/JS/TS/Python/Java).
90
24
 
91
- ---
25
+ ## How autonomy actually works
92
26
 
93
- ## 5. CLI
27
+ The LLM drives a cycle, guided by three coordinated layers:
94
28
 
95
- ```bash
96
- # Run an autonomous mission against a source tree
97
- blitzstrike mission ./path/to/source --mode source
29
+ 1. **Static `instructions`** — the mental model, target routing, resource map,
30
+ and persistence doctrine, injected when the MCP server connects.
31
+ 2. **Skills (doctrine)** — `bs-orchestrate-engagement`, `bs-scope-gate`,
32
+ `bs-source-audit`, `bs-verify-finding`, `bs-adversarial-review`,
33
+ `bs-write-report`, loaded per phase.
34
+ 3. **Dynamic `next_steps`** — per-result guidance telling the LLM what to do
35
+ after each tool call.
98
36
 
99
- # Run an autonomous mission against a live URL (requires --scope)
100
- blitzstrike mission https://example.com --mode web --scope example.com
37
+ A full engagement is orchestrated with the platform's **native plan +
38
+ sub-agent** primitives (e.g. Hermes `plan`/`todo` + `delegate_task`): route the
39
+ target (URL vs source), read the matching playbook, then fan out recon /
40
+ analyze / deep-classes workstreams in parallel, collect, verify, and report.
101
41
 
102
- # Resume / inspect a mission
103
- blitzstrike mission resume <mission-id>
104
- blitzstrike mission status <mission-id>
105
- blitzstrike mission list
42
+ ## Guardrails (the anti-hallucination core)
106
43
 
107
- # Run the autonomous benchmark (--full for the whole 101-fixture corpus)
108
- blitzstrike benchmark --full
109
- ```
110
-
111
- ---
112
-
113
- ## 6. MCP (autonomous mission mode)
114
-
115
- The autonomous layer is exposed alongside the low-level tools:
116
-
117
- | Tool | Purpose |
118
- |---|---|
119
- | `mission_start` | Start an autonomous mission (target + mode + scope) |
120
- | `mission_status` | Full mission state (tasks, hypotheses, graph, coverage) |
121
- | `mission_resume` | Resume an interrupted mission |
122
- | `mission_stop` | Stop a running mission |
123
- | `mission_list` | List persisted missions |
124
- | `browser_agent` | Session-based browser ops (open/click/type/evaluate/…) |
125
-
126
- Low-level tools (`blitz_scan`, `eagle_eye2`, `strike_verify`, `run_engagement`,
127
- …) remain available for manual, step-by-step engagements.
128
-
129
- ---
130
-
131
- ## 7. No-babysitting
132
-
133
- The autonomous mission handles its own recovery, strategy changes, delegation,
134
- new-task creation, surface discovery, verification, false-positive rejection,
135
- and coverage gaps. Human input is only needed for: initial authorization/scope,
136
- high-risk approval when policy requires it, and (optional) final review.
137
-
138
- ---
139
-
140
- ## 8. Examples
141
-
142
- See `examples/` for runnable scripts. The shortest path:
143
-
144
- ```bash
145
- npx blitzstrike benchmark --full # measure the engine
146
- npx blitzstrike mission ./src --mode source # autonomous source audit
147
- ```
44
+ - **Detection is not proof.** A scan hit is a hypothesis.
45
+ - **A hypothesis is not a finding.** Separate states, never conflated.
46
+ - **AI reasoning is not evidence.** Every finding carries deterministic evidence
47
+ (marker reflection, negative control, source→sink trace, SHA-256-tagged).
48
+ - **Scope first.** Out-of-scope or destructive work is refused.
49
+
50
+ ## The resource map (know what to reach for)
51
+
52
+ - **TOOL** = acts (scan, taint, verify, record).
53
+ - **PLAYBOOK** (17) = campaign plan for a target type (`web-application`,
54
+ `api-security`, `source-code-audit`, `active-directory`, …).
55
+ - **SKILL** (38) = phase/technique doctrine.
56
+ - **MANUAL** (317) = deep reference for one tool.
57
+ - **PAYLOAD** (66 categories) = attack payloads for a class.
58
+ - **INTELLIGENCE** = 36 escalation chains, 18 chain→chain links, 34 attack-vector
59
+ categories, bypass techniques, WAF/tech/CVE/port correlations.
package/docs/usage.md CHANGED
@@ -53,7 +53,7 @@ Only after `strike_verify` reflects your marker AND the chain's
53
53
  verified knowledge.
54
54
  - `cvss_score` / `dedup_findings` / `generate_report` — self-computed CVSS,
55
55
  root-cause dedup, and reproducible reports.
56
- - `run_benchmark` / `coverage_matrix` — measure detection quality and coverage.
56
+ - `run_enterprise_benchmark` / `coverage_matrix` — measure detection quality and coverage.
57
57
 
58
58
  ## Memory
59
59