Skip to main content
HIGH7.7GHSA-635j-qv98-9275
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H
Affected projects
istio
Disclosed
Last updated

Affected versions

ProjectVulnerable range
istio.io/istio>= 1.31.0, < 1.31.4
istio.io/istio>= 1.30.0, < 1.30.8

Patched versions

ProjectFixed in
istio.io/istio1.31.4
istio.io/istio1.30.8

References

Summary​

istiod serves debug information over XDS on port 15012 using the type istio.io/debug (used by istioctl x internal-debug). In parseAndValidateDebugRequest (pilot/pkg/xds/debuggen.go), the resource name is passed to url.Parse and the error is ignored, so a name that fails to parse — for example %zz, http://[::1, or one containing a control character — leaves the parsed URL nil. The subsequent field access on the nil URL causes a panic. The panic is not recovered on the XDS stream and the istiod process exits. Because the crash occurs before the namespace allowlist check, the caller only needs a valid mesh identity: a workload certificate or a service account token with audience istio-ca, which any user who can create a pod can obtain.

Impact​

A single malformed XDS debug request causes istiod to exit and restart. If the request is repeated — for example by a client script or by a pod restart loop — istiod enters CrashLoopBackOff. During the outage, the entire mesh receives no configuration or endpoint updates, no certificates are issued for new workloads, and failing admission webhooks may block new pod scheduling. If the outage extends beyond the workload certificate lifetime, mTLS between existing workloads begins to fail. Any user who can create a pod in any namespace on a default Istio install can trigger this condition.

Detection​

Look for unexpected istiod process restarts or CrashLoopBackOff in the istio-system namespace (kubectl get pods -n istio-system). istiod logs will show a nil pointer dereference panic immediately before the crash. Correlate istiod restarts with XDS connections from unexpected clients on port 15012. In affected environments, the crash is reproducible by running istioctl x internal-debug '%zz' from any context with a mesh identity.

Mitigation​

Upgrade to Istio 1.31.4 (for 1.31.x deployments) or 1.30.8 (for 1.30.x deployments), which contain the fix for the unhandled url.Parse error in parseAndValidateDebugRequest.

No configuration workaround is available. As a compensating control, restrict who can create pods and service account tokens in the cluster, which limits the pool of identities that can reach the istiod XDS debug endpoint. Restarting istiod recovers it until the malformed request is repeated.

References​