@integsec/agentic-pentest-proxy 0.2.5 → 0.2.6

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.
Files changed (146) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +250 -54
  3. package/dist/bin/integsec-agentic-pentest-manifest.d.ts +3 -0
  4. package/dist/bin/integsec-agentic-pentest-manifest.d.ts.map +1 -0
  5. package/dist/bin/integsec-agentic-pentest-manifest.js +180 -0
  6. package/dist/bin/integsec-agentic-pentest-manifest.js.map +1 -0
  7. package/dist/bin/integsec-agentic-pentest-proxy.d.ts +1 -1
  8. package/dist/bin/integsec-agentic-pentest-proxy.d.ts.map +1 -1
  9. package/dist/bin/integsec-agentic-pentest-proxy.js +8 -4
  10. package/dist/bin/integsec-agentic-pentest-proxy.js.map +1 -1
  11. package/dist/src/audit/azure-monitor.d.ts +2 -2
  12. package/dist/src/audit/azure-monitor.d.ts.map +1 -1
  13. package/dist/src/audit/azure-monitor.js +8 -5
  14. package/dist/src/audit/azure-monitor.js.map +1 -1
  15. package/dist/src/audit/cloudwatch.d.ts.map +1 -1
  16. package/dist/src/audit/cloudwatch.js.map +1 -1
  17. package/dist/src/audit/gcp-logging.d.ts.map +1 -1
  18. package/dist/src/audit/gcp-logging.js +4 -6
  19. package/dist/src/audit/gcp-logging.js.map +1 -1
  20. package/dist/src/audit/index.d.ts +7 -0
  21. package/dist/src/audit/index.d.ts.map +1 -1
  22. package/dist/src/audit/index.js +11 -1
  23. package/dist/src/audit/index.js.map +1 -1
  24. package/dist/src/audit/local.d.ts.map +1 -1
  25. package/dist/src/audit/local.js +2 -1
  26. package/dist/src/audit/local.js.map +1 -1
  27. package/dist/src/builder/dry-run.d.ts +12 -0
  28. package/dist/src/builder/dry-run.d.ts.map +1 -0
  29. package/dist/src/builder/dry-run.js +103 -0
  30. package/dist/src/builder/dry-run.js.map +1 -0
  31. package/dist/src/builder/manifest-writer.d.ts +7 -0
  32. package/dist/src/builder/manifest-writer.d.ts.map +1 -0
  33. package/dist/src/builder/manifest-writer.js +17 -0
  34. package/dist/src/builder/manifest-writer.js.map +1 -0
  35. package/dist/src/builder/review-display.d.ts +10 -0
  36. package/dist/src/builder/review-display.d.ts.map +1 -0
  37. package/dist/src/builder/review-display.js +55 -0
  38. package/dist/src/builder/review-display.js.map +1 -0
  39. package/dist/src/builder/smart-validator.d.ts +39 -0
  40. package/dist/src/builder/smart-validator.d.ts.map +1 -0
  41. package/dist/src/builder/smart-validator.js +157 -0
  42. package/dist/src/builder/smart-validator.js.map +1 -0
  43. package/dist/src/builder/steps/domains.d.ts +10 -0
  44. package/dist/src/builder/steps/domains.d.ts.map +1 -0
  45. package/dist/src/builder/steps/domains.js +71 -0
  46. package/dist/src/builder/steps/domains.js.map +1 -0
  47. package/dist/src/builder/steps/engagement-info.d.ts +17 -0
  48. package/dist/src/builder/steps/engagement-info.d.ts.map +1 -0
  49. package/dist/src/builder/steps/engagement-info.js +49 -0
  50. package/dist/src/builder/steps/engagement-info.js.map +1 -0
  51. package/dist/src/builder/steps/engagement-window.d.ts +15 -0
  52. package/dist/src/builder/steps/engagement-window.d.ts.map +1 -0
  53. package/dist/src/builder/steps/engagement-window.js +57 -0
  54. package/dist/src/builder/steps/engagement-window.js.map +1 -0
  55. package/dist/src/builder/steps/exclusions.d.ts +13 -0
  56. package/dist/src/builder/steps/exclusions.d.ts.map +1 -0
  57. package/dist/src/builder/steps/exclusions.js +57 -0
  58. package/dist/src/builder/steps/exclusions.js.map +1 -0
  59. package/dist/src/builder/steps/ip-ranges.d.ts +10 -0
  60. package/dist/src/builder/steps/ip-ranges.d.ts.map +1 -0
  61. package/dist/src/builder/steps/ip-ranges.js +64 -0
  62. package/dist/src/builder/steps/ip-ranges.js.map +1 -0
  63. package/dist/src/builder/steps/review.d.ts +10 -0
  64. package/dist/src/builder/steps/review.d.ts.map +1 -0
  65. package/dist/src/builder/steps/review.js +29 -0
  66. package/dist/src/builder/steps/review.js.map +1 -0
  67. package/dist/src/builder/steps/techniques.d.ts +13 -0
  68. package/dist/src/builder/steps/techniques.d.ts.map +1 -0
  69. package/dist/src/builder/steps/techniques.js +68 -0
  70. package/dist/src/builder/steps/techniques.js.map +1 -0
  71. package/dist/src/builder/steps/urls-and-cloud.d.ts +15 -0
  72. package/dist/src/builder/steps/urls-and-cloud.d.ts.map +1 -0
  73. package/dist/src/builder/steps/urls-and-cloud.js +53 -0
  74. package/dist/src/builder/steps/urls-and-cloud.js.map +1 -0
  75. package/dist/src/builder/web/api.d.ts +9 -0
  76. package/dist/src/builder/web/api.d.ts.map +1 -0
  77. package/dist/src/builder/web/api.js +40 -0
  78. package/dist/src/builder/web/api.js.map +1 -0
  79. package/dist/src/builder/web/client-form.html +222 -0
  80. package/dist/src/builder/web/server.d.ts +14 -0
  81. package/dist/src/builder/web/server.d.ts.map +1 -0
  82. package/dist/src/builder/web/server.js +85 -0
  83. package/dist/src/builder/web/server.js.map +1 -0
  84. package/dist/src/builder/wizard.d.ts +9 -0
  85. package/dist/src/builder/wizard.d.ts.map +1 -0
  86. package/dist/src/builder/wizard.js +49 -0
  87. package/dist/src/builder/wizard.js.map +1 -0
  88. package/dist/src/config.d.ts +11 -1
  89. package/dist/src/config.d.ts.map +1 -1
  90. package/dist/src/config.js +15 -2
  91. package/dist/src/config.js.map +1 -1
  92. package/dist/src/dns-resolver.d.ts +10 -1
  93. package/dist/src/dns-resolver.d.ts.map +1 -1
  94. package/dist/src/dns-resolver.js +41 -3
  95. package/dist/src/dns-resolver.js.map +1 -1
  96. package/dist/src/extractor.d.ts +12 -0
  97. package/dist/src/extractor.d.ts.map +1 -1
  98. package/dist/src/extractor.js +386 -0
  99. package/dist/src/extractor.js.map +1 -1
  100. package/dist/src/index.d.ts +1 -1
  101. package/dist/src/index.js +1 -1
  102. package/dist/src/ip-matcher.d.ts +23 -0
  103. package/dist/src/ip-matcher.d.ts.map +1 -1
  104. package/dist/src/ip-matcher.js +96 -23
  105. package/dist/src/ip-matcher.js.map +1 -1
  106. package/dist/src/manifest-schema.d.ts +12 -62
  107. package/dist/src/manifest-schema.d.ts.map +1 -1
  108. package/dist/src/manifest.d.ts +6 -0
  109. package/dist/src/manifest.d.ts.map +1 -1
  110. package/dist/src/manifest.js +21 -6
  111. package/dist/src/manifest.js.map +1 -1
  112. package/dist/src/proxy.d.ts +19 -4
  113. package/dist/src/proxy.d.ts.map +1 -1
  114. package/dist/src/proxy.js +111 -33
  115. package/dist/src/proxy.js.map +1 -1
  116. package/dist/src/safe-filename.d.ts +3 -0
  117. package/dist/src/safe-filename.d.ts.map +1 -0
  118. package/dist/src/safe-filename.js +8 -0
  119. package/dist/src/safe-filename.js.map +1 -0
  120. package/dist/src/sanitizer.d.ts.map +1 -1
  121. package/dist/src/sanitizer.js +36 -10
  122. package/dist/src/sanitizer.js.map +1 -1
  123. package/dist/src/technique-checker.d.ts +14 -0
  124. package/dist/src/technique-checker.d.ts.map +1 -1
  125. package/dist/src/technique-checker.js +123 -2
  126. package/dist/src/technique-checker.js.map +1 -1
  127. package/dist/src/transports/http.d.ts +6 -2
  128. package/dist/src/transports/http.d.ts.map +1 -1
  129. package/dist/src/transports/http.js +101 -13
  130. package/dist/src/transports/http.js.map +1 -1
  131. package/dist/src/transports/sse.d.ts +1 -1
  132. package/dist/src/transports/sse.d.ts.map +1 -1
  133. package/dist/src/transports/sse.js +28 -18
  134. package/dist/src/transports/sse.js.map +1 -1
  135. package/dist/src/transports/stdio.d.ts +2 -2
  136. package/dist/src/transports/stdio.d.ts.map +1 -1
  137. package/dist/src/transports/stdio.js +77 -48
  138. package/dist/src/transports/stdio.js.map +1 -1
  139. package/dist/src/types.d.ts +1 -1
  140. package/dist/src/types.d.ts.map +1 -1
  141. package/dist/src/validator.d.ts +19 -28
  142. package/dist/src/validator.d.ts.map +1 -1
  143. package/dist/src/validator.js +315 -113
  144. package/dist/src/validator.js.map +1 -1
  145. package/examples/claude-desktop-burp-config.json +6 -6
  146. package/package.json +21 -11
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf;oDACgD;IAChD,YAAY,EAAE,OAAO,CAAC;CACvB;AAqLD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,gBAAgB,GAAG,IAAI,CAmBzB"}
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf;oDACgD;IAChD,YAAY,EAAE,OAAO,CAAC;CACvB;AA6gBD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,gBAAgB,EAAE,CA6DpB;AAMD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,gBAAgB,GAAG,IAAI,CAmBzB"}
@@ -10,6 +10,7 @@
10
10
  * Every code path here has a corresponding unit test — do not modify without
