Podatność w projekcie flask-boilerplate umożliwia przejęcie konta użytkownika poprzez manipulację funkcją resetowania hasła. Brak konfiguracji SERVER_NAME powoduje, że link resetujący hasło jest generowany na podstawie nagłówka HTTP Host, który atakujący może kontrolować.
▸ Pokaż oryginał (EN)
flask-boilerplate through a170e7c allows account takeover via the password reset feature because SERVER_NAME is not configured and thus a reset depends on the Host HTTP header.
Aplikacja flask-boilerplate nie definiuje zmiennej SERVER_NAME, przez co podczas generowania linku do resetowania hasła opiera się wyłącznie na wartości nagłówka HTTP Host dostarczonego w żądaniu. Atakujący inicjuje żądanie resetu hasła dla wybranego konta, jednocześnie podmieniając nagłówek Host na adres serwera pod swoją kontrolą. W efekcie ofiara otrzymuje wiadomość e-mail z linkiem prowadzącym do serwera atakującego, który może przechwycić token resetujący hasło (CWE-640: Weak Password Recovery Mechanism for Forgotten Password).
Atakujący może przejąć pełną kontrolę nad dowolnym kontem użytkownika poprzez przechwycenie tokenu resetowania hasła, uzyskując tym samym dostęp do jego danych i uprawnień w aplikacji.
Należy skonfigurować zmienną SERVER_NAME w ustawieniach aplikacji Flask, aby generowanie linków nie opierało się na nagłówku HTTP Host. Należy zastosować patche dostępne u producenta zgodnie z referencjami.
flask-boilerplate w wersji do a170e7c włącznie (commit a170e7c na repozytorium MaxHalford/flask-boilerplate)
Dowód koncepcji (PoC) jest publicznie dostępny pod adresem wskazanym w referencjach (gist.github.com/BrookeYangRui). Podatność dotyczy konkretnego commitu a170e7c w repozytorium GitHub.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H