argo-workflows Zip Slip path traversal allows arbitrary file write and container configuration overwrite
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.
| Package | Affected versions | Patched versions |
|---|---|---|
github.com/argoproj/argo-workflows/v3Go | < 3.6.12 | 3.6.12 |
github.com/argoproj/argo-workflows/v3Go | >= 3.7.0, < 3.7.3 | 3.7.3 |
Affected products
1- Range: < 3.6.12
Patches
29f6bc5d236cdMerge commit from fork
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
5659ad9b641fMerge commit from fork
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- github.com/advisories/GHSA-p84v-gxvw-73pfghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2025-62156ghsaADVISORY
- github.com/argoproj/argo-workflows/blob/946a2d6b9ac3309371fe47f49ae94c33ca7d488d/workflow/executor/executor.goghsax_refsource_MISCWEB
- github.com/argoproj/argo-workflows/commit/5659ad9b641fcf52c04ed594cd6493f9170f6011ghsax_refsource_MISCWEB
- github.com/argoproj/argo-workflows/commit/9f6bc5d236cd1b24d607943384511d71ad17a4c3ghsax_refsource_MISCWEB
- github.com/argoproj/argo-workflows/security/advisories/GHSA-p84v-gxvw-73pfghsax_refsource_CONFIRMWEB
- pkg.go.dev/vuln/GO-2025-4023ghsaWEB
News mentions
0No linked articles in our index yet.