Miggo Logo

CVE-2025-32962:
Flask-AppBuilder open redirect vulnerability using HTTP host injection

4.3

CVSS Score
3.1

Basic Information

EPSS Score
0.07885%
Published
5/16/2025
Updated
5/16/2025
KEV Status
No
Technology
TechnologyPython

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N
Package NameEcosystemVulnerable VersionsFirst Patched Version
flask-appbuilderpip< 4.6.24.6.2

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability lies in how Flask-AppBuilder handles redirects when a list of safe redirect hosts is not explicitly configured. The commit provided (32eedbbb5cb483a3e782c5f2732de4a6a650d9b6) renames the configuration variable used to specify these safe hosts from SAFE_REDIRECT_HOSTS to FAB_SAFE_REDIRECT_HOSTS. The core logic for checking safe redirects resides in the is_safe_redirect_url function within flask_appbuilder/utils/base.py. This function retrieves the list of safe hosts using current_app.config.get("FAB_SAFE_REDIRECT_HOSTS", []). Crucially, if this list is empty (i.e., not configured), it falls back to safe_hosts = [urlparse(request.host_url).netloc]. The vulnerability arises because request.host_url can be influenced by the HTTP Host header. If an attacker manipulates this header, request.host_url will reflect the attacker-controlled domain. is_safe_redirect_url would then consider this malicious domain as a trusted host, thereby allowing an open redirect. The patch itself is a step in hardening by renaming and emphasizing the configuration, but the function is_safe_redirect_url is where the flawed check (in the absence of configuration) occurs, making it the central point of the vulnerability.

Vulnerable functions

Only Mi**o us*rs **n s** t*is s**tion

WAF Protection Rules

WAF Rule

### Imp**t *l*sk-*pp*uil**r prior to *.*.* woul* *llow *or * m*li*ious un*ut**nti**t** **tor to p*r*orm *n op*n r**ir**t *y m*nipul*tin* t** *ost *****r in *TTP r*qu*sts. ### P*t***s *l*sk-*pp*uil**r *.*.* intro*u*** t** `***_S***_R**IR**T_*OSTS` *

Reasoning

T** vuln*r**ility li*s in *ow *l*sk-*pp*uil**r **n*l*s r**ir**ts w**n * list o* s*** r**ir**t *osts is not *xpli*itly *on*i*ur**. T** *ommit provi*** (****************************************) r*n*m*s t** *on*i*ur*tion v*ri**l* us** to sp**i*y t**s*