summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2017-04-05 21:17:49 +0000
committerDJ Mountney <david@twkie.net>2017-04-05 15:58:52 -0700
commitc22e9d8b818d7fec96710a7deb47a84cbbbf41f0 (patch)
tree4bb3052d856be6ea032e85f488955995ec0311aa
parent5f81898343cabd65a49dbbba9d7c00e06b0eca69 (diff)
downloadgitlab-ce-c22e9d8b818d7fec96710a7deb47a84cbbbf41f0.tar.gz
Merge branch 'open-redirect-fix-continue-to' into 'security'
Fix for open redirect vuln involving continue[to] params See merge request !2083
-rw-r--r--app/controllers/concerns/continue_params.rb1
-rw-r--r--changelogs/unreleased/open-redirect-continue-params.yml4
-rw-r--r--spec/controllers/projects/imports_controller_spec.rb9
3 files changed, 13 insertions, 1 deletions
diff --git a/app/controllers/concerns/continue_params.rb b/app/controllers/concerns/continue_params.rb
index 0a995c45bdf..eb3a623acdd 100644
--- a/app/controllers/concerns/continue_params.rb
+++ b/app/controllers/concerns/continue_params.rb
@@ -7,6 +7,7 @@ module ContinueParams
continue_params = continue_params.permit(:to, :notice, :notice_now)
return unless continue_params[:to] && continue_params[:to].start_with?('/')
+ return if continue_params[:to].start_with?('//')
continue_params
end
diff --git a/changelogs/unreleased/open-redirect-continue-params.yml b/changelogs/unreleased/open-redirect-continue-params.yml
new file mode 100644
index 00000000000..def3bc7d929
--- /dev/null
+++ b/changelogs/unreleased/open-redirect-continue-params.yml
@@ -0,0 +1,4 @@
+---
+title: Fix for open redirect vulnerability using continue[to] in URL when requesting project import status.
+merge_request:
+author:
diff --git a/spec/controllers/projects/imports_controller_spec.rb b/spec/controllers/projects/imports_controller_spec.rb
index 7c75815f3c4..6724b474179 100644
--- a/spec/controllers/projects/imports_controller_spec.rb
+++ b/spec/controllers/projects/imports_controller_spec.rb
@@ -96,12 +96,19 @@ describe Projects::ImportsController do
}
end
- it 'redirects to params[:to]' do
+ it 'redirects to internal params[:to]' do
get :show, namespace_id: project.namespace.to_param, project_id: project, continue: params
expect(flash[:notice]).to eq params[:notice]
expect(response).to redirect_to params[:to]
end
+
+ it 'does not redirect to external params[:to]' do
+ params[:to] = "//google.com"
+
+ get :show, namespace_id: project.namespace.to_param, project_id: project, continue: params
+ expect(response).not_to redirect_to params[:to]
+ end
end
end