fission/fission · Security
Fission: Zip Slip in pkg/utils/zip.go:Unarchive allows fetcher to write outside the destination directory
- GHSA ID
- GHSA-q6vm-xqc9-v3ff
- CVE ID
- CVE-2026-50567
- Severity
- high
- Published
- Updated
- CVSS
- 7.7 · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N
- CVSS v3
- 7.7 · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N
Description
Unarchive in pkg/utils/zip.go joined each archive entry name with the destination directory via filepath.Join and wrote the result without checking whether the resolved path stayed under the destination. A zip entry named
../../tmp/evil therefore landed at /tmp/evil. An attacker who could control a Package.Spec.Source.URL or Deployment.URL archive could induce the fetcher (running as the per-environment pod's fission-fetcher sidecar) to write
files anywhere that process could reach: into other tenants' /packages/<ns>/ directories, into mounted secret/config volumes, or into the fetcher's own binary.
Affected
- Project:
github.com/fission/fission - Versions: all up to and including v1.24.0
- Audited commit:
647c141 - Component:
pkg/utils/zip.go(Unarchive) - Configuration: default; triggered when the fetcher downloads and extracts a zip archive
Fix section (paste into the Fix / Patches field)
Fixed in v1.25.0 by:
- PR #3444 (commit
55704aca) —Unarchivenow opens anos.Rooton the destination, validates each archive entry name (rejects absolute paths and..traversal), and refuses symlink entries up front. Theos.Rootconfines everymkdir/createto the destination in the kernel.
Regression coverage: TestUnarchiveZipSlip in pkg/utils/zip_test.go exercises parent-traversal, absolute-path, and symlink entries.
CWEs
- CWE-22 · Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')