CVE-2026-55245: Bifrost's SSRF deny-list is incomplete: isPublicIP permits CGNAT, IPv6 6to4/NAT64, and site-local in FetchAndEncodeURL
isPublicIP in core/providers/utils/fetch.go — the SSRF deny-list that gates FetchAndEncodeURL — does not reject several routable address ranges that map onto internal infrastructure. Carrier-Grade NAT (100.64.0.0/10, RFC 6598), IPv6 6to4 (2002::/16), NAT64 (64:ff9b::/96 and 64:ff9b:1::/48), and deprecated IPv6 site-local (fec0::/10) are all classified as public and permitted. An attacker who controls a multimodal image/document URL in a Bedrock or Vertex request body can drive the gateway to fetch internal services it should not reach — including the cloud instance-metadata endpoint via the 6to4 / NAT64 embeddings of 169.254.169.254.
The rest of the fetch hardening is correct and is not part of this report: the dial-time LookupIP + pin to ips[0] closes the DNS-rebinding TOCTOU, CheckRedirect re-validates redirect targets, the scheme gate, the 25 MiB cap, and the 20 s timeout all work. This is purely a residual IP-classification gap in isPublicIP.
References
- github.com/advisories/GHSA-w98g-5w9p-p3rc
- github.com/maximhq/bifrost/commit/54ec431fc5255ff42c36420d88549477e0b33d89
- github.com/maximhq/bifrost/pull/4092
- github.com/maximhq/bifrost/releases/tag/core/v1.5.17
- github.com/maximhq/bifrost/security/advisories/GHSA-w98g-5w9p-p3rc
- nvd.nist.gov/vuln/detail/CVE-2026-55245
Code Behaviors & Features
Detect and mitigate CVE-2026-55245 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →