Skip to content

Commit 8ea1645

Browse files
authored
fix: add zlib path validation; tighten up remaining file/directory permissions (#1337)
Signed-off-by: egibs <20933572+egibs@users.noreply.github.com>
1 parent 28663d9 commit 8ea1645

8 files changed

Lines changed: 12 additions & 8 deletions

File tree

pkg/action/scan_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func TestCleanPath(t *testing.T) {
6767
defer os.RemoveAll(tempDir)
6868

6969
nestedDir := filepath.Join(tempDir, "nested")
70-
if err := os.Mkdir(nestedDir, 0o755); err != nil {
70+
if err := os.Mkdir(nestedDir, 0o700); err != nil {
7171
t.Fatalf("failed to create nested directory: %v", err)
7272
}
7373

pkg/archive/archive.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func extractNestedArchive(ctx context.Context, c malcontent.Config, d string, f
129129
archivePath = fmt.Sprintf("%s%d", archivePath, time.Now().UnixNano())
130130
}
131131

132-
if err := os.MkdirAll(archivePath, 0o755); err != nil {
132+
if err := os.MkdirAll(archivePath, 0o700); err != nil {
133133
return fmt.Errorf("failed to create extraction directory: %w", err)
134134
}
135135

pkg/archive/symlink_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func TestHandleSymlink(t *testing.T) {
8080

8181
// Write a file we can create a valid symlink for
8282
targetFile := filepath.Join(tmpDir, "realfile.txt")
83-
if err := os.WriteFile(targetFile, []byte("test"), 0o644); err != nil {
83+
if err := os.WriteFile(targetFile, []byte("test"), 0o600); err != nil {
8484
t.Fatalf("failed to create target file: %v", err)
8585
}
8686

pkg/archive/zlib.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ func ExtractZlib(ctx context.Context, d string, f string) error {
4141
base := filepath.Base(f)
4242
target := filepath.Join(d, base[:len(base)-len(filepath.Ext(base))])
4343

44+
if !IsValidPath(target, d) {
45+
return fmt.Errorf("invalid zlib decompression file path: %s", target)
46+
}
47+
4448
zr, err := zlib.NewReader(zf)
4549
if err != nil {
4650
return fmt.Errorf("failed to create zlib reader: %w", err)

pkg/compile/compile.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ func getCacheDir() (string, error) {
248248
cacheDir = filepath.Join(os.TempDir(), "malcontent-cache")
249249
}
250250

251-
if err := os.MkdirAll(cacheDir, 0o755); err != nil {
251+
if err := os.MkdirAll(cacheDir, 0o700); err != nil {
252252
return "", fmt.Errorf("create cache dir: %w", err)
253253
}
254254

@@ -274,7 +274,7 @@ func loadCachedRules(cacheFile string) (*yarax.Rules, error) {
274274
// saveCachedRules saves rules to a local file.
275275
func saveCachedRules(compiledRules *yarax.Rules, cacheFile string) error {
276276
tmpFile := cacheFile + ".tmp"
277-
f, err := os.OpenFile(tmpFile, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o644)
277+
f, err := os.OpenFile(tmpFile, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o600)
278278
if err != nil {
279279
return fmt.Errorf("create cache file: %w", err)
280280
}

pkg/profile/profile.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func StartProfiling(ctx context.Context, config *Config) (*Profiler, error) {
5757
cancel: cancel,
5858
}
5959

60-
if err := os.MkdirAll(config.OutputDir, 0o755); err != nil {
60+
if err := os.MkdirAll(config.OutputDir, 0o700); err != nil {
6161
return nil, fmt.Errorf("failed to create profile directory: %w", err)
6262
}
6363

pkg/refresh/action.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func actionRefresh(ctx context.Context) ([]TestData, error) {
5555
return nil, fmt.Errorf("special case input file not found: %s: %w", scan, err)
5656
}
5757

58-
if err := os.MkdirAll(filepath.Dir(output), 0o755); err != nil {
58+
if err := os.MkdirAll(filepath.Dir(output), 0o700); err != nil {
5959
return nil, fmt.Errorf("create output directory: %w", err)
6060
}
6161

pkg/refresh/diff.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func diffRefresh(ctx context.Context, rc Config) ([]TestData, error) {
166166
return nil, fmt.Errorf("risk case compare file not found: %s: %w", dest, err)
167167
}
168168

169-
if err := os.MkdirAll(filepath.Dir(output), 0o755); err != nil {
169+
if err := os.MkdirAll(filepath.Dir(output), 0o700); err != nil {
170170
return nil, fmt.Errorf("create output directory: %w", err)
171171
}
172172

0 commit comments

Comments
 (0)