Skip to content

Commit

Permalink
Fix account enumeration vulnerability on the forgot password page (#297)
Browse files Browse the repository at this point in the history
  • Loading branch information
ViliusS committed Jun 14, 2023
1 parent 3c23add commit da50a55
Show file tree
Hide file tree
Showing 11 changed files with 6 additions and 56 deletions.
23 changes: 0 additions & 23 deletions classes/Controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -368,29 +368,6 @@ protected function taskForgot()
return true;
}

if (!$user || !$user->exists()) {
$messages->add($language->translate(['PLUGIN_LOGIN.FORGOT_USERNAME_DOES_NOT_EXIST', $email]), 'error');
$this->setRedirect($this->login->getRoute('forgot') ?? '/');

return true;
}

if (empty($user->email)) {
$messages->add($language->translate(['PLUGIN_LOGIN.FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL', $email]),
'error');
$this->setRedirect($this->login->getRoute('forgot') ?? '/');

return true;
}

if (empty($user->password) && empty($user->hashed_password)) {
$messages->add($language->translate(['PLUGIN_LOGIN.FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD', $email]),
'error');
$this->setRedirect($this->login->getRoute('forgot') ?? '/');

return true;
}

$from = $config->get('plugins.email.from');

if (empty($from)) {
Expand Down
3 changes: 0 additions & 3 deletions languages/de.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ PLUGIN_LOGIN:
RESET_INVALID_LINK: "Es wurde ein ungültiger Link zum Zurücksetzen verwendet. Bitte erneut versuchen."
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Die Anweisungen zum Zurücksetzen Ihres Passworts wurden per E-Mail gesendet."
FORGOT_FAILED_TO_EMAIL: "Das Versenden der Anweisung per E-Mail ist fehlgeschlagen. Bitte später erneut versuchen."
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Das Passwort für %s kann nicht zurückgesetzt werden. Es ist keine E-Mail-Adresse hinterlegt."
FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Das Passwort für %s kann nicht zurückgesetzt werden. Diese E-Mail ist mit einem Remote-Account verknüpft."
FORGOT_USERNAME_DOES_NOT_EXIST: "Der Benutzer mit dem Benutzername <b>%s</b> existiert nicht."
FORGOT_EMAIL_NOT_CONFIGURED: "Das Passwort kann nicht zurückgesetzt werden, da die Website ist nicht zum Versenden von E-Mails konfiguriert."
FORGOT_EMAIL_SUBJECT: "Passwort zurückzusetzen für %s"
FORGOT_EMAIL_BODY: "<h1>Passwort Zurücksetzen</h1><p>Hallo %1$s,</p><p>Es wurde ein Anfrage auf <b>%4$s</b> gestellt, um Ihr Passwort zu ändern.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Klicken Sie hier, um Ihr Passwort zurückzusetzen</a><br /><br /></p><p>Alternativ kopieren Sie die folgende URL in die Adresszeile Ihres Browsers:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />Mit freundlichen Grüßen,<br /><br />%3$s</p>"
Expand Down
5 changes: 1 addition & 4 deletions languages/en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,8 @@ PLUGIN_LOGIN:
RESET_LINK_EXPIRED: "Reset link has expired, please try again"
RESET_PASSWORD_RESET: "Password has been reset"
RESET_INVALID_LINK: "Invalid reset link used, please try again"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Instructions to reset your password have been sent via email"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "If an account exists, instructions on resetting your password have been sent via email"
FORGOT_FAILED_TO_EMAIL: "Failed to email instructions, please try again later"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Cannot reset password for %s, no email address is set"
FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Cannot reset password for %s, this email is associated with a remote account"
FORGOT_USERNAME_DOES_NOT_EXIST: "User with username <b>%s</b> does not exist"
FORGOT_EMAIL_NOT_CONFIGURED: "Cannot reset password. This site is not configured to send emails"
FORGOT_EMAIL_SUBJECT: "%s Password Reset Request"
FORGOT_EMAIL_BODY: "<h1>Password Reset</h1><p>Dear %1$s,</p><p>A request was made on <b>%4$s</b> to reset your password.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Click this to reset your password</a><br /><br /></p><p>Alternatively, copy the following URL into your browser's address bar:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />Kind regards,<br /><br />%3$s</p>"
Expand Down
4 changes: 1 addition & 3 deletions languages/es.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,8 @@ PLUGIN_LOGIN:
RESET_LINK_EXPIRED: "El enlace para la restauración ha caducado, inténtelo de nuevo."
RESET_PASSWORD_RESET: "La contraseña ha sido restaurada"
RESET_INVALID_LINK: "Ha utilizado un enlace de restauración inválido, inténtelo de nuevo."
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Instructions to reset your password have been sent via email"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "If an account exists, instructions on resetting your password have been sent via email"
FORGOT_FAILED_TO_EMAIL: "No se ha podido enviar el email con instrucciones, inténtelo de nuevo."
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "No se puede restaurar la contraseña para %s, no hay dirección de email."
FORGOT_USERNAME_DOES_NOT_EXIST: "No existe ningún usuario con el nombre <b>%s</b>."
FORGOT_EMAIL_NOT_CONFIGURED: "No se puede restaurar la contraseña. Este sitio no está configurado para enviar emails."
FORGOT_EMAIL_SUBJECT: "%s solicitud de restauración de contraseña"
FORGOT_EMAIL_BODY: "<h1>Restauración de contraseña</h1><p>Estimado/a %1$s,</p><p>Se ha realizado una petición de restauración de contraseña en <b>%4$s</b>.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Pulse aquí para restaurar su contraseña</a><br /><br /></p><p>Como alternativa puede copiar la siguiente URL en la barra de direcciones de su navegador:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />Saludos cordiales,<br /><br />%3$s</p>"
Expand Down
2 changes: 0 additions & 2 deletions languages/fr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ PLUGIN_LOGIN:
RESET_INVALID_LINK: "Le lien de réinitialisation utilisé n’est pas valide, veuillez réessayer"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Les instructions pour la réinitialisation de votre mot de passe ont été envoyées par e-mail"
FORGOT_FAILED_TO_EMAIL: "Impossible d’envoyer les instructions, veuillez réessayer ultérieurement"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Impossible de réinitialiser le mot de passe pour %s, aucune adresse e-mail n’a été paramétrée"
FORGOT_USERNAME_DOES_NOT_EXIST: "L’utilisateur avec le nom d’utilisateur <b>%s</b> n’existe pas"
FORGOT_EMAIL_NOT_CONFIGURED: "Impossible de réinitialiser le mot de passe. Ce site n’est pas configuré pour envoyer des e-mails"
FORGOT_EMAIL_SUBJECT: "Demande de réinitialisation de mot de passe %s"
FORGOT_EMAIL_BODY: "<h1>Réinitialisation de mot de passe</h1><p>%1$s,</p><p>Une demande a été faite sur <b>%4$s</b> pour la réinitialisation de votre mot de passe.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Cliquez ici pour réinitialiser votre mot de passe</a><br /><br /></p><p>Vous pouvez également copier l’URL suivante dans la barre d’adresse de votre navigateur :</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />Cordialement,<br /><br />%3$s</p>"
Expand Down
7 changes: 2 additions & 5 deletions languages/lt.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,9 @@ PLUGIN_LOGIN:
RESET_LINK_EXPIRED: "Atstatymo nuoroda nebegalioja, bandykite dar kartą"
RESET_PASSWORD_RESET: "Slaptažodis atstatytas"
RESET_INVALID_LINK: "Panaudota neteisinga atstatymo nuoroda, bandykite dar kartą"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Slaptažodžio atstatymo instrukcijos buvo išsiųstos el. paštu"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Jeigu vartotojo paskyra egzistuoja, slaptažodžio atstatymo instrukcijos buvo išsiųstos el. paštu"
FORGOT_FAILED_TO_EMAIL: "Instrukcijų išsiuntimas nepavyko, bandykite dar kartą"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Negalima atstatyti %s slaptažodžio, nenurodytas el. paštas"
FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Negalima atstatyti %s slaptažodžio, šis el. paštas susietas su nuotoline paskyra"
FORGOT_USERNAME_DOES_NOT_EXIST: "Vartotojas vardu <b>%s</b> neegzistuoja"
FORGOT_EMAIL_NOT_CONFIGURED: "Negalima tastatyti slaptažodžio. Ši svetainė nenustatyta siųsti el. laiškus"
FORGOT_EMAIL_NOT_CONFIGURED: "Negalima atstatyti slaptažodžio. Ši svetainė nenustatyta siųsti el. laiškus"
FORGOT_EMAIL_SUBJECT: "%s slaptažodžio atstatymo užklausa"
FORGOT_EMAIL_BODY: "<h1>Slaptažodis atstatytas</h1><p>Miela(s) %1$s,</p><p><b>%4$s</b> buvo gauta užklausa jūsų slaptažodžio atstatymui.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Paspauskite čia norėdami atstatyti slaptažodį</a><br /><br /></p><p>Taip pat galite nukopijuoti sekančią nuorodą į savo naršyklės adreso juostą:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />Linkėjimai,<br /><br />%3$s</p>"
SESSION: "&ldquo;Prisiminti mane&rdquo;-sesija"
Expand Down
2 changes: 0 additions & 2 deletions languages/no.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ PLUGIN_LOGIN:
RESET_INVALID_LINK: "Ugyldig ilbakestillingslenke, vennligst prøv igjen"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Instruksjoner for å tilbakestille passordet ditt er sendt via e-post"
FORGOT_FAILED_TO_EMAIL: "Kunne ikke sende instruksjoner, prøv igjen senere"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Kan ikke tilbakestille passord for %s, ingen e-postadresse er angitt"
FORGOT_USERNAME_DOES_NOT_EXIST: "Bruker med brukernavn <b>%s</ b> eksisterer ikke"
FORGOT_EMAIL_NOT_CONFIGURED: "Kan ikke tilbakestille passord. Dette nettstedet er ikke konfigurert til å sende e-post"
FORGOT_EMAIL_SUBJECT: "Forespørsel om tilbakestilling av passord for %s"
FORGOT_EMAIL_BODY: "<h1>Tilbekestilling av passord</h1><p>%1$s,</p><p>En forespørsel om tilbakestilling av passord ble gjort på <b>%4$s</b>.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Klikk her for å tilbakestille passordet ditt</a><br /><br /></p><p>Du kan også kopiere følgende nettadresse til nettleserens adressefelt:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />Vennlig hilsen,<br /><br />%3$s</p>"
Expand Down
3 changes: 0 additions & 3 deletions languages/pt-BR.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ PLUGIN_LOGIN:
RESET_INVALID_LINK: "Link de recuperação de senha inválido, tente novamente!"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "As instruções para recuperar sua senha foram enviadas para seu e-mail!"
FORGOT_FAILED_TO_EMAIL: "Falha ao tentar recuperar a senha, tente novamente mais tarde!"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Não é possível recuperar a senha para %s, nenhum e-mail inserido!"
FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Não é possível recuperar a senha para %s, este e-mail já está em uso!"
FORGOT_USERNAME_DOES_NOT_EXIST: "O usuário <b>%s</b> não existe!"
FORGOT_EMAIL_NOT_CONFIGURED: "Não é possível recuperar a senha. Este site não está configurado para enviar e-mails!"
FORGOT_EMAIL_SUBJECT: "%s requer recuperação da senha"
FORGOT_EMAIL_BODY: "<h1>Recuperação da Senha</h1><p>Olá %1$s,</p><p>Foi feito um pedido no <b>%4$s</b> para recuperar sua senha.</p><p><br /><a href=\"%2$s\" class=\"btn btn-primary\">Clique aqui para recuperar sua senha</a><br /><br /></p><p>Como alternativa, copie a seguinte URL na barra de endereços do navegador:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />Atenciosamente,<br /><br />%3$s</p>"
Expand Down
5 changes: 1 addition & 4 deletions languages/ru.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,8 @@ PLUGIN_LOGIN:
RESET_LINK_EXPIRED: "Время ссылки для сброса истекло, повторите попытку"
RESET_PASSWORD_RESET: "Пароль был сброшен"
RESET_INVALID_LINK: "Неверная ссылка сброса, повторите попытку"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Инструкции по сбросу пароля были отправлены по электронной почте"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Eсли имя пользователя существует, инструкции по сбросу пароля были отправлены по электронной почте"
FORGOT_FAILED_TO_EMAIL: "Не удалось отправить инструкции по электронной почте, повторите попытку позже"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Не удается сбросить пароль для %s, адресс электронной почты не установлен"
FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Невозможно сбросить пароль для %s, этот email связан с удаленной учетной записью"
FORGOT_USERNAME_DOES_NOT_EXIST: "Пользователь с именем <b>%s</b> не существует"
FORGOT_EMAIL_NOT_CONFIGURED: "Невозможно сбросить пароль. Этот сайт не настроен для отправки писем"
FORGOT_EMAIL_SUBJECT: "%s Запрос на сброс пароля"
FORGOT_EMAIL_BODY: "<h1>Восстановление пароля</h1><p>Уважаемый %1$s,</p><p>Был сделан запрос для сброса пароля от <b>%4$s</b>.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Нажмите, чтобы сбросить пароль</a><br /><br /></p><p>Или скопируйте следующий URL-адрес в адресную строку браузера:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />С уважением,<br /><br />%3$s</p>"
Expand Down
5 changes: 1 addition & 4 deletions languages/uk.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,8 @@ PLUGIN_LOGIN:
RESET_LINK_EXPIRED: "Час посилання для скидання минув, спробуйте ще раз"
RESET_PASSWORD_RESET: "Пароль був скинутий"
RESET_INVALID_LINK: "Невірне посилання скидання, спробуйте ще раз"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Інструкції щодо скидання пароля були надіслані по електронній пошті"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "Якщо ім'я користувача існує, iнструкції щодо скидання пароля були надіслані по електронній пошті"
FORGOT_FAILED_TO_EMAIL: "Не вдалося надіслати інструкції електронною поштою, повторіть спробу пізніше"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "Не вдається скинути пароль для %s, адреса електронної пошти не встановлена"
FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "Неможливо скинути пароль для %s, цей email пов'язаний з віддаленим обліковим записом"
FORGOT_USERNAME_DOES_NOT_EXIST: "Користувач з ім'ям <b>%s </b> не існує"
FORGOT_EMAIL_NOT_CONFIGURED: "Неможливо скинути пароль. Цей сайт не налаштований для надіслання листів"
FORGOT_EMAIL_SUBJECT: "%s Запит на скидання пароля"
FORGOT_EMAIL_BODY: "<h1>Відновлення паролю</h1><p>Шановний %1$s,</p><p>Був зроблений запит для скидання пароля від <b>%4$s</b>.</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">Нажмите, чтобы сбросить пароль</a><br /><br /></p><p>Или скопируйте следующий URL-адрес в адресную строку браузера:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />С уважением,<br /><br />%3$s</p>"
Expand Down
3 changes: 0 additions & 3 deletions languages/zh.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ PLUGIN_LOGIN:
RESET_INVALID_LINK: "重置链接已经使用,请重试"
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: "重置密码指引已经发送到您的邮箱。"
FORGOT_FAILED_TO_EMAIL: "发送指引邮件失败,请稍后重试。"
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: "因尚未设置邮箱,无法为 %s 重置密码"
FORGOT_CANNOT_RESET_EMAIL_NO_PASSWORD: "因邮箱关联到一个外部帐号,无法为 %s 重置密码。"
FORGOT_USERNAME_DOES_NOT_EXIST: "用户 <b>%s</b> 不存在。"
FORGOT_EMAIL_NOT_CONFIGURED: "无法重置密码,本站点尚未配置邮件系统。"
FORGOT_EMAIL_SUBJECT: "%s 的密码重置请求"
FORGOT_EMAIL_BODY: "<h1>密码充值</h1><p>尊敬的 %1$s,</p><p>我们收到一个重置您的 <b>%4$s</b> 密码的请求。</p><p><br /><a href=\"%2$s\" class=\"btn-primary\">点击这里进行重置密码</a><br /><br /></p><p>另外,您也可以复制下面的链接到浏览器地址栏中访问:</p> <p class=\"word-break\"><a href=\"%2$s\">%2$s</a></p> <p><br />此致<br /><br />%3$s</p>"
Expand Down

0 comments on commit da50a55

Please sign in to comment.