
CVE-2023-49438 - Vulnérabilité de redirection ouverte dans Flask-Security-Too

Une vulnérabilité de redirection ouverte dans le package Python Flask-Security-Too <=version 5.3.2 permet à des attaquants de rediriger des utilisateurs méfiants vers des sites malveillants via une URL spécialement conçue en abusant du paramètre ?next sur les routes /login et /register.
Flask-Security-Too contient une logique permettant de valider que l'URL spécifiée dans le paramètre next est soit relative, soit possède la même localisation réseau que l'URL de la requête. Cette mesure est en place pour tenter de prévenir les redirections ouvertes.
Le package Python Flask-Security-Too a précédemment été jugé vulnérable à un contournement de la logique de validation en place, et la version 4.1.0 a corrigé les exemples précédemment connus tels que https://example/login?next=\\\github.com
Cependant, une solution de contournement a été découverte en raison de la manière dont les navigateurs web normalisent les barres obliques dans les URL, ce qui rend le package vulnérable jusqu'à la version <=5.3.2.
https://example/login?next=/\github.com
https://example/login?next=\/github.com
Il a été précédemment noté dans CVE-2021-32618 que « si Werkzeug est utilisé (ce qui est très courant avec les applications Flask) comme couche WSGI, il garantit par défaut TOUJOURS que l'en-tête Location est absolu - rendant ainsi ce vecteur d'attaque sans effet. »
Cependant, avec Werkzeug >=2.1.0, la configuration autocorrect_location_header a été modifiée à False - ce qui signifie que les en-têtes de localisation dans les redirections sont relatifs par défaut. Ainsi, ce problème peut affecter des applications qui n'étaient pas précédemment impactées, si elles utilisent Werkzeug >=2.1.0 comme couche WSGI.
pip install -U Flask-Security-Too
OU
app.config['SECURITY_REDIRECT_VALIDATE_MODE'] = "regex"
app.config['SECURITY_REDIRECT_VALIDATE_RE'] = r"^/{4,}|\\{3,}|[\s\000-\037][/\\]{2,}(?![/\\])|[/\\](https://github.com/brandon-t-elliott/cve-2023-49438/blob/HEAD/%5B%5E/%5C%5C%5D%7C/%5B%5E/%5C%5C%5D)*[/\\].*"
OU
@app.after_request
def fix_location_header(response):
response.autocorrect_location_header = True
return response
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-49438
https://nvd.nist.gov/vuln/detail/CVE-2023-49438
Solution de contournement découverte par Brandon T. Elliott, novembre 2023