summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMałgorzata Ksionek <meksionek@gmail.com>2019-03-20 14:39:07 +0100
committerMałgorzata Ksionek <meksionek@gmail.com>2019-03-21 19:04:47 +0100
commitf88323386ae4a389d799720891ed90c58843eec6 (patch)
tree64f142f556c4091937fe3ce105814ed572cb35d0
parent442de051eeffa1bb22b9ed1f8bfe4a5423137a99 (diff)
downloadgitlab-ce-f88323386ae4a389d799720891ed90c58843eec6.tar.gz
Disallow changing namespace of a project in update method
-rw-r--r--app/controllers/projects_controller.rb13
-rw-r--r--changelogs/unreleased/security-mass-assignment-on-project-update.yml5
-rw-r--r--spec/controllers/projects_controller_spec.rb17
3 files changed, 30 insertions, 5 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 33c6608d321..b419d669544 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -47,7 +47,7 @@ class ProjectsController < Projects::ApplicationController
end
def create
- @project = ::Projects::CreateService.new(current_user, project_params).execute
+ @project = ::Projects::CreateService.new(current_user, project_params(attributes: project_params_create_attributes)).execute
if @project.saved?
cookies[:issue_board_welcome_hidden] = { path: project_path(@project), value: nil, expires: Time.at(0) }
@@ -328,9 +328,9 @@ class ProjectsController < Projects::ApplicationController
end
# rubocop: enable CodeReuse/ActiveRecord
- def project_params
+ def project_params(attributes: project_params_attributes)
params.require(:project)
- .permit(project_params_attributes)
+ .permit(attributes)
end
def project_params_attributes
@@ -349,11 +349,10 @@ class ProjectsController < Projects::ApplicationController
:last_activity_at,
:lfs_enabled,
:name,
- :namespace_id,
:only_allow_merge_if_all_discussions_are_resolved,
:only_allow_merge_if_pipeline_succeeds,
- :printing_merge_request_link_enabled,
:path,
+ :printing_merge_request_link_enabled,
:public_builds,
:request_access_enabled,
:runners_token,
@@ -375,6 +374,10 @@ class ProjectsController < Projects::ApplicationController
]
end
+ def project_params_create_attributes
+ project_params_attributes << :namespace_id
+ end
+
def custom_import_params
{}
end
diff --git a/changelogs/unreleased/security-mass-assignment-on-project-update.yml b/changelogs/unreleased/security-mass-assignment-on-project-update.yml
new file mode 100644
index 00000000000..8657dcdd135
--- /dev/null
+++ b/changelogs/unreleased/security-mass-assignment-on-project-update.yml
@@ -0,0 +1,5 @@
+---
+title: Disallow updating namespace during updating project
+merge_request:
+author:
+type: security
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index a1662658ade..41380e79305 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -369,6 +369,23 @@ describe ProjectsController do
end
end
+ it 'does not update namespace' do
+ controller.instance_variable_set(:@project, project)
+
+ params = {
+ namespace_id: 'test'
+ }
+
+ expect do
+ put :update,
+ params: {
+ namespace_id: project.namespace,
+ id: project.id,
+ project: params
+ }
+ end.not_to change {project.namespace}
+ end
+
def update_project(**parameters)
put :update,
params: {