CVE-2026-77763

JuiceFS Local Filestore Backend Joins Object Keys onto the Storage Root Without a Containment Check, Allowing Writes Outside the Configured Directory

Published Aug 21, 2026 CVSS 4.0 · 7.1 High EPSS < 1% KEV · Not listed
Description
The filestore backend in pkg/object/file.go, used for file:// stores and as a common juicefs sync destination, derived every operation's target from path(key), which returned either filepath.Join(d.root, key) or filepath.Clean(d.root + key) with no check that the result stayed beneath the root. Put, Get, Head, Delete, Chmod, Chown, Symlink and Readlink all consumed that value directly. Object keys enumerated from a source object store during a sync are not constrained the way local filesystem names are, so a key containing traversal segments causes juicefs to write attacker-supplied content to a path outside the intended local destination, and no error is returned. An operator syncing from a bucket whose contents they do not fully control, such as a shared or public bucket or one an attacker can write to, is therefore exposed to a file write at an attacker-influenced location. The fix changes path() to return an error and rejects any key whose resolved path escapes the root.

Analysis

AI-generated

Technical impact

JuiceFS’s local filestore backend constructs file paths by simply joining the configured root directory with arbitrary object keys. The path resolution lacks a containment check, allowing a key containing traversal components to resolve to a location outside the intended root. Consequently, operations such as Put, Get, Delete, and Chmod can create, read, or modify files at attacker‑controlled locations without returning an error. This flaw enables an adversary—by supplying specially crafted keys during a sync operation—to overwrite system files or drop malicious content on the host filesystem, potentially leading to arbitrary code execution or persistent compromise. The vulnerability stems from a directory traversal weakness (CWE‑22).

Affected Systems

The issue affects JuiceFS deployments (juicedata:juicefs) running versions prior to the inclusion of the containment check added in the patch referenced by commit 0bcd70b3. Users of JuiceFS versions that have not incorporated this fix are susceptible whenever the file:// backend is used as a sync destination from a source that is not fully trusted.

Risk and Exploitability

The CVSS score of 7.1 marks this as a high‑severity condition, while the EPSS score is not available. The vulnerability is not listed in the CISA KEV catalog, suggesting it has not yet been widely exploited in the wild. The likelihood of exploitation hinges on the attacker’s ability to provide object keys to a sync operation; thus the attack vector is inferred to be a malicious or compromised source bucket used in a JuiceFS sync. An operator who syncs from a bucket they do not fully control, such as a shared or public bucket or one an attacker can write to, stands to suffer a write at an attacker‑influenced location. If successful, the attacker could overwrite critical configuration files, inject malware, or modify data, leading to loss of integrity and availability. The problem persists until the containment check is enforced, after which any key that escapes the root results in an error and the operation is aborted.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade JuiceFS to the latest release that includes the containment fix introduced in commit 0bcd70b3.
  • If an upgrade is not immediately possible, remove or disable the file:// backend as a sync destination to eliminate the vulnerable path handling.
  • Limit sync operations to buckets entirely under the operator’s control to guarantee that object keys cannot be supplied by an attacker.
  • As a temporary measure, manually patch the src/object/file.go path function to return an error for any key that resolves outside the configured root or wrap the sync process with a pre‑validation step that checks the resolved path against the root boundary.

Generated by OpenCVE AI on August 21, 2026 at 12:41 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories available
History
Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}

Type Values Removed Values Added
Description The filestore backend in pkg/object/file.go, used for file:// stores and as a common juicefs sync destination, derived every operation's target from path(key), which returned either filepath.Join(d.root, key) or filepath.Clean(d.root + key) with no check that the result stayed beneath the root. Put, Get, Head, Delete, Chmod, Chown, Symlink and Readlink all consumed that value directly. Object keys enumerated from a source object store during a sync are not constrained the way local filesystem names are, so a key containing traversal segments causes juicefs to write attacker-supplied content to a path outside the intended local destination, and no error is returned. An operator syncing from a bucket whose contents they do not fully control, such as a shared or public bucket or one an attacker can write to, is therefore exposed to a file write at an attacker-influenced location. The fix changes path() to return an error and rejects any key whose resolved path escapes the root.
Title JuiceFS Local Filestore Backend Joins Object Keys onto the Storage Root Without a Containment Check, Allowing Writes Outside the Configured Directory
First Time appeared Juicedata
Juicedata juicefs
Weaknesses CWE-22
CPEs cpe:2.3:a:juicedata:juicefs:*:*:*:*:*:*:*:*
Vendors & Products Juicedata
Juicedata juicefs
References
Metrics cvssV3_1

{'score': 6.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N'}

cvssV4_0

{'score': 7.1, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N'}

Weaknesses
  • CWE-22

    Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

Sources

Status
PUBLISHED
Assigner
VulnCheck
Published
Updated
Nov 8, 2026, 2:08 PM
Reserved
Aug 21, 2026, 10:30 AM
Status
Deferred
Published
Aug 21, 2026, 11:17 AM
Modified
Oct 16, 2026, 3:10 PM