Vulnerabilidad

Se ha detectado que, al recuperar la contraseña, es posible realizar una denegación de servicio, enviando Email de recordatorio de contraseña, tantas veces como el atacante lo quiera, afectado al usuario. Colapsando su bandeja de entrada y el servidor de correo inundándolo de peticiones.

Solución:
Se recomienda aplicar un método anti-automatización, por lo que no es posible que un atacante pueda enviar más de 3 a 5 intentos de recuperación de contraseña en un corto período de tiempo.
La aplicación de un captcha es la técnica más recomendada para evitar que programas automatizados puedan llevar a cabo ataques de fuerza bruta. Un captcha, básicamente, trata de distinguir entre un ser humano y una máquina, ya que este último es mucho más rápido enviando solicitudes para tratar de iniciar sesión o enviar cualquier petición.
Otro método sería bloquear, por un período de tiempo aleatorio, una IP que está enviando una gran cantidad de peticiones de acceso o de recuperación de contraseña. Eso haría que el ataque pueda durar mucho más, por lo que puede cambiar el tiempo necesario para encontrar una sola cadena de caracteres desde días hasta meses o incluso años.
pull/2487/head
Rafa 9 years ago
parent 98b2660b45
commit 04c1a62c0f
  1. 29
      main/auth/lostPassword.php

@ -54,6 +54,35 @@ if ($reset && $userId) {
$form = new FormValidator('lost_password');
$form->addHeader($tool_name);
$form->addText('user', [get_lang('LoginOrEmailAddress'), get_lang('EnterEmailUserAndWellSendYouPassword')], true);
$captcha = api_get_setting('allow_captcha');
$allowCaptcha = $captcha === 'true';
if ($allowCaptcha) {
$ajax = api_get_path(WEB_AJAX_PATH).'form.ajax.php?a=get_captcha';
$options = array(
'width' => 220,
'height' => 90,
'callback' => $ajax.'&var='.basename(__FILE__, '.php'),
'sessionVar' => basename(__FILE__, '.php'),
'imageOptions' => array(
'font_size' => 20,
'font_path' => api_get_path(SYS_FONTS_PATH).'opensans/',
'font_file' => 'OpenSans-Regular.ttf',
//'output' => 'gif'
)
);
$captcha_question = $form->addElement('CAPTCHA_Image', 'captcha_question', '', $options);
$form->addElement('static', null, null, get_lang('ClickOnTheImageForANewOne'));
$form->addElement('text', 'captcha', get_lang('EnterTheLettersYouSee'), array('size' => 40));
$form->addRule('captcha', get_lang('EnterTheCharactersYouReadInTheImage'), 'required', null, 'client');
$form->addRule('captcha', get_lang('TheTextYouEnteredDoesNotMatchThePicture'), 'CAPTCHA', $captcha_question);
}
$form->addButtonSend(get_lang('Send'));
if ($form->validate()) {

Loading…
Cancel
Save