The _redirect_to_target() function in Gradio's OAuth flow accepts an unvalidated _target_url query parameter, allowing redirection to arbitrary external URLs. This affects the /logout and /login/callback endpoints on Gradio apps with OAuth enabled (i.e. apps running on Hugging Face Spaces with gr.LoginButton).
def _redirect_to_target(request, default_target="/"):
target = request.query_params.get("_target_url", default_target)
return RedirectResponse(target) # No validation
An attacker can craft a URL like https://my-space.hf.space/logout?_target_url=https://evil.com/phishing that redirects the user to an external site after logout. Because the URL originates from a trusted hf.space domain, users are more likely to trust the link.
Phishing — an attacker can use the trusted domain to redirect users to a malicious site. No direct data exposure or server-side impact.
The _target_url parameter is now sanitized to only use the path, query, and fragment, stripping any scheme or host.
{
"cwe_ids": [
"CWE-200",
"CWE-284",
"CWE-330",
"CWE-601"
],
"github_reviewed": true,
"github_reviewed_at": "2026-03-01T01:29:12Z",
"nvd_published_at": "2026-02-27T22:16:24Z",
"severity": "MODERATE"
}