Skip to content

Commit 503a0ca

Browse files
committed
fix: use secure join to avoid path traversal issues
Signed-off-by: Dominykas Blyžė <[email protected]>
1 parent 9ab36d3 commit 503a0ca

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

pkg/getter/gitgetter.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ import (
1919
"bytes"
2020
"fmt"
2121
"os"
22-
"path/filepath"
2322

2423
"helm.sh/helm/v3/pkg/chart/loader"
2524
"helm.sh/helm/v3/pkg/chartutil"
2625

2726
"github.com/Masterminds/vcs"
27+
securejoin "github.com/cyphar/filepath-securejoin"
2828

2929
"helm.sh/helm/v3/internal/gitutil"
3030
)
@@ -60,14 +60,18 @@ func (g *GitGetter) get(href string) (*bytes.Buffer, error) {
6060
if err != nil {
6161
return nil, err
6262
}
63-
chartTmpDir := filepath.Join(tmpDir, chartName)
6463

65-
if err := os.MkdirAll(chartTmpDir, 0755); err != nil {
64+
gitTmpDir, err := securejoin.SecureJoin(tmpDir, chartName)
65+
if err != nil {
66+
return nil, err
67+
}
68+
69+
if err := os.MkdirAll(gitTmpDir, 0755); err != nil {
6670
return nil, err
6771
}
6872
defer os.RemoveAll(tmpDir)
6973

70-
repo, err := vcs.NewRepo(gitURL.GitRemoteURL.String(), chartTmpDir)
74+
repo, err := vcs.NewRepo(gitURL.GitRemoteURL.String(), gitTmpDir)
7175
if err != nil {
7276
return nil, err
7377
}
@@ -78,7 +82,12 @@ func (g *GitGetter) get(href string) (*bytes.Buffer, error) {
7882
return nil, err
7983
}
8084

81-
ch, err := loader.LoadDir(filepath.Join(chartTmpDir, gitURL.PathUnderGitRepository))
85+
chartDir, err := securejoin.SecureJoin(gitTmpDir, gitURL.PathUnderGitRepository)
86+
if err != nil {
87+
return nil, err
88+
}
89+
90+
ch, err := loader.LoadDir(chartDir)
8291
if err != nil {
8392
return nil, err
8493
}

0 commit comments

Comments
 (0)