GitRepo command hardening

This commit is contained in:
Tim Allclair
2018-05-31 13:35:04 -07:00
parent d5e05ca2ce
commit ce730d96b7
2 changed files with 36 additions and 7 deletions

View File

@@ -20,6 +20,7 @@ import (
"fmt"
"io/ioutil"
"path"
"path/filepath"
"strings"
"k8s.io/api/core/v1"
@@ -194,7 +195,7 @@ func (b *gitRepoVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
return err
}
args := []string{"clone", b.source}
args := []string{"clone", "--", b.source}
if len(b.target) != 0 {
args = append(args, b.target)
@@ -218,7 +219,7 @@ func (b *gitRepoVolumeMounter) SetUpAt(dir string, fsGroup *int64) error {
var subdir string
switch {
case b.target == ".":
case len(b.target) != 0 && filepath.Clean(b.target) == ".":
// if target dir is '.', use the current dir
subdir = path.Join(dir)
case len(files) == 1:

View File

@@ -93,7 +93,7 @@ func TestPlugin(t *testing.T) {
},
expecteds: []expectedCommand{
{
cmd: []string{"git", "clone", gitUrl, "target_dir"},
cmd: []string{"git", "clone", "--", gitUrl, "target_dir"},
dir: "",
},
{
@@ -120,7 +120,7 @@ func TestPlugin(t *testing.T) {
},
expecteds: []expectedCommand{
{
cmd: []string{"git", "clone", gitUrl, "target_dir"},
cmd: []string{"git", "clone", "--", gitUrl, "target_dir"},
dir: "",
},
},
@@ -138,7 +138,7 @@ func TestPlugin(t *testing.T) {
},
expecteds: []expectedCommand{
{
cmd: []string{"git", "clone", gitUrl},
cmd: []string{"git", "clone", "--", gitUrl},
dir: "",
},
},
@@ -158,7 +158,7 @@ func TestPlugin(t *testing.T) {
},
expecteds: []expectedCommand{
{
cmd: []string{"git", "clone", gitUrl},
cmd: []string{"git", "clone", "--", gitUrl},
dir: "",
},
{
@@ -186,7 +186,35 @@ func TestPlugin(t *testing.T) {
},
expecteds: []expectedCommand{
{
cmd: []string{"git", "clone", gitUrl, "."},
cmd: []string{"git", "clone", "--", gitUrl, "."},
dir: "",
},
{
cmd: []string{"git", "checkout", revision},
dir: "",
},
{
cmd: []string{"git", "reset", "--hard"},
dir: "",
},
},
isExpectedFailure: false,
},
{
name: "current-dir-mess",
vol: &v1.Volume{
Name: "vol1",
VolumeSource: v1.VolumeSource{
GitRepo: &v1.GitRepoVolumeSource{
Repository: gitUrl,
Revision: revision,
Directory: "./.",
},
},
},
expecteds: []expectedCommand{
{
cmd: []string{"git", "clone", "--", gitUrl, "./."},
dir: "",
},
{