Выход из системы не истечет срок действия токенов сеанса

Недавно мы протестировали наше приложение Laravel 5.6 на проникновение, и одной из отмеченных проблем была неправильная установка срока действия при выходе из системы. Черта AuthenticatesUsers вызывает метод недействительности сеанса, который в основном сбрасывает данные сеанса и регенерирует идентификатор, но не устанавливает для него срок действия.

Согласно отчету, если злоумышленник сможет получить действительный токен сеанса, он сможет захватить учетную запись пострадавшего пользователя. Выход пользователя из системы не аннулирует сеанс злоумышленника.

Любые указатели здесь будут очень полезны.

Спасибо

/**
 * Log the user out of the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function logout(Request $request)
{
    $this->guard()->logout();

    $request->session()->invalidate();

    return redirect('/');
}

person aliasunknown    schedule 11.02.2019    source источник


Ответы (1)


В Laravel 5.6 для этой цели добавлен метод Auth::logoutOtherDevices():

https://laravel.com/docs/5.7/authentication#invalidating-sessions-on-other-devices https://laracasts.com/series/whats-new-in-laravel-5-6/episodes/7 https://github.com/laravel/framework/issues/16311

person Travis Britz    schedule 11.02.2019
comment
Но это происходит на том же устройстве, поэтому не уверен, что это поможет. Функциональность выхода из системы в порядке и сама по себе, проблема заключается в том, что время истечения срока действия не устанавливается при выходе из системы. - person aliasunknown; 12.02.2019
comment
Разве основная проблема не в том, что злоумышленник, получивший сеанс, не будет признан недействительным? Auth::logoutOtherDevices() сделает недействительными все другие сеансы, кроме текущего, что решает эту проблему. Использование кнопки выхода для завершения всех других сеансов не является типичным поведением, например. если вы выйдете из gmail на компьютере библиотеки, вы не ожидаете, что ваш ноутбук также выйдет из системы. - person Travis Britz; 12.02.2019
comment
Поправьте меня, если я ошибаюсь, но если у злоумышленника тот же токен сеанса, что и у фактического пользователя, и даже если фактический пользователь вышел из системы, не означает ли это, что токен сеанса все еще можно использовать повторно, поскольку он не имеет установлен срок годности? - person aliasunknown; 12.02.2019
comment
Если только я не неправильно истолковал код, который читаю, я почти уверен, что выход из того же сеанса, который злоумышленник украл, сделает этот сеанс недействительным, например, если бы он посредником печенье. Возможно, сбивает с толку формулировка отчета вашего пентестера, потому что, если злоумышленник входит в систему в другом браузере, у него есть собственная сессия, отдельная от той, из которой вы только что вышли. Вот где Auth::logoutOtherDevices() сделает эти сеансы недействительными — у одного пользователя может быть несколько активных сеансов. - person Travis Britz; 12.02.2019
comment
На самом деле я думал так же, как вы упомянули, о аннулировании того же сеанса для злоумышленника. Но пентестер смог реплицировать запрос с выходом из сеанса пользователя. Не знаю, как они это сделали (или какие инструменты они использовали). Единственные подсказки, которые я получил от этих парней, это обратиться к owasp.org/index.php/ . - person aliasunknown; 12.02.2019
comment
Я не знаю, что вам сказать, я просто копался в фреймворке и, насколько я могу судить, он удаляет токен сеанса при выходе из системы. Возможно, вы захотите попросить их дать некоторые разъяснения. - person Travis Britz; 12.02.2019