Sono confuso su come implementare la funzionalità di reimpostazione della password. Sto testando un'applicazione Web con due ruoli: amministratore e utente normale. Solo gli amministratori possono utilizzare la funzionalità di reimpostazione della password (non ha MFLAC).
Questa funzione trova un utente e carica una vista con i dati di base, ad esempio "TEST_USER" con l'e-mail "[email protected]". I campi non hanno l'attributo "readonly", quindi possono essere modificati dall'amministratore. Quando l'utente fa clic sul pulsante "Ripristina", l'applicazione invia un'email a "TEST_USER" con un URL ( https://host.com/resetPassword.aspx?token=TOKEN
).
Il link carica una pagina con due campi, "nuova password" e "verifica nuova password". Qui ho cambiato la password e completato il processo.
Se un utente malintenzionato modifica il valore nel campo "e-mail" ed entra in "[email protected]", l'applicazione invierà il link all'attaccante, consentendo così all'utente malintenzionato di modificare la password. È importante ricordare che questa funzione è suscettibile a CSRF perché non ha un token .
Quindi penso che questa sia una vulnerabilità perché un utente malintenzionato o un amministratore può modificare l'e-mail e reimpostare la password per qualsiasi utente senza che se ne accorga. Utilizzando CSRF, un utente malintenzionato può inviare un URL dannoso che reimposta la password a un amministratore.
Quindi penso che questo non sia un modo corretto per implementare questa funzionalità perché ho sentito che una buona pratica è l'invio di un solo token all'indirizzo email.
Penso che il modo corretto per farlo sarebbe:
- Assicurati che l'indirizzo e-mail appartenga all'utente la cui password è stata ripristinata.
- Dovresti inviare solo un token anziché un URL.
- Nella pagina
ResetPassword.aspx
incolla il token. - Verifica l'utente con domande sulla sicurezza.
- Consenti all'utente di inserire "nuova password" e "verifica nuova password"
Questa è una vulnerabilità? È questo il modo corretto per implementare questa funzionalità?