The vulnerability is a Server-Side Request Forgery (SSRF) caused by insufficient validation of user-provided URLs in several components of ZITADEL. The application made outgoing HTTP requests to URLs supplied for HTTP notification webhooks, OIDC back-channel logouts, and SAML metadata fetching. The existing denylist mechanism was found to be inadequate and could be bypassed using techniques like DNS rebinding, HTTP redirects, and protocol downgrades (HTTPS to HTTP).
The patch addresses this vulnerability by introducing a new, centralized, and hardened HTTP client. This client is configured with a comprehensive denylist of local and private network ranges, and it is designed to prevent common bypass techniques. Specifically, it disallows HTTPS-to-HTTP redirects, limits the number of redirects, and performs DNS resolution checks against the denylist to counter DNS rebinding attacks.
The fix involved a significant refactoring to replace all instances of direct HTTP requests in the vulnerable components with calls through this new secure client. The identified vulnerable functions are the primary entry points in the code that initiated these unsafe outbound requests based on user input. By analyzing the patch, we can see the old denylist parameters being removed and the new httpClient being passed into all affected functions, thereby ensuring all outgoing traffic is subject to the new, stricter security controls.