11
11
  * updating tests/unit/extractor.test.ts.
12
12
  */
13
+ import { isIP } from "node:net";
13
14
  const TOOL_MAPPINGS = [
14
15
  { match: "nmap", params: ["target", "host", "hosts"] },
15
16
  { match: "nmap_scan", params: ["target", "host", "hosts"] },
@@ -42,6 +43,151 @@ const TOOL_MAPPINGS = [
42
43
  { match: "send_http2_request", params: ["targetHostname"] },
43
44
  { match: "create_repeater_tab", params: ["targetHostname"] },
44
45
  { match: "send_to_intruder", params: ["targetHostname"] },
46
+ // Subdomain enumeration & asset discovery
47
+ { match: "amass", params: ["domain", "target"] },
48
+ // "list" is intentionally absent: it can be a file path ("subdomains.txt"),
49
+ // which is not a DNS-resolvable target. Use domain/target for scope checks.
50
+ { match: "alterx", params: ["domain", "target"] },
51
+ { match: "assetfinder", params: ["domain", "target"] },
52
+ { match: "subfinder", params: ["domain", "target"] },
53
+ { match: "shuffledns", params: ["domain", "target"] },
54
+ // DNS & certificate tools
55
+ { match: "dnsx", params: ["domain", "host", "target"] },
56
+ { match: "cero", params: ["target", "host", "domain"] },
57
+ // "query" (wildcard patterns like "%.example.com") is kept last because it
58
+ // is not a valid DNS hostname and would cause resolution to fail.
59
+ { match: "crtsh", params: ["domain", "target", "query"] },
60
+ // HTTP probing & crawling
61
+ { match: "httpx", params: ["url", "target", "host"] },
62
+ { match: "katana", params: ["url", "target"] },
63
+ { match: "gowitness", params: ["url", "target"] },
64
+ // Port scanning
65
+ { match: "masscan", params: ["target", "host", "range"] },
66
+ // OSINT & passive recon
67
+ // "query" is intentionally last: Shodan/Censys/Fofa query strings like
68
+ // `ssl:"example.com"` are not DNS-resolvable hostnames. If only query is
69
+ // present the validator will deny the targetless call by default.
70
+ { match: "uncover", params: ["target", "domain", "query"] },
71
+ { match: "waybackurls", params: ["domain", "url", "target"] },
72
+ // Notification streaming
73
+ { match: "notify", params: ["target"] },
74
+ // Vulnerability & web-app scanners
75
+ { match: "arjun", params: ["url", "target"] },
76
+ { match: "smuggler", params: ["url", "host", "target"] },
77
+ { match: "wpscan", params: ["url", "target"] },
78
+ { match: "nessus", params: ["target", "host", "url"] },
79
+ { match: "dalfox", params: ["url", "target"] },
80
+ { match: "zap", params: ["url", "target"] },
81
+ { match: "burpsuite", params: ["url", "target", "host"] },
82
+ // Exploitation & credential tools
83
+ { match: "hydra", params: ["target", "host", "url"] },
84
+ // hashcat cracks hashes offline; target only applies if a network host is passed
85
+ { match: "hashcat", params: ["target"] },
86
+ // Cloud security auditing
87
+ { match: "prowler", params: ["target", "account"] },
88
+ { match: "scoutsuite", params: ["target", "account"] },
89
+ // Container & IaC security
90
+ // "image" is a container image name (not a network hostname), kept last
91
+ { match: "trivy", params: ["target", "url", "image"] },
92
+ { match: "checkov", params: ["target", "url"] },
93
+ // Kubernetes security
94
+ { match: "kube-hunter", params: ["target", "remote"] },
95
+ { match: "kubeaudit", params: ["target"] },
96
+ { match: "kube-bench", params: ["target", "node"] },
97
+ // OSINT & threat intelligence
98
+ // "query" last: Shodan query strings are not DNS hostnames
99
+ { match: "shodan", params: ["host", "target", "query"] },
100
+ { match: "virustotal", params: ["url", "domain", "target"] },
101
+ { match: "bloodhound", params: ["target", "domain"] },
102
+ // Nmap MCP Server — prefix wildcard catches all nmap_* tool variants
103
+ // (nmap and nmap_scan exact entries above take priority for those names)
104
+ { match: "nmap_*", params: ["targets", "target", "host"] },
105
+ // Hex Strike AI MCP — https://github.com/0x4m4/hexstrike-ai
106
+ { match: "gobuster_scan", params: ["url", "target"] },
107
+ { match: "nuclei_scan", params: ["target", "url"] },
108
+ { match: "sqlmap_scan", params: ["url", "target"] },
109
+ { match: "ffuf_scan", params: ["url", "target"] },
110
+ { match: "feroxbuster_scan", params: ["url", "target"] },
111
+ { match: "subfinder_scan", params: ["domain", "target"] },
112
+ { match: "rustscan_fast_scan", params: ["target"] },
113
+ { match: "katana_crawl", params: ["url", "target"] },
114
+ { match: "hydra_attack", params: ["target", "host"] },
115
+ // metasploit_run options={RHOST:...} is handled by nested extraction.
116
+ // Offline hashcat/Ghidra/radare2 calls need an explicit targetless policy.
117
+ // Kali Linux MCP — https://github.com/k3nn3dy-ai/kali-mcp
118
+ { match: "port_scan", params: ["target", "host"] },
119
+ { match: "dns_enum", params: ["domain", "target"] },
120
+ { match: "network_discovery", params: ["target"] },
121
+ { match: "subdomain_enum", params: ["target", "domain"] },
122
+ { match: "vulnerability_scan", params: ["target", "url"] },
123
+ { match: "web_enumeration", params: ["target", "url"] },
124
+ { match: "enum_shares", params: ["target"] },
125
+ { match: "ssl_analysis", params: ["target", "host", "url"] },
126
+ // payload_generate lhost / reverse_shell lhost are targetless by default.
127
+ // Shodan MCP (BurtTheCoder) — https://github.com/BurtTheCoder/mcp-shodan
128
+ { match: "ip_lookup", params: ["ip"] },
129
+ // shodan_search query strings are not DNS hostnames; proxy fails closed → BLOCKED_DNS_FAILED
130
+ { match: "shodan_search", params: ["query"] },
131
+ { match: "dns_lookup", params: ["hostnames"] },
132
+ { match: "reverse_dns_lookup", params: ["ips"] },
133
+ // cve_lookup / cpe_lookup / cves_by_product have no extractable network target.
134
+ // Shodan MCP (Vorota-ai) — hyphenated tool names
135
+ { match: "shodan-ip-lookup", params: ["ip"] },
136
+ // shodan-search query syntax not a DNS hostname → BLOCKED_DNS_FAILED
137
+ { match: "shodan-search", params: ["query"] },
138
+ { match: "shodan-dns-resolve", params: ["hostname"] },
139
+ { match: "shodan-dns-reverse", params: ["ip"] },
140
+ { match: "shodan-domain-info", params: ["domain"] },
141
+ { match: "shodan-honeypot-score", params: ["ip"] },
142
+ { match: "shodan-internetdb-lookup", params: ["ip"] },
143
+ // Burp Suite MCP — PortSwigger official scan initiation
144
+ { match: "start_scan", params: ["target_url", "url"] },
145
+ // WireMCP — https://github.com/0xKoda/WireMCP
146
+ { match: "check_ip_threats", params: ["ip"] },
147
+ // capture_packets / analyze_pcap / extract_credentials use an interface or file path.
148
+ // VirusTotal MCP — https://github.com/BurtTheCoder/mcp-virustotal
149
+ { match: "get_url_report", params: ["url"] },
150
+ { match: "get_ip_report", params: ["ip"] },
151
+ { match: "get_domain_report", params: ["domain"] },
152
+ { match: "submit_url", params: ["url"] },
153
+ { match: "get_url_relationship", params: ["url"] },
154
+ { match: "get_ip_relationship", params: ["ip"] },
155
+ { match: "get_domain_relationship", params: ["domain"] },
156
+ // get_hash_report / get_file_relationship / get_analysis_status have no network target.
157
+ // Awesome Kali MCP Servers — https://github.com/ccq1/awsome_kali_MCPServers
158
+ { match: "basic_scan", params: ["target", "targets"] },
159
+ { match: "intense_scan", params: ["target", "targets"] },
160
+ { match: "stealth_scan", params: ["target", "targets"] },
161
+ { match: "quick_scan", params: ["target", "targets"] },
162
+ // capture_live / analyze_pcap / extract_http use an interface or pcap file.
163
+ // Postman MCP Server — https://github.com/postmanlabs/postman-mcp-server
164
+ { match: "runRequest", params: ["url", "uri"] },
165
+ // createCollection / getCollections / runCollection etc. have no network target.
166
+ // Semgrep MCP (semgrep/mcp) — security_check / semgrep_scan / semgrep_scan_with_custom_rule
167
+ // scan local code paths; semgrep_findings queries the Semgrep cloud API with no
168
+ // user-specified host. None have an extractable network target.
169
+ // Gitleaks MCP — gitleaks_scan detects secrets in local git repos / file paths.
170
+ // Ghidra MCP (LaurieWired/GhidraMCP) — decompile_function and related tools operate on
171
+ // binaries loaded into Ghidra; no extractable network target.
172
+ // MobSF MCP (pullkitsan/mobsf-mcp-server) — scanFile accepts a local APK/IPA path.
173
+ // CrackMapExec MCP — AD/SMB network reconnaissance and exploitation
174
+ { match: "crackmapexec", params: ["target", "host", "dc"] },
175
+ // Acunetix MCP (MCPwnetix) — add_target embeds the URL inside a nested body dict;
176
+ // nested target fields are inspected; targetless add_target calls are denied.
177
+ // Direct acunetix alias for simple URL-based calls:
178
+ { match: "acunetix", params: ["url", "target"] },
179
+ // SSLScan MCP — TLS/SSL cipher and certificate analysis
180
+ { match: "sslscan", params: ["target", "host"] },
181
+ // HTTP security headers — Custom MCP
182
+ { match: "http_headers", params: ["url", "target"] },
183
+ { match: "check_http_headers", params: ["url", "target"] },
184
+ // Commix — Automated command injection exploitation MCP
185
+ { match: "commix", params: ["url", "target"] },
186
+ // Next.js CVE scanner — Custom MCP
187
+ { match: "nextjs_scan", params: ["url", "target"] },
188
+ { match: "nextjs_scanner", params: ["url", "target"] },
189
+ // Unified all-in-one security MCP
190
+ { match: "unified_scan", params: ["url", "target"] },
45
191
  ];
46
192
  /**
47
193
  * Fallback parameter names tried (in priority order) when the tool name does
@@ -161,6 +307,246 @@ function findMapping(toolName) {
161
307
  return null;
162
308
  }
163
309
  // ---------------------------------------------------------------------------
310
+ // Multi-target extraction (used by the validator)
311
+ // ---------------------------------------------------------------------------
312
+ /**
313
+ * Additional target-like parameter names checked on EVERY tool call (on top of
314
+ * the tool-specific mapping and FALLBACK_PARAMS). Scope enforcement must see
315
+ * every target a call carries, not just the first one.
316
+ */
317
+ const EXTRA_TARGET_PARAMS = [
318
+ "targets",
319
+ "hosts",
320
+ "hostname",
321
+ "hostnames",
322
+ "urls",
323
+ "domains",
324
+ "rhosts",
325
+ "ip",
326
+ "ips",
327
+ "ip_address",
328
+ "address",
329
+ "base_url",
330
+ "baseurl",
331
+ "endpoint",
332
+ "endpoint_url",
333
+ "server_url",
334
+ "target_host",
335
+ "target_ip",
336
+ "ipaddress",
337
+ "fqdn",
338
+ "destination_url",
339
+ "remote_host",
340
+ "remote",
341
+ ];
342
+ /**
343
+ * Parameters that hold non-hostname data (search queries, image names). They
344
+ * are only used when a mapped tool supplies nothing else, matching the
345
+ * single-target behaviour of extractTarget().
346
+ */
347
+ const LAST_RESORT_PARAMS = new Set(["query", "image"]);
348
+ /**
349
+ * Parameters that carry free-form command lines. Their contents are scanned
350
+ * for URLs, IPs, CIDRs and hostnames so that e.g.
351
+ * `execute_command {command: "nmap 8.8.8.8"}` cannot dodge the scope check.
352
+ */
353
+ const COMMAND_PARAMS = [
354
+ "command",
355
+ "cmd",
356
+ "command_line",
357
+ "commandline",
358
+ "cmdline",
359
+ "shell_command",
360
+ "args",
361
+ "extra_args",
362
+ "additional_args",
363
+ ];
364
+ /**
365
+ * File extensions that look like TLDs. Tokens ending in these inside command
366
+ * lines (e.g. "-oX out.xml") are treated as file names, not hostnames.
367
+ */
368
+ const FILE_EXTENSIONS = new Set([
369
+ "txt", "xml", "json", "csv", "html", "htm", "log", "nmap", "gnmap", "py",
370
+ "sh", "js", "ts", "md", "yaml", "yml", "conf", "cfg", "ini", "out", "pcap",
371
+ "pcapng", "lst", "list", "db", "sql", "zip", "gz", "tgz", "tar", "exe",
372
+ "dll", "bin", "php", "asp", "aspx", "jsp", "rb", "pl", "go", "java", "jar",
373
+ "war", "png", "jpg", "jpeg", "gif", "pdf", "doc", "docx", "xls", "xlsx",
374
+ "key", "pem", "crt", "cer", "ovpn", "kdbx", "hash", "hashes", "pot",
375
+ "rule", "rules", "dic", "dict", "nse", "lua", "ps1", "bat", "cmd", "toml",
376
+ ]);
377
+ const MAX_NESTING_DEPTH = 4;
378
+ const HOSTNAME_RE = /^(?=.{1,253}\.?$)(?:[a-z0-9_](?:[a-z0-9_-]{0,61}[a-z0-9_])?\.)+[a-z]{2,63}\.?$/i;
379
+ const IPV4ISH_RE = /^[\d*]{1,3}(?:[.\-,][\d*]{1,3}){1,}(?:\/\d{1,2})?$/;
380
+ const SCHEME_RE = /^[a-z][a-z0-9+.-]*:\/\//i;
381
+ /** Hostname of any scheme://host URL, or null. */
382
+ function hostOfAnyUrl(value) {
383
+ try {
384
+ let host = new URL(value).hostname;
385
+ if (host.startsWith("[") && host.endsWith("]")) {
386
+ host = host.slice(1, -1);
387
+ }
388
+ return host.length > 0 ? host : null;
389
+ }
390
+ catch {
391
+ return null;
392
+ }
393
+ }
394
+ /** Strip a trailing :port from "host:port" / "1.2.3.4:80" (not bare IPv6). */
395
+ function stripPort(value) {
396
+ const m = /^([^:]+):\d{1,5}$/.exec(value);
397
+ return m ? m[1] : value;
398
+ }
399
+ /**
400
+ * Split a structured parameter value (not a command line) into individual
401
+ * targets. URLs are reduced to their hostname; other strings are split on
402
+ * whitespace, commas and semicolons so "10.0.0.1, 8.8.8.8" yields both.
403
+ */
404
+ function targetsFromValue(value) {
405
+ const trimmed = value.trim();
406
+ if (trimmed === "")
407
+ return [];
408
+ if (SCHEME_RE.test(trimmed)) {
409
+ const host = hostOfAnyUrl(trimmed);
410
+ // Unparseable URL — keep the raw value so the validator fails closed.
411
+ return [host ?? trimmed];
412
+ }
413
+ return trimmed
414
+ .split(/[\s,;]+/)
415
+ .filter((t) => t.length > 0)
416
+ .map((t) => (SCHEME_RE.test(t) ? hostOfAnyUrl(t) ?? t : stripPort(t)));
417
+ }
418
+ /**
419
+ * Scan a free-form command line for network targets. Flags and file names
420
+ * are ignored; URLs, IPs, CIDRs, IP ranges and hostnames are returned.
421
+ */
422
+ function targetsFromCommand(command) {
423
+ const found = [];
424
+ for (const rawToken of command.split(/[\s"'`|&;<>()]+/)) {
425
+ if (!rawToken)
426
+ continue;
427
+ // "--url=https://x" / "target=host" → value part
428
+ let token = rawToken.includes("=") ? rawToken.slice(rawToken.indexOf("=") + 1) : rawToken;
429
+ if (!token || token.startsWith("-"))
430
+ continue;
431
+ if (SCHEME_RE.test(token)) {
432
+ const host = hostOfAnyUrl(token);
433
+ if (host)
434
+ found.push(host);
435
+ continue;
436
+ }
437
+ // ssh-style user@host
438
+ if (token.includes("@"))
439
+ token = token.slice(token.lastIndexOf("@") + 1);
440
+ // Paths are never targets on their own.
441
+ if (token.includes("\\") || (token.includes("/") && !IPV4ISH_RE.test(token) && !isIP(token.split("/")[0]))) {
442
+ continue;
443
+ }
444
+ const hostPart = stripPort(token);
445
+ if (isIP(hostPart) !== 0 || isIP(hostPart.split("/")[0]) !== 0) {
446
+ found.push(hostPart);
447
+ }
448
+ else if (IPV4ISH_RE.test(hostPart)) {
449
+ // nmap-style ranges such as 10.0.0.1-50 or 10.0.*.1 — cannot be
450
+ // resolved, so passing them through makes the validator fail closed.
451
+ found.push(hostPart);
452
+ }
453
+ else if (HOSTNAME_RE.test(hostPart)) {
454
+ const tld = hostPart.replace(/\.$/, "").split(".").pop().toLowerCase();
455
+ if (!FILE_EXTENSIONS.has(tld))
456
+ found.push(hostPart);
457
+ }
458
+ }
459
+ return found;
460
+ }
461
+ /** Plain-object guard (arrays and null excluded). */
462
+ function isPlainObject(value) {
463
+ return typeof value === "object" && value !== null && !Array.isArray(value);
464
+ }
465
+ /** Flatten a parameter value into its string leaves. */
466
+ function stringLeaves(value) {
467
+ if (typeof value === "string")
468
+ return [value];
469
+ if (typeof value === "number")
470
+ return [String(value)];
471
+ if (Array.isArray(value))
472
+ return value.flatMap(stringLeaves);
473
+ return [];
474
+ }
475
+ /**
476
+ * Extract EVERY target from a tool call's parameters.
477
+ *
478
+ * Unlike extractTarget(), which returns only the first candidate, this walks
479
+ * all target-like parameters (tool-specific, fallback and extra names, matched
480
+ * case-insensitively), every element of array values, nested option objects
481
+ * (e.g. metasploit `options: {RHOSTS: ...}`) and free-form command strings.
482
+ * The validator requires ALL returned targets to be in scope.
483
+ *
484
+ * Returns an empty array when the call has no network target.
485
+ */
486
+ export function extractTargets(toolName, params) {
487
+ const knownParams = findMapping(toolName);
488
+ const usedFallback = knownParams === null;
489
+ const primary = new Set();
490
+ for (const name of [...(knownParams ?? []), ...FALLBACK_PARAMS, ...EXTRA_TARGET_PARAMS]) {
491
+ const lower = name.toLowerCase();
492
+ if (!LAST_RESORT_PARAMS.has(lower))
493
+ primary.add(lower);
494
+ }
495
+ const commandParams = new Set(COMMAND_PARAMS);
496
+ const results = [];
497
+ const seen = new Set();
498
+ const add = (target, source) => {
499
+ const key = target.toLowerCase();
500
+ if (seen.has(key))
501
+ return;
502
+ seen.add(key);
503
+ results.push({ target, source, usedFallback });
504
+ };
505
+ const walk = (obj, prefix, depth) => {
506
+ for (const [key, value] of Object.entries(obj)) {
507
+ const lower = key.toLowerCase();
508
+ const source = prefix ? `${prefix}.${key}` : key;
509
+ if (primary.has(lower)) {
510
+ for (const leaf of stringLeaves(value)) {
511
+ for (const t of targetsFromValue(leaf))
512
+ add(t, source);
513
+ }
514
+ }
515
+ else if (commandParams.has(lower)) {
516
+ for (const leaf of stringLeaves(value)) {
517
+ for (const t of targetsFromCommand(leaf))
518
+ add(t, source);
519
+ }
520
+ }
521
+ if (depth < MAX_NESTING_DEPTH) {
522
+ if (isPlainObject(value)) {
523
+ walk(value, source, depth + 1);
524
+ }
525
+ else if (Array.isArray(value)) {
526
+ value.forEach((item, i) => {
527
+ if (isPlainObject(item))
528
+ walk(item, `${source}[${i}]`, depth + 1);
529
+ });
530
+ }
531
+ }
532
+ }
533
+ };
534
+ walk(params, "", 0);
535
+ // Mapped last-resort params (e.g. crtsh "query") only when nothing else hit.
536
+ if (results.length === 0 && knownParams !== null) {
537
+ for (const name of knownParams) {
538
+ if (!LAST_RESORT_PARAMS.has(name.toLowerCase()) || !(name in params))
539
+ continue;
540
+ const resolved = resolveParamValue(params[name]);
541
+ if (resolved !== null) {
542
+ add(resolved, name);
543
+ break;
544
+ }
545
+ }
546
+ }
547
+ return results;
548
+ }
549
+ // ---------------------------------------------------------------------------
164
550
  // Public API
165
551
  // ---------------------------------------------------------------------------
166
552
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/extractor.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,5 @@ export { loadManifest } from "./manifest.js";
4
4
  export { loadConfig } from "./config.js";
5
5
  export { AuditLogger } from "./audit/index.js";
6
6
  export type { ScopeManifest, AuditEntry, ValidationResult, Decision } from "./types.js";
7
- export declare const VERSION = "0.1.0";
7
+ export declare const VERSION = "0.2.6";
8
8
  //# sourceMappingURL=index.d.ts.map
package/dist/src/index.js CHANGED
@@ -3,5 +3,5 @@ export { ScopeValidator } from "./validator.js";
3
3
  export { loadManifest } from "./manifest.js";
4
4
  export { loadConfig } from "./config.js";
5
5
  export { AuditLogger } from "./audit/index.js";
6
- export const VERSION = "0.1.0";
6
+ export const VERSION = "0.2.6";
7
7
  //# sourceMappingURL=index.js.map
@@ -28,6 +28,29 @@ export declare function isIpInAnyRange(ip: string, ranges: string[]): boolean;
28
28
  * Returns `false` for invalid inputs and for IPv6 addresses.
29
29
  */
30
30
  export declare function isRfc1918(ip: string): boolean;
31
+ /**
32
+ * Return true if `value` is a valid CIDR range (must contain a `/`).
33
+ */
34
+ export declare function isCidr(value: string): boolean;
35
+ /**
36
+ * Return the [first, last] address of a CIDR or bare IP, or null if invalid.
37
+ */
38
+ /**
39
+ * Return true if every address in `inner` (CIDR or bare IP) lies within
40
+ * `outer` (CIDR or bare IP). Returns false for invalid or mixed-family input.
41
+ */
42
+ export declare function isRangeWithin(inner: string, outer: string): boolean;
43
+ /**
44
+ * Return true if the two ranges (CIDRs or bare IPs) share at least one
45
+ * address. CIDR blocks are either nested or disjoint, so checking whether
46
+ * either range's first address falls in the other is sufficient.
47
+ */
48
+ export declare function rangesOverlap(a: string, b: string): boolean;
49
+ /**
50
+ * Return true if `ip` is loopback, link-local, unspecified or a cloud
51
+ * metadata endpoint.
52
+ */
53
+ export declare function isRestrictedIp(ip: string): boolean;
31
54
  /**
32
55
  * Return true if `ip` is a known cloud metadata endpoint.
33
56
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ip-matcher.d.ts","sourceRoot":"","sources":["../../src/ip-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuCH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAiB5D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAOpE;AAgBD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAS7C;AAYD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAKnD"}
1
+ {"version":3,"file":"ip-matcher.d.ts","sourceRoot":"","sources":["../../src/ip-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA6CH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAa5D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAOpE;AAgBD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAS7C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAS7C;AAED;;GAEG;AACH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAMnE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK3D;AAmBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAKlD;AAYD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAKnD"}