mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-31 20:32:20 +03:00
Follow-up to the #3269 private-webhook opt-in. With the opt-in on, the private-host check was bypassed entirely, leaving cloud-metadata endpoints (169.254.169.254, metadata.google.internal, 100.100.100.200, link-local 169.254.0.0/16) reachable — the classic SSRF -> IAM-credential pivot — and the webhook test endpoint returned the upstream body, making it a content-exfiltration primitive against internal services. - outboundUrlGuard: add isCloudMetadataHost(); parseAndValidateWebhookUrl blocks those hosts UNCONDITIONALLY, even when private targets are opted in. - webhooks/[id]/test: redact responseBody for private targets (status + latency only). Regression test: tests/unit/webhook-metadata-guard-3269.test.ts (RED before, GREEN after); existing webhook SSRF/opt-in suites stay green (34/34).