Skip to content

feat: deterministic-verification + parallel-swarm architecture - #170

Merged
shuvonsec merged 2 commits into
mainfrom
feat/xbow-killer-deterministic-verification
Oct 2, 2026
Merged

shuvonsec merged 2 commits into
mainfrom
feat/xbow-killer-deterministic-verification

Conversation

@shuvonsec

@shuvonsec shuvonsec commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Summary

Reworks the hunter around the XBOW architecture thesis: discovery and validation are separate systems, and no finding reaches a report without a deterministic, non-AI oracle confirming it against the live target. Benchmark on a canary target shows precision=1.0, recall=1.0, fp_rate=0.0, 0 unverified findings reaching report.

Note: this branch also carries other previously-uncommitted project work (phase docs, evidence/redaction store, scope hardening, MCP changes) because those changes are commingled in shared files (agent.py, brain.py, lead_board.py, scope_checker.py) and could not be cleanly separated at file level. The XBOW-killer work is the headline below.

Pillars

  1. Deterministic verifier library (tools/verifiers/) — one oracle per bug class (redirect, sensitive-file, auth-bypass, sqli error+timing, idor two-identity, oob ssrf/xxe/rce, dom-xss), each returning VerifyResult(confirmed, trace). No LLM, no confidence scores. REGISTRY + verify_finding dispatcher + CLI.
  2. Programmatic validator + hard report gate (tools/validate_core.py) — non-tty verify_finding_programmatic encoding the kill-signal / chain-required / Q8-identity tables as code. brain.write_report and hunt.py refuse any finding that isn't a verified validated_finding with linked evidence; agent._classify_obs now emits candidate leads, never direct findings.
  3. Parallel swarm (tools/swarm.py) — fcntl-locked + adjudicated lead board; coordinator fans leads out to ephemeral per-lead workers (ThreadPoolExecutor) with per-worker session + scope. Gated behind hunt.py --swarm (default off).
  4. LLM-attack skills — new skills/llm-redteam/ (canonical ASI01–ASI10 source of truth) and skills/agentic-app-audit/; llm_redteam corpus expanded (multi-turn, cross-lingual, cipher, Sneaky Bits token-smuggling); unified the previously-conflicting ASI tables; commands/llm-app-audit.md.
  5. Benchmark harness (tests/benchmark/) — FLAG{} canary vuln target for recall, hardened demo for precision, precision/recall/FP scorer, and tests/test_benchmark.py smoke test.

Testing

  • 885 passed across the full suite.
  • tests/test_benchmark.py: recall=1.0, fp_rate=0.0, precision=1.0 (TP=6, FN=0, FP=0, TN=5).

shuvonsec and others added 2 commits October 2, 2026 14:27
Separate discovery from validation so no finding reaches a report without a
deterministic, non-AI oracle confirming it against the live target.

- verifiers: tools/verifiers/ library (redirect, sensitive-file, auth-bypass,
  sqli error+timing, idor two-identity, oob ssrf/xxe/rce, dom-xss) each
  returning VerifyResult(confirmed, trace); REGISTRY + verify_finding dispatcher
- validator gate: tools/validate_core.py non-tty verify_finding_programmatic
  encoding kill-signal / chain-required / Q8-identity tables as code;
  validate.py --auto wrapper
- report gate: brain.write_report + hunt.py refuse any finding that is not a
  verified validated_finding with linked evidence; agent._classify_obs emits
  candidate leads, never direct findings
- swarm: fcntl-locked + adjudicated lead_board; tools/swarm.py coordinator fans
  leads out to ephemeral per-lead workers (ThreadPoolExecutor, per-worker
  session+scope); hunt.py --swarm flag
- llm skills: skills/llm-redteam + skills/agentic-app-audit; expanded
  llm_redteam corpus (multi-turn, cross-lingual, cipher, Sneaky Bits
  token-smuggling); unified ASI01-ASI10 canonical mapping; commands/llm-app-audit
- benchmark: tests/benchmark/ FLAG{} canary target + precision/recall/FP
  scorer; tests/test_benchmark.py smoke test (recall=1.0, fp_rate=0.0)
Resolve conflicts from the bughunter/ package restructure:
- Relocate new verifier/swarm/validate_core/evidence/redaction modules under bughunter/
- hunt.py: keep main's shell=False argv (command-injection fix) and pass
  SCOPE_ENFORCED via the environment instead of the shell string
