{"id":"CVE-2026-50568","aliases":["GHSA-r5jh-q2mw-gcx4"],"title":"Fission: SanitizeFilePath lexical HasPrefix bypass permits sibling-directory escape","summary":"Fission: SanitizeFilePath lexical HasPrefix bypass permits sibling-directory escape","severity":"low","cvss":3.6,"cwe":["CWE-41"],"vendor":"fission","product":"github.com/fission/fission","ecosystem":"go","affected":["github.com/fission/fission <= 1.24.0"],"patched":["github.com/fission/fission 1.25.0"],"published":"2026-07-28","updated":"2026-07-28","source":"GHSA","sourceUrl":"https://github.com/advisories/GHSA-r5jh-q2mw-gcx4","references":[{"url":"https://github.com/fission/fission/security/advisories/GHSA-r5jh-q2mw-gcx4"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-50568"},{"url":"https://github.com/fission/fission/pull/3445"},{"url":"https://github.com/fission/fission/pull/3446"},{"url":"https://github.com/fission/fission/commit/5aac6f0bcdf840e28f3f06c846ca7ae1866b3957"},{"url":"https://github.com/fission/fission/commit/8298e33ea7457702f893eae11077987cf905edb4"},{"url":"https://github.com/fission/fission/releases/tag/v1.25.0"},{"url":"https://github.com/advisories/GHSA-r5jh-q2mw-gcx4"}],"tags":["ghsa","go"],"epss":0.00115,"epssPercentile":0.01753,"ingestedAt":"2026-07-28T20:38:51.009Z","slug":"CVE-2026-50568","body":"## Overview\n\n`SanitizeFilePath` in `pkg/utils/utils.go` validated that a path stayed under a safe directory by calling `strings.HasPrefix(path, safedir)`. This is a lexical check, not a directory boundary check: `/packages-extra/evil` starts with\n`/packages`, so it passed. The function did not enforce a path-separator boundary, so any sibling directory whose name began with the safe-directory string was accepted.\n\nCallers included the builder's `Clean` handler (`pkg/builder/builder.go:208`) and the fetcher's `Fetch` / `Upload` handlers (`pkg/fetcher/fetcher.go`). A tenant who could pre-create or control a sibling directory under the fetcher /\nbuilder's shared volume could induce a write or read outside the intended safe directory.\n\n### Affected\n\n- Project: `github.com/fission/fission`\n- Versions: all versions through v1.24.0 with `SanitizeFilePath` in the tree\n- Audited commit: `647c141`\n- Component: `pkg/utils/utils.go:SanitizeFilePath`\n- Callers: `pkg/builder/builder.go:157,164,208`, `pkg/fetcher/fetcher.go:296,311,450,496,565,571`\n- Configuration: default; requires a sibling directory to the safe dir to exist on the filesystem\n\n\nFix section (paste into the Fix / Patches field)\n\nFixed in [v1.25.0](https://github.com/fission/fission/releases/tag/v1.25.0) by:\n\n- [PR #3445](https://github.com/fission/fission/pull/3445) (commit [`8298e33e`](https://github.com/fission/fission/commit/8298e33ea7457702f893eae11077987cf905edb4)) — migrate every `SanitizeFilePath` call site (fetcher: `storePath` /\n`tmpPath` / `secretDir` / `configDir` / rename + `writeSecretOrConfigMap`; builder: `srcPkg` / `deployPkg` path validation and `srcPkg` stat) to new `pkg/utils/root.go` helpers (`RootJoin`, `RootStat`, `RootWriteFile`, `RootMkdirAll`,\n`RootRename`) that operate through `os.Root`. `os.Root` enforces directory confinement in the kernel and is recognized by CodeQL `go/path-injection` as a traversal barrier.\n- [PR #3446](https://github.com/fission/fission/pull/3446) (commit [`5aac6f0b`](https://github.com/fission/fission/commit/5aac6f0bcdf840e28f3f06c846ca7ae1866b3957)) — delete the deprecated `SanitizeFilePath` itself once no callers\nremained. The vulnerable function no longer exists in the tree.\n\n## Affected packages\n\n- `github.com/fission/fission <= 1.24.0`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `github.com/fission/fission 1.25.0`","depth":"sunlit","depthScore":20,"depthScoreParts":{"impact":19.8,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}