GHSA-R5JH-Q2MW-GCX4
Vulnerability from github – Published: 2026-07-28 20:18 – Updated: 2026-07-28 20:18SanitizeFilePath 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
/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.
Callers 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 /
builder's shared volume could induce a write or read outside the intended safe directory.
Affected
- Project:
github.com/fission/fission - Versions: all versions through v1.24.0 with
SanitizeFilePathin the tree - Audited commit:
647c141 - Component:
pkg/utils/utils.go:SanitizeFilePath - Callers:
pkg/builder/builder.go:157,164,208,pkg/fetcher/fetcher.go:296,311,450,496,565,571 - Configuration: default; requires a sibling directory to the safe dir to exist on the filesystem
Fix section (paste into the Fix / Patches field)
Fixed in v1.25.0 by:
- PR #3445 (commit
8298e33e) — migrate everySanitizeFilePathcall site (fetcher:storePath/tmpPath/secretDir/configDir/ rename +writeSecretOrConfigMap; builder:srcPkg/deployPkgpath validation andsrcPkgstat) to newpkg/utils/root.gohelpers (RootJoin,RootStat,RootWriteFile,RootMkdirAll,RootRename) that operate throughos.Root.os.Rootenforces directory confinement in the kernel and is recognized by CodeQLgo/path-injectionas a traversal barrier. - PR #3446 (commit
5aac6f0b) — delete the deprecatedSanitizeFilePathitself once no callers remained. The vulnerable function no longer exists in the tree.
{
"affected": [
{
"database_specific": {
"last_known_affected_version_range": "\u003c= 1.24.0"
},
"package": {
"ecosystem": "Go",
"name": "github.com/fission/fission"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "1.25.0"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-50568"
],
"database_specific": {
"cwe_ids": [
"CWE-41"
],
"github_reviewed": true,
"github_reviewed_at": "2026-07-28T20:18:30Z",
"nvd_published_at": "2026-06-10T18:17:13Z",
"severity": "LOW"
},
"details": "`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\u0027s `Clean` handler (`pkg/builder/builder.go:208`) and the fetcher\u0027s `Fetch` / `Upload` handlers (`pkg/fetcher/fetcher.go`). A tenant who could pre-create or control a sibling directory under the fetcher /\nbuilder\u0027s 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)) \u2014 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)) \u2014 delete the deprecated `SanitizeFilePath` itself once no callers\nremained. The vulnerable function no longer exists in the tree.",
"id": "GHSA-r5jh-q2mw-gcx4",
"modified": "2026-07-28T20:18:30Z",
"published": "2026-07-28T20:18:30Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/fission/fission/security/advisories/GHSA-r5jh-q2mw-gcx4"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-50568"
},
{
"type": "WEB",
"url": "https://github.com/fission/fission/pull/3445"
},
{
"type": "WEB",
"url": "https://github.com/fission/fission/pull/3446"
},
{
"type": "WEB",
"url": "https://github.com/fission/fission/commit/5aac6f0bcdf840e28f3f06c846ca7ae1866b3957"
},
{
"type": "WEB",
"url": "https://github.com/fission/fission/commit/8298e33ea7457702f893eae11077987cf905edb4"
},
{
"type": "PACKAGE",
"url": "https://github.com/fission/fission"
},
{
"type": "WEB",
"url": "https://github.com/fission/fission/releases/tag/v1.25.0"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N",
"type": "CVSS_V3"
}
],
"summary": "Fission: SanitizeFilePath lexical HasPrefix bypass permits sibling-directory escape"
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.