VYPR
High severityNVD Advisory· Published Oct 14, 2025· Updated Oct 14, 2025

argo-workflows Zip Slip path traversal allows arbitrary file write and container configuration overwrite

CVE-2025-62156

Description

Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Versions prior to 3.6.12 and versions 3.7.0 through 3.7.2 contain a Zip Slip path traversal vulnerability in artifact extraction. During artifact extraction the unpack/untar logic (workflow/executor/executor.go) uses filepath.Join(dest, filepath.Clean(header.Name)) without validating that header.Name stays within the intended extraction directory. A malicious archive entry can supply a traversal or absolute path that, after cleaning, overrides the destination directory and causes files to be written outside the /work/tmp extraction path and into system directories such as /etc inside the container. The vulnerability enables arbitrary file creation or overwrite in system configuration locations (for example /etc/passwd, /etc/hosts, /etc/crontab), which can lead to privilege escalation or persistence within the affected container. Update to 3.6.12 or 3.7.3 to remediate the issue.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
github.com/argoproj/argo-workflows/v3Go
< 3.6.123.6.12
github.com/argoproj/argo-workflows/v3Go
>= 3.7.0, < 3.7.33.7.3

Affected products

1

Patches

2
9f6bc5d236cd

Merge commit from fork

https://github.com/argoproj/argo-workflowsAlan ClucasOct 14, 2025via ghsa
1 file changed · +7 0
  • workflow/executor/executor.go+7 0 modified
    @@ -945,11 +945,18 @@ func untar(tarPath string, destPath string) error {
     				continue
     			}
     			target := filepath.Join(dest, filepath.Clean(header.Name))
    +			if !strings.HasPrefix(target, filepath.Clean(dest)+string(os.PathSeparator)) {
    +				return fmt.Errorf("illegal file path: %s", header.Name)
    +			}
     			if err := os.MkdirAll(filepath.Dir(target), 0o755); err != nil && os.IsExist(err) {
     				return err
     			}
     			switch header.Typeflag {
     			case tar.TypeSymlink:
    +				linkTarget := filepath.Join(filepath.Dir(target), header.Linkname)
    +				if !strings.HasPrefix(filepath.Clean(linkTarget), filepath.Clean(dest)+string(os.PathSeparator)) {
    +					return fmt.Errorf("illegal symlink target: %s -> %s", header.Name, header.Linkname)
    +				}
     				err := os.Symlink(header.Linkname, target)
     				if err != nil {
     					return err
    
5659ad9b641f

Merge commit from fork

https://github.com/argoproj/argo-workflowsAlan ClucasOct 14, 2025via ghsa
1 file changed · +7 0
  • workflow/executor/executor.go+7 0 modified
    @@ -964,11 +964,18 @@ func untar(tarPath string, destPath string) error {
     				continue
     			}
     			target := filepath.Join(dest, filepath.Clean(header.Name))
    +			if !strings.HasPrefix(target, filepath.Clean(dest)+string(os.PathSeparator)) {
    +				return fmt.Errorf("illegal file path: %s", header.Name)
    +			}
     			if err := os.MkdirAll(filepath.Dir(target), 0o755); err != nil && os.IsExist(err) {
     				return err
     			}
     			switch header.Typeflag {
     			case tar.TypeSymlink:
    +				linkTarget := filepath.Join(filepath.Dir(target), header.Linkname)
    +				if !strings.HasPrefix(filepath.Clean(linkTarget), filepath.Clean(dest)+string(os.PathSeparator)) {
    +					return fmt.Errorf("illegal symlink target: %s -> %s", header.Name, header.Linkname)
    +				}
     				err := os.Symlink(header.Linkname, target)
     				if err != nil {
     					return err
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

7

News mentions

0

No linked articles in our index yet.