- adapters.py: keep both scope-filter helpers and path-escape guards
- README: take main (supersedes the older sponsor block; keeps #169 contributors)
- Union .gitignore; keep plugin.json version 6.0.1; keep unified ASI table
- Fix test paths to bughunter/ layout and assert SCOPE_ENFORCED via env

Co-authored-by: Cursor <[email protected]>
@shuvonsec
shuvonsec merged commit 647a9ea into main Oct 2, 2026
3 checks passed
shuvonsec added a commit that referenced this pull request Oct 8, 2026
Separate discovery from validation so no finding reaches a report without a
deterministic, non-AI oracle confirming it against the live target.

- verifiers: tools/verifiers/ library (redirect, sensitive-file, auth-bypass,
  sqli error+timing, idor two-identity, oob ssrf/xxe/rce, dom-xss) each
  returning VerifyResult(confirmed, trace); REGISTRY + verify_finding dispatcher
- validator gate: tools/validate_core.py non-tty verify_finding_programmatic
  encoding kill-signal / chain-required / Q8-identity tables as code;
  validate.py --auto wrapper
- report gate: brain.write_report + hunt.py refuse any finding that is not a
  verified validated_finding with linked evidence; agent._classify_obs emits
  candidate leads, never direct findings
- swarm: fcntl-locked + adjudicated lead_board; tools/swarm.py coordinator fans
  leads out to ephemeral per-lead workers (ThreadPoolExecutor, per-worker
  session+scope); hunt.py --swarm flag
- llm skills: skills/llm-redteam + skills/agentic-app-audit; expanded
  llm_redteam corpus (multi-turn, cross-lingual, cipher, Sneaky Bits
  token-smuggling); unified ASI01-ASI10 canonical mapping; commands/llm-app-audit
- benchmark: tests/benchmark/ FLAG{} canary target + precision/recall/FP
  scorer; tests/test_benchmark.py smoke test (recall=1.0, fp_rate=0.0)

Co-authored-by: Cursor <[email protected]>
@shuvonsec
shuvonsec deleted the feat/xbow-killer-deterministic-verification branch October 8, 2026 10:29
shuvonsec added a commit that referenced this pull request Oct 8, 2026
Separate discovery from validation so no finding reaches a report without a
deterministic, non-AI oracle confirming it against the live target.

- verifiers: tools/verifiers/ library (redirect, sensitive-file, auth-bypass,
  sqli error+timing, idor two-identity, oob ssrf/xxe/rce, dom-xss) each
  returning VerifyResult(confirmed, trace); REGISTRY + verify_finding dispatcher
- validator gate: tools/validate_core.py non-tty verify_finding_programmatic
  encoding kill-signal / chain-required / Q8-identity tables as code;
  validate.py --auto wrapper
- report gate: brain.write_report + hunt.py refuse any finding that is not a
  verified validated_finding with linked evidence; agent._classify_obs emits
  candidate leads, never direct findings
- swarm: fcntl-locked + adjudicated lead_board; tools/swarm.py coordinator fans
  leads out to ephemeral per-lead workers (ThreadPoolExecutor, per-worker
  session+scope); hunt.py --swarm flag
- llm skills: skills/llm-redteam + skills/agentic-app-audit; expanded
  llm_redteam corpus (multi-turn, cross-lingual, cipher, Sneaky Bits
  token-smuggling); unified ASI01-ASI10 canonical mapping; commands/llm-app-audit
- benchmark: tests/benchmark/ FLAG{} canary target + precision/recall/FP
  scorer; tests/test_benchmark.py smoke test (recall=1.0, fp_rate=0.0)

Co-authored-by: Cursor <[email protected]>
letztek added a commit to letztek/claude-bug-bounty that referenced this pull request Oct 22, 2026
Upstream force-pushed again. A `backup/pre-ca-scrub-main` branch and the
commits "Remove token address" / "Remove unaffiliated token reference from
README" show they rewrote history to scrub the crypto contract address —
the same content this fork removed locally in c179bae.

The rewrite collapsed git's computed merge-base to an ancient 2026-04-05
commit, which made 57 files look like add/add conflicts. Synced instead
against aafa48f (the previous upstream tip, still an ancestor here) as a
virtual base: 107 files, +9858/-611, and only 8 real conflicts.

New upstream work absorbed:
- deterministic-verification + parallel-swarm architecture (awarexone#170)
- /verify report gate, prove-or-suppress (awarexone#156)
- /dashboard local web Hunt Dashboard (awarexone#143)
- command-injection fix for awarexone#153 + SkillsLLM scan findings (awarexone#165)
- Groq fix, target normalization, security/portability hardening (awarexone#158)
- Requesty LLM provider (awarexone#159)
- install split-repo layout fix (awarexone#161), hackerone-mcp GraphQL fix (awarexone#164),
  docs path fix (awarexone#163), _dep_hint fallback fix (awarexone#162)
- upstream dropped its sponsorship / Buy-Me-a-Coffee / contributors-wall /
  ADOPTERS blocks and fully scrubbed crypto from the README

Conflicts resolved (2 after rebasing on the virtual base):
- .gitignore: union — kept this fork's personal-hunt and packaging blocks,
  added upstream's .ctl/, desktop engine bundle, and memory/leads/.
- README.md: took upstream's restructure, which deletes the marketing and
  sponsorship block. Verified the merge did not re-introduce any crypto
  address and did not undo c179bae: 0 CA/BTC/SOL references, 0 Awarexone
  repo URLs, hero still on the local assets/cli-banner.png.

Also rewrote the README contact footer, which upstream's new content
restored to AwareXone addresses, to credit upstream as the original
project and point fork matters at this repo's issues.

Preserved: asset-attribution skill + /attribute, recon_to_json.py and its
RECON_* schemas, vuln_scanner.sh WAF-evasion, bypass_403.sh soft-block
analyzer, and this fork's structurally sound web2-vuln-classes/SKILL.md
(274 balanced fences — upstream's copy is still corrupted at 271).

Co-Authored-By: Claude Opus 5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant