Fix #4555: Invalidate sessions for deleted users

Fix three exploits that allowed one to keep using their account after it was deleted:

* It was possible to use session cookies from another computer to login after you deleted your account.
* It was possible to use API keys to make API requests after you deleted your account.
* It was possible to request a password reset, delete your account, then use the password reset link
  to change your password and login to your deleted account.
This commit is contained in:
evazion
2022-11-06 14:21:48 -06:00
parent 6f08e1427b
commit 8bd60e41a1
5 changed files with 67 additions and 13 deletions

View File

@@ -48,6 +48,15 @@ class SessionsControllerTest < ActionDispatch::IntegrationTest
assert_response 403
end
should "not allow deleted users to login" do
@user.update!(is_deleted: true)
post session_path, params: { name: @user.name, password: "password" }
assert_response 401
assert_nil(nil, session[:user_id])
assert_equal(true, @user.user_events.failed_login.exists?)
end
should "not allow IP banned users to login" do
@ip_ban = create(:ip_ban, category: :full, ip_addr: "1.2.3.4")
post session_path, params: { name: @user.name, password: "password" }, headers: { REMOTE_ADDR: "1.2.3.4" }