Merge branch 'open-redirect-host-fix' into 'security'
Fix for three open redirect vulns using redirect_to url_for(params.merge))) See merge request !2082
This commit is contained in:
parent
0d8fba4eec
commit
b80653bb6a
7 changed files with 37 additions and 3 deletions
|
@ -7,7 +7,7 @@ class Dashboard::TodosController < Dashboard::ApplicationController
|
|||
@sort = params[:sort]
|
||||
@todos = @todos.page(params[:page])
|
||||
if @todos.out_of_range? && @todos.total_pages != 0
|
||||
redirect_to url_for(params.merge(page: @todos.total_pages))
|
||||
redirect_to url_for(params.merge(page: @todos.total_pages, only_path: true))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ class Projects::IssuesController < Projects::ApplicationController
|
|||
@issuable_meta_data = issuable_meta_data(@issues, @collection_type)
|
||||
|
||||
if @issues.out_of_range? && @issues.total_pages != 0
|
||||
return redirect_to url_for(params.merge(page: @issues.total_pages))
|
||||
return redirect_to url_for(params.merge(page: @issues.total_pages, only_path: true))
|
||||
end
|
||||
|
||||
if params[:label_name].present?
|
||||
|
|
|
@ -43,7 +43,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
|
|||
@issuable_meta_data = issuable_meta_data(@merge_requests, @collection_type)
|
||||
|
||||
if @merge_requests.out_of_range? && @merge_requests.total_pages != 0
|
||||
return redirect_to url_for(params.merge(page: @merge_requests.total_pages))
|
||||
return redirect_to url_for(params.merge(page: @merge_requests.total_pages, only_path: true))
|
||||
end
|
||||
|
||||
if params[:label_name].present?
|
||||
|
|
4
changelogs/unreleased/open-redirect-host-field.yml
Normal file
4
changelogs/unreleased/open-redirect-host-field.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Fix for open redirect vulnerabilities in todos, issues, and MR controllers.
|
||||
merge_request:
|
||||
author:
|
|
@ -35,6 +35,13 @@ describe Dashboard::TodosController do
|
|||
expect(assigns(:todos).current_page).to eq(last_page)
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'does not redirect to external sites when provided a host field' do
|
||||
external_host = "www.example.com"
|
||||
get :index, page: (last_page + 1).to_param, host: external_host
|
||||
|
||||
expect(response).to redirect_to(dashboard_todos_path(page: last_page))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -83,6 +83,17 @@ describe Projects::IssuesController do
|
|||
expect(assigns(:issues).current_page).to eq(last_page)
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'does not redirect to external sites when provided a host field' do
|
||||
external_host = "www.example.com"
|
||||
get :index,
|
||||
namespace_id: project.namespace.to_param,
|
||||
project_id: project,
|
||||
page: (last_page + 1).to_param,
|
||||
host: external_host
|
||||
|
||||
expect(response).to redirect_to(namespace_project_issues_path(page: last_page, state: controller.params[:state], scope: controller.params[:scope]))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -176,6 +176,18 @@ describe Projects::MergeRequestsController do
|
|||
expect(assigns(:merge_requests).current_page).to eq(last_page)
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
it 'does not redirect to external sites when provided a host field' do
|
||||
external_host = "www.example.com"
|
||||
get :index,
|
||||
namespace_id: project.namespace.to_param,
|
||||
project_id: project,
|
||||
state: 'opened',
|
||||
page: (last_page + 1).to_param,
|
||||
host: external_host
|
||||
|
||||
expect(response).to redirect_to(namespace_project_merge_requests_path(page: last_page, state: controller.params[:state], scope: controller.params[:scope]))
|
||||
end
|
||||
end
|
||||
|
||||
context 'when filtering by opened state' do
|
||||
|
|
Loading…
Reference in a new issue