Summary
In Istio ambient mode, istiod resolves an IP-addressed waypoint's owning service by (network, IP) with no namespace in the lookup key. The EDS shim uses krt.FetchOne over the ServicesByAddress index; when two services share the same address, it panics with "FetchOne found for more than 1 item" on a krt goroutine and takes istiod down. A ServiceEntry with spec.addresses set to a waypoint's ClusterIP — in any namespace — creates this collision and istiod crash-loops until the ServiceEntry is deleted. A tenant with permission to create ServiceEntry resources in their own namespace can cross namespace boundaries to crash istiod for the entire mesh.
Impact
A low-privilege tenant who has create on ServiceEntry resources in their own namespace can cause istiod to crash and enter a crash-loop by creating a single ServiceEntry whose spec.addresses matches the ClusterIP of an IP-addressed waypoint in another namespace. Config distribution and certificate rotation stall mesh-wide for the duration of the outage. The denial of service persists until a cluster administrator deletes the offending ServiceEntry. This vulnerability affects only deployments running Istio in ambient mode with IP-addressed waypoints; hostname-addressed waypoints (the default) are not affected.
Detection
Monitor istiod logs for panic messages containing "FetchOne found for more than 1 item". If istiod is restarting repeatedly while ambient mode is enabled, investigate ServiceEntry resources across all namespaces for entries whose spec.addresses overlap with waypoint ClusterIPs. Run the following to list all ServiceEntry resources and their addresses for comparison against waypoint ClusterIPs:
kubectl get serviceentry --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}/{.metadata.name}: {.spec.addresses}{"\n"}{end}'
Mitigation
Upgrade Istio to 1.29.9, 1.30.6, or 1.31.2. If an immediate upgrade is not possible, apply one of the following workarounds: delete the colliding ServiceEntry; restrict who may create ServiceEntry resources using RBAC; or avoid IP-addressed waypoints by relying on hostname-addressed waypoints, which istiod resolves by name rather than by IP and are not vulnerable to this collision.