feat(arsenal): subdomain takeover detection built-in (#134)
* feat(arsenal): add subdomain-takeover classifier + fingerprint table Pure, I/O-free detection logic split into src/arsenal/takeover.ts so it is fully unit-testable without DNS or network: - TAKEOVER_FINGERPRINTS: curated CNAME + unclaimed-resource-body signatures for 15 high-frequency services (S3, GitHub Pages, Heroku, Azure, Fastly, Shopify, Netlify, ...) - classifySubdomainTakeover(): conservative verdict (confirmed / potential / none) driven by a dangling CNAME and/or a service body fingerprint; no cross-service false matches - renderTakeoverReport(): human-readable output block * feat(arsenal): register subdomain_takeover_check built-in + bump tool count 108->109 - New keyless, self-contained built-in tool 'subdomain_takeover_check' (recon): resolves the CNAME, checks whether the target still resolves (dangling), fetches the live body via the scope-gated targetFetch, and classifies via classifySubdomainTakeover. Emits a real finding. - Added to the Recon operator's default toolkit so the swarm can reach it (operator-toolkits coverage invariant). - Bumped the advertised arsenal size 108 -> 109 in lockstep across the count-honesty test, README, and verify-claims (73 adapters + 36 built-in). * test(arsenal): cover subdomain_takeover_check (classifier matrix + mocked DNS/fetch e2e) - classifySubdomainTakeover decision matrix: confirmed via body fingerprint, confirmed via dangling nxdomain-prone CNAME, potential (known service, no confirmation), potential (dangling unknown), none (no CNAME / resolves clean), and no cross-service false matching - renderTakeoverReport output shape - end-to-end handler test with DNS + fetch mocked, driving the confirmed S3 path
This commit is contained in:
7 files changed
+374
-5
No files matched your search
@@ -165,7 +165,7 @@ check('VERIFY gate implemented', /VERIFY gate|never appeared in tool output/.tes
|
||||
check('REFLECT gate implemented', /REFLECT gate/.test(bench), 'forced mid-run pivot');
|
||||
|
||||
// ── CLAIM 4: capability breadth ─────────────────────────────────────────────
|
||||
console.log('\nCLAIM 4 — capability: 108 tools, 8-operator kill-chain');
|
||||
console.log('\nCLAIM 4 — capability: 109 tools, 8-operator kill-chain');
|
||||
// DISTINCT tools = external-binary adapters (catalog.ts TOOL_ADAPTERS id:) + custom
|
||||
// built-in/external tools (index.ts top-level name:). NOT a name:/id: regex count
|
||||
// (that double-counts each tool's id+name AND every parameter name).
|
||||
|
||||
Reference in new issue
Block a user