
CVE-2023-49438 - Vulnerabilidade de Redirecionamento Aberto em Flask-Security-Too

Uma vulnerabilidade de redirecionamento aberto no pacote Python Flask-Security-Too <=versão 5.3.2 permite que atacantes redirecionem usuários desavisados para sites maliciosos por meio de uma URL manipulada, abusando do parâmetro ?next nas rotas /login e /register.
O Flask-Security-Too contém lógica para validar se a URL especificada no parâmetro next é relativa ou possui a mesma localização de rede da URL solicitante. Isso existe na tentativa de prevenir redirecionamentos abertos.
O pacote Python Flask-Security-Too foi anteriormente considerado vulnerável a um bypass da lógica de validação existente, e a versão 4.1.0 corrigiu os exemplos anteriormente conhecidos, como https://example/login?next=\\\github.com
No entanto, foi descoberta uma solução alternativa devido à forma como os navegadores web normalizam barras em URLs, o que torna o pacote vulnerável até a versão <=5.3.2.
https://example/login?next=/\github.com
https://example/login?next=\/github.com
Foi observado anteriormente em CVE-2021-32618 que "se o Werkzeug for usado (o que é muito comum em aplicações Flask) como camada WSGI, por padrão ele SEMPRE garante que o cabeçalho Location seja absoluto - tornando assim este vetor de ataque ineficaz".
No entanto, com Werkzeug >=2.1.0, a configuração autocorrect_location_header foi alterada para False - o que significa que os cabeçalhos Location em redirecionamentos são relativos por padrão. Assim, esse problema pode afetar aplicações que anteriormente não eram afetadas, se estiverem usando Werkzeug >=2.1.0 como camada 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
Solução alternativa descoberta por Brandon T. Elliott, novembro de 2023