GHSA-r5jh-q2mw-gcx4
LOWGHSA-r5jh-q2mw-gcx4 is a low-severity (CVSS 3.6) CWE-41 vulnerability in github.com/fission/fission. O3 Security confirms whether GHSA-r5jh-q2mw-gcx4 is actually reachable in your code before you act, and blocks exploitation at runtime until you patch.
Fission: SanitizeFilePath lexical HasPrefix bypass permits sibling-directory escape
Blast Radius
github.com/fission/fissionReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.
Description
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
/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 Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐹Go | github.com/fission/fission | all versions | 1.25.0 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for github.com/fission/fission. O3's reachability analysis confirms whether the vulnerable code path is actually invoked in your application, so you act on real exposure instead of every transitive match.
Fix
Update github.com/fission/fission to 1.25.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-r5jh-q2mw-gcx4 is resolved across your whole dependency graph.
Workarounds
If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.
How O3 protects you
O3 pinpoints whether GHSA-r5jh-q2mw-gcx4 is reachable in your code and exactly where to fix it, then blocks exploitation in production at runtime until the patched version is deployed.
Tailored to GHSA-r5jh-q2mw-gcx4. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.
Frequently Asked Questions
Is GHSA-r5jh-q2mw-gcx4 in your dependencies?
O3 detects GHSA-r5jh-q2mw-gcx4 across Go dependencies and uses function-level reachability to confirm whether the vulnerable code path is actually reachable — not just present. No false positives.