summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Mountney <dj@gitlab.com>2017-04-05 21:55:19 +0000
committerDJ Mountney <david@twkie.net>2017-04-05 16:13:36 -0700
commitc4b71fc42f6813d1b98647d961eca3c8a63a9752 (patch)
treec2b18349103422a6e89520db3d65aaddc6a312b7
parentaa21d8cca1a36dddf32ee9beebe6a141c3954f61 (diff)
downloadgitlab-ce-c4b71fc42f6813d1b98647d961eca3c8a63a9752.tar.gz
Merge branch 'path-disclosure-proj-import-export' into 'security'
Fix for path disclosure in project import/export See merge request !2080
-rw-r--r--app/helpers/projects_helper.rb5
-rw-r--r--changelogs/unreleased/file-import-export-path-disclosure.yml5
-rw-r--r--spec/helpers/projects_helper_spec.rb8
3 files changed, 17 insertions, 1 deletions
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index eb98204285d..31514964749 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -391,7 +391,10 @@ module ProjectsHelper
def sanitize_repo_path(project, message)
return '' unless message.present?
- message.strip.gsub(project.repository_storage_path.chomp('/'), "[REPOS PATH]")
+ exports_path = File.join(Settings.shared['path'], 'tmp/project_exports')
+ filtered_message = message.strip.gsub(exports_path, "[REPO EXPORT PATH]")
+
+ filtered_message.gsub(project.repository_storage_path.chomp('/'), "[REPOS PATH]")
end
def project_feature_options
diff --git a/changelogs/unreleased/file-import-export-path-disclosure.yml b/changelogs/unreleased/file-import-export-path-disclosure.yml
new file mode 100644
index 00000000000..1a297d07187
--- /dev/null
+++ b/changelogs/unreleased/file-import-export-path-disclosure.yml
@@ -0,0 +1,5 @@
+---
+title: Fix path disclosure in project import/export
+merge_request:
+author:
+
diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb
index aca0bb1d794..40cc9dc18f4 100644
--- a/spec/helpers/projects_helper_spec.rb
+++ b/spec/helpers/projects_helper_spec.rb
@@ -127,6 +127,7 @@ describe ProjectsHelper do
before do
allow(project).to receive(:repository_storage_path).and_return('/base/repo/path')
+ allow(Settings.shared).to receive(:[]).with('path').and_return('/base/repo/export/path')
end
it 'removes the repo path' do
@@ -135,6 +136,13 @@ describe ProjectsHelper do
expect(sanitize_repo_path(project, import_error)).to eq('Could not clone [REPOS PATH]/namespace/test.git')
end
+
+ it 'removes the temporary repo path used for uploads/exports' do
+ repo = '/base/repo/export/path/tmp/project_exports/uploads/test.tar.gz'
+ import_error = "Unable to decompress #{repo}\n"
+
+ expect(sanitize_repo_path(project, import_error)).to eq('Unable to decompress [REPO EXPORT PATH]/uploads/test.tar.gz')
+ end
end
describe '#last_push_event' do