blitzstrike 1.0.81 → 1.0.84
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 +49 -0
- package/README.md +24 -24
- package/THIRD-PARTY-NOTICES.md +1 -1
- package/dist/index.js +67 -5
- package/docs/AUTONOMY.md +48 -136
- package/docs/usage.md +1 -1
- package/intelligence/attack_vectors.json +830 -796
- package/intelligence/chain_links.json +23 -0
- package/intelligence/retry_guidance.json +67 -0
- package/package.json +1 -1
- package/intelligence/ab_signals.json +0 -722
- package/intelligence/attack_chains.json +0 -666
- package/intelligence/awaiting_input_markers.json +0 -37
- package/intelligence/endpoint_patterns.json +0 -541
- package/intelligence/escalation_patterns.json +0 -224
- package/intelligence/file_extensions.json +0 -6
- package/intelligence/patterns.json +0 -437
- package/intelligence/refusal_markers.json +0 -35
- package/intelligence/scan_profiles.json +0 -40
- package/intelligence/skills.json +0 -1185
- package/intelligence/tools.json +0 -1292
- package/intelligence/tools_meta.json +0 -1247
- package/intelligence/unified_patterns.json +0 -2329
- package/intelligence/verification_patterns.json +0 -52
- package/intelligence/vuln_ontology.json +0 -189
- package/intelligence/waff_bypass.json +0 -677
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,55 @@ 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.84] — 2026-09-13
|
|
9
|
+
|
|
10
|
+
### Added — structured failure recovery (`retry_guidance`)
|
|
11
|
+
|
|
12
|
+
- New `retry_guidance` MCP tool + `intelligence/retry_guidance.json`: 7 failure
|
|
13
|
+
modes (empty output, blocked, sanitized, subagent failed, model failed,
|
|
14
|
+
unconfirmed, low severity) → concrete recovery actions, with alias resolution
|
|
15
|
+
(`rate limit` → model_failed, `stale` → empty_output). Upgrades the
|
|
16
|
+
"don't give up" doctrine from prose to a data-driven lookup.
|
|
17
|
+
- PERSISTENCE doctrine now leads with: on any failure, call
|
|
18
|
+
`retry_guidance(signal)` for concrete recovery actions before giving up.
|
|
19
|
+
|
|
20
|
+
## [1.0.83] — 2026-09-13
|
|
21
|
+
|
|
22
|
+
### Removed — dead code, dead data, and stale docs (no decoration)
|
|
23
|
+
|
|
24
|
+
Full dead-code/dead-data audit. Removed:
|
|
25
|
+
|
|
26
|
+
- 16 `intelligence/*.json` files that were remnants of the removed deterministic
|
|
27
|
+
engine and no longer loaded by any code (`ab_signals`, `attack_chains`,
|
|
28
|
+
`awaiting_input_markers`, `endpoint_patterns`, `escalation_patterns`,
|
|
29
|
+
`file_extensions`, `patterns`, `refusal_markers`, `scan_profiles`, `skills`,
|
|
30
|
+
`tools`, `tools_meta`, `unified_patterns`, `verification_patterns`,
|
|
31
|
+
`vuln_ontology`, `waff_bypass`) — superseded by `chains.json`, `skills/`,
|
|
32
|
+
`tools-catalog.json`, and the live intel files.
|
|
33
|
+
- 3 `examples/*.sh` that invoked the removed `mission`/`benchmark` CLI.
|
|
34
|
+
- `templates/cves.json` (2.1 MB) — never loaded (NVD lookups use the API,
|
|
35
|
+
CVE correlation uses `cve_correlations.json`).
|
|
36
|
+
|
|
37
|
+
Rewrote `docs/AUTONOMY.md` (was describing the removed deterministic engine)
|
|
38
|
+
to document the LLM-driven model, and updated `README.md` / `docs/usage.md` /
|
|
39
|
+
`THIRD-PARTY-NOTICES.md` to drop the removed `mission`/`benchmark` CLI,
|
|
40
|
+
`run_benchmark`, and the stale 12-sink-class / 106-check counts.
|
|
41
|
+
|
|
42
|
+
## [1.0.82] — 2026-09-13
|
|
43
|
+
|
|
44
|
+
### Added — attack-vector focus + chain-to-chain composition
|
|
45
|
+
|
|
46
|
+
- Attack vectors are now actionable: each of the 34 categories in
|
|
47
|
+
`attack_vectors.json` gained a `focus` (what to test / look for), surfaced by
|
|
48
|
+
`list_attack_vectors` and `attackVectors` — no longer bare names.
|
|
49
|
+
- New `chain_links` MCP tool + `intelligence/chain_links.json`: 18 chain→chain
|
|
50
|
+
compositions (SSRF→metadata → default-creds→pivot via stolen IAM, XXE→SSRF →
|
|
51
|
+
cloud metadata, SQLi→RCE → hash-dump, …) so a complex bug can be traced across
|
|
52
|
+
chains instead of stopping at one.
|
|
53
|
+
- Doctrine: RESOURCE MAP now tells a driving LLM WHEN to reach for each —
|
|
54
|
+
`list_attack_vectors` during recon, `list_chains` for escalation, `chain_links`
|
|
55
|
+
to compose chains, `bypass_lookup` when blocked, `payload_lookup` for probes.
|
|
56
|
+
|
|
8
57
|
## [1.0.81] — 2026-09-13
|
|
9
58
|
|
|
10
59
|
### Added — bypass techniques + chain doctrine
|
package/README.md
CHANGED
|
@@ -54,24 +54,25 @@ confirms it.
|
|
|
54
54
|
|
|
55
55
|
---
|
|
56
56
|
|
|
57
|
-
## Autonomous
|
|
57
|
+
## Autonomous, LLM-driven
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|
66
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
→ [
|
|
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
|
-
| `
|
|
224
|
-
| `coverage_matrix()` | Enumerate language × sink-class coverage (4 languages ×
|
|
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 (
|
|
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** (`
|
|
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 ×
|
|
377
|
-
|
|
378
|
-
`
|
|
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
|
|
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
|
-
- [
|
|
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.
|
package/THIRD-PARTY-NOTICES.md
CHANGED
|
@@ -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/`)
|
|
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,53 @@ 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
|
+
}
|
|
31633
|
+
function retryGuidance(signal) {
|
|
31634
|
+
const data = loadJson("retry_guidance");
|
|
31635
|
+
if (!data)
|
|
31636
|
+
return { found: false, error: "retry_guidance.json not found" };
|
|
31637
|
+
if (!signal) {
|
|
31638
|
+
return {
|
|
31639
|
+
found: true,
|
|
31640
|
+
modes: data.modes.map((m) => ({ id: m.id, signal: m.signal, actions: m.actions.length }))
|
|
31641
|
+
};
|
|
31642
|
+
}
|
|
31643
|
+
const ALIASES = {
|
|
31644
|
+
empty: "empty_output",
|
|
31645
|
+
"no output": "empty_output",
|
|
31646
|
+
stale: "empty_output",
|
|
31647
|
+
blocked: "blocked",
|
|
31648
|
+
waf: "blocked",
|
|
31649
|
+
filter: "blocked",
|
|
31650
|
+
firewall: "blocked",
|
|
31651
|
+
sanitized: "sanitized",
|
|
31652
|
+
sanitizer: "sanitized",
|
|
31653
|
+
neutralized: "sanitized",
|
|
31654
|
+
subagent: "subagent_failed",
|
|
31655
|
+
"sub-agent": "subagent_failed",
|
|
31656
|
+
delegate: "subagent_failed",
|
|
31657
|
+
model: "model_failed",
|
|
31658
|
+
"rate limit": "model_failed",
|
|
31659
|
+
ratelimit: "model_failed",
|
|
31660
|
+
quota: "model_failed",
|
|
31661
|
+
context: "model_failed",
|
|
31662
|
+
unconfirmed: "unconfirmed",
|
|
31663
|
+
"not confirmed": "unconfirmed",
|
|
31664
|
+
low: "low_severity",
|
|
31665
|
+
"low severity": "low_severity"
|
|
31666
|
+
};
|
|
31667
|
+
const key = signal.toLowerCase().trim();
|
|
31668
|
+
const norm = ALIASES[key] ?? key.replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
|
|
31669
|
+
const match = data.modes.find((m) => m.id === norm || norm.includes(m.id) || m.id.includes(norm));
|
|
31670
|
+
if (!match)
|
|
31671
|
+
return { found: false, signal, suggestions: data.modes.map((m) => m.id) };
|
|
31672
|
+
return { found: true, mode: match.id, signal: match.signal, actions: match.actions };
|
|
31673
|
+
}
|
|
31627
31674
|
|
|
31628
31675
|
// src/active.ts
|
|
31629
31676
|
var TIMEOUT_MS2 = 20000;
|
|
@@ -53385,9 +53432,8 @@ function createServer() {
|
|
|
53385
53432
|
name: "blitzstrike",
|
|
53386
53433
|
version: "1.0.0"
|
|
53387
53434
|
}, {
|
|
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" +
|
|
53389
|
-
` + "
|
|
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."
|
|
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
|
|
53436
|
+
` + "- 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
53437
|
});
|
|
53392
53438
|
server.registerTool("blitz_scan", {
|
|
53393
53439
|
title: "BLITZ scan",
|
|
@@ -53883,6 +53929,22 @@ ${statusLine}` : statusLine },
|
|
|
53883
53929
|
}, async ({ defense }) => {
|
|
53884
53930
|
return { content: [{ type: "text", text: JSON.stringify(bypassLookup(defense)) }] };
|
|
53885
53931
|
});
|
|
53932
|
+
server.registerTool("chain_links", {
|
|
53933
|
+
title: "Chain-to-chain composition",
|
|
53934
|
+
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.",
|
|
53935
|
+
inputSchema: {}
|
|
53936
|
+
}, async () => {
|
|
53937
|
+
return { content: [{ type: "text", text: JSON.stringify(chainLinks()) }] };
|
|
53938
|
+
});
|
|
53939
|
+
server.registerTool("retry_guidance", {
|
|
53940
|
+
title: "Failure recovery guidance",
|
|
53941
|
+
description: "INTEL: return structured recovery actions for a failure mode instead of giving up. Pass a signal (empty output, blocked, sanitized, subagent failed, model failed/rate-limit, unconfirmed, low severity) and get concrete next actions (reload-mcp, escalate detector, bypass_lookup, challenge sanitizer, re-delegate, fall back model, chain_links).",
|
|
53942
|
+
inputSchema: {
|
|
53943
|
+
signal: string2().optional().describe("Failure signal: empty output / blocked / sanitized / subagent failed / model failed / unconfirmed / low severity. Omit to list all modes.")
|
|
53944
|
+
}
|
|
53945
|
+
}, async ({ signal }) => {
|
|
53946
|
+
return { content: [{ type: "text", text: JSON.stringify(retryGuidance(signal)) }] };
|
|
53947
|
+
});
|
|
53886
53948
|
server.registerTool("read_payload", {
|
|
53887
53949
|
title: "Read a payload collection",
|
|
53888
53950
|
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
|
|
1
|
+
# Blitz Strike — Autonomous Security Auditing (LLM-Driven)
|
|
2
2
|
|
|
3
|
-
Blitz Strike
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
27
|
+
The LLM drives a cycle, guided by three coordinated layers:
|
|
94
28
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
100
|
-
|
|
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
|
-
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
##
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
- `
|
|
56
|
+
- `run_enterprise_benchmark` / `coverage_matrix` — measure detection quality and coverage.
|
|
57
57
|
|
|
58
58
|
## Memory
|
|
59
59
|
|