forked from molecule-ai/molecule-core
Adds isSafeURL() + isPrivateOrMetadataIP() in mcp.go and wires the check into: - MCP delegate_task (sync path) — line 530 - MCP delegate_task_async (fire-and-forget) — line 602 - a2a_proxy resolveAgentURL() — line 391 Blocklist covers: RFC-1918 private (10/8, 172.16/12, 192.168/16), cloud metadata link-local (169.254/16), carrier-grade NAT (100.64/10), documentation ranges (192.0.2/24, 198.51.100/24, 203.0.113/24), loopback, unspecified, and link-local multicast. For hostnames, DNS is resolved and every returned IP is validated — blocks internal hostnames that resolve to private ranges. Closes: #1130 (F1083 — SSRF in A2A proxy and MCP bridge) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| cmd/server | ||
| internal | ||
| migrations | ||
| pkg/provisionhook | ||
| .gitignore | ||
| Dockerfile | ||
| Dockerfile.tenant | ||
| entrypoint-tenant.sh | ||
| go.mod | ||
| go.sum | ||