From 038d530565bc64729706bbd9afad275699be459d Mon Sep 17 00:00:00 2001 From: Imre Farkas Date: Mon, 25 Feb 2019 14:52:40 +0100 Subject: [PATCH] Remove ability to revoke active session Session ID is used as a parameter for the revoke session endpoint but it should never be included in the HTML as an attacker could obtain it via XSS. --- .../profiles/active_sessions_controller.rb | 9 ------ .../active_sessions/_active_session.html.haml | 6 ---- .../57534_filter_impersonated_sessions.yml | 6 ++++ doc/user/profile/active_sessions.md | 8 +----- doc/user/profile/img/active_sessions_list.png | Bin 22266 -> 19360 bytes .../features/profiles/active_sessions_spec.rb | 27 ------------------ 6 files changed, 7 insertions(+), 49 deletions(-) create mode 100644 changelogs/unreleased/57534_filter_impersonated_sessions.yml diff --git a/app/controllers/profiles/active_sessions_controller.rb b/app/controllers/profiles/active_sessions_controller.rb index 6cf7a120449..c473023cacb 100644 --- a/app/controllers/profiles/active_sessions_controller.rb +++ b/app/controllers/profiles/active_sessions_controller.rb @@ -4,13 +4,4 @@ class Profiles::ActiveSessionsController < Profiles::ApplicationController def index @sessions = ActiveSession.list(current_user).reject(&:is_impersonated) end - - def destroy - ActiveSession.destroy(current_user, params[:id]) - - respond_to do |format| - format.html { redirect_to profile_active_sessions_url, status: :found } - format.js { head :ok } - end - end end diff --git a/app/views/profiles/active_sessions/_active_session.html.haml b/app/views/profiles/active_sessions/_active_session.html.haml index 23ef31a0c85..2bf514d72a5 100644 --- a/app/views/profiles/active_sessions/_active_session.html.haml +++ b/app/views/profiles/active_sessions/_active_session.html.haml @@ -23,9 +23,3 @@ %strong Signed in on = l(active_session.created_at, format: :short) - - - unless is_current_session - .float-right - = link_to profile_active_session_path(active_session.session_id), data: { confirm: 'Are you sure? The device will be signed out of GitLab.' }, method: :delete, class: "btn btn-danger prepend-left-10" do - %span.sr-only Revoke - Revoke diff --git a/changelogs/unreleased/57534_filter_impersonated_sessions.yml b/changelogs/unreleased/57534_filter_impersonated_sessions.yml new file mode 100644 index 00000000000..80aea0ab1bc --- /dev/null +++ b/changelogs/unreleased/57534_filter_impersonated_sessions.yml @@ -0,0 +1,6 @@ +--- +title: Do not display impersonated sessions under active sessions and remove ability + to revoke session +merge_request: +author: +type: security diff --git a/doc/user/profile/active_sessions.md b/doc/user/profile/active_sessions.md index 5119c0e30d0..28e3f4904a9 100644 --- a/doc/user/profile/active_sessions.md +++ b/doc/user/profile/active_sessions.md @@ -4,7 +4,7 @@ > in GitLab 10.8. GitLab lists all devices that have logged into your account. This allows you to -review the sessions and revoke any of it that you don't recognize. +review the sessions. ## Listing all active sessions @@ -12,9 +12,3 @@ review the sessions and revoke any of it that you don't recognize. 1. Navigate to the **Active Sessions** tab. ![Active sessions list](img/active_sessions_list.png) - -## Revoking a session - -1. Navigate to your [profile's](#profile-settings) **Settings > Active Sessions**. -1. Click on **Revoke** besides a session. The current session cannot be - revoked, as this would sign you out of GitLab. diff --git a/doc/user/profile/img/active_sessions_list.png b/doc/user/profile/img/active_sessions_list.png index 5d94dca69ccfded5543a6d1fc7413230faab0018..1e242ac47103c93d3f857db3ade6a05525317cb9 100644 GIT binary patch literal 19360 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 literal 22266 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

F(ION_eC5!ROnpJLyE z@ia^D@oZ+!IVxzt(Pa_Y2r&CrP7kkbBK*JzwG+)l8ixBYi9}Eq)n~J)xJPE3riT@W ztEoQA}`^h$R(?f%_cj$CYLv9Lvw3XOH(F2cZ4O=SqzXG+;M2URmt$0cwpSeg(vOYG`x3HiE?&h!2Dog`Phj}+r-kZ zYe;Yl?=!)*Dr>CD|22A9HMDs`CS56O`|P#R%L2in!GpFe3GQ8#*yV`60O_!i0S{Nn z^C&;956@Zz^y%%6jo|A}S)wu@-oI4=pw6F;$c^6S!+pFuM8d)R8S_dAu&>RYai(R= zVTG=s7M>7z7#UF`n!YVld`BxlI)Ff;6tGQM%TLmz{pB@E=&gK1j&rejpLA8*Fk!i8!UZr@9=Ze6}5nxRi%|!?*TXZtiP7mN;u6 znOq_^WXPh`;hbkwY?w>0^7>GqHI@nQ%DDm#nE_X6)7@V>(1+CPySCZy9RFDJ86y%? z#(y`vlpLP-z%TyutxJt(YAz%&JRH6wSYaXf0m2vIXcHX?=@5!^M_g{Dy%h*Uc((Ki z(2tL=aGoTf6dd~dyh=u zHdb*ESQs5$jkN4wk)Z8hf zD_%kqe5dwb7)A)Yw&t0RGdcO!%Pwrb+-~l#(I$N!_HjZA7l?LRG8Yh}6x~M=rGAPJ z6XpadTln!q5>MN!+2CqVOExSr}8z7t9N%!ifEEZO;CP%=^ zTQ~wYY?6V3Gg9pfB>=o<{>rWk;$`vCej`RZ>Rt}e&~uizVB91>+Cgx+PZn>9DQ?ro zvE&UCD-%@Yt;9(aUs&u)OBa`#jh?$d_fiZl&+Mi2q5i$9%P50;&faRWD&v&>IvSJt z7)>ZySGw#an?0w$9Aq;%>tas7HPyZP;7{*YdyxQy4KJ<l)R9M?j&8ha(-cFX&F_tT!)#Bh(c%8%UK z@??&fpKVkL9ldp&p{t%~UtD>cq#%LF(K_>7vbwsDy0o7lpc@ybROu?P8O9pZAn;q2lW$Gi14 zW*@k3vB~tP_GVqLpFSO--F}E(WYee!mTL)b+KRSJaUS2v$XAa#Qs)E%!y43K4yR&z zyT9URpERb?1zqRWEqSor0d!<-yeBAZV^0uh$lhowM4*ZJ{Oho5`oIhTv7v0$2O6cv zDGppq_B1PuzsONvmm!^lA-2pU4ZNg#d3+OiK9?U6MPXHFONTB66owqJOy3tl}G99mc8(!BWo4MRqTydW-8`ZlnYAC$wwirIEbdw$`#Z5{``Y+pSc4*?L$?oX2E4JTtdkrp5no z`F09^zW3D_aXI;lw)Nj^w}g!h z0_8M$kM5R;$R>#+(Hr~pkD zTUHsBn(&)D0*gHkPf2<@XB%L({;8P}ehS&wBj@{=C|j9D%c1pQ8DP%SU{?yGkm>=3 z<`$-Vg@+wRCevNP1}|F)W|;`+cRaE55P?!?Mt9lH7tUpaNe9r3q|J(7QJ!05hTRcI zcfIuPi_0uq&@eVvIt_EOE0xY-#i9{#Yo}Djn{%WE?T&@_B-cOo&*bOanes+HbTFN9 zO@Lzpg_9at>Q22n+T)7&+b7sKXp-svX?^k7NH-7$a%TZrcn9TLM?JfJjQ{VmZvR$~ i{15cDb Active Sessions', :clean_gitlab_redis_shared_state do expect(page).not_to have_content('Chrome on Windows') end end - - it 'User can revoke a session', :js, :redis_session_store do - Capybara::Session.new(:session1) - Capybara::Session.new(:session2) - - # set an additional session in another browser - using_session :session2 do - gitlab_sign_in(user) - end - - using_session :session1 do - gitlab_sign_in(user) - visit profile_active_sessions_path - - expect(page).to have_link('Revoke', count: 1) - - accept_confirm { click_on 'Revoke' } - - expect(page).not_to have_link('Revoke') - end - - using_session :session2 do - visit profile_active_sessions_path - - expect(page).to have_content('You need to sign in or sign up before continuing.') - end - end end