CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-71313

CVE-2026-71313: Local Directory Traversal in rclone via Unsafe Encoding Configurations

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 6, 2026·7 min read·13 visits

Executive Summary (TL;DR)

In rclone versions v1.51.0 to v1.74.x, configured local target encodings that omit dot-protection allow malicious remote filenames to escape the designated sync root and manipulate arbitrary host files.

A local encoding path traversal vulnerability exists in rclone versions from v1.51.0 up to v1.75.0. When non-default local encoding parameters (such as Slash, None, or Raw) are specified, rclone's standard decoder maps safely encoded fullwidth dot-dot characters back into native directory traversal components. Since the local backend historically lacked a post-resolution path containment check, these relative segments resolved outside the designated synchronization root, allowing arbitrary file creation and modification on the host system.

Vulnerability Overview

The affected component is rclone's local backend implementation. Rclone is a widely used command-line utility designed to synchronize files and directories between local storage and various cloud storage providers. The local backend manages direct file and directory read/write operations when syncing files onto the host operating system. This component exposes a critical attack surface whenever rclone operates on untrusted remote repositories.

The vulnerability is classified under CWE-22 (Improper Limitation of a Pathname to a Restricted Directory / 'Path Traversal'). When certain non-default local destination encoding configurations are enabled, rclone maps standard-encoded fullwidth dot sequences into directory traversal path components. The local directory boundary constraint is not validated during this decoding process, which allows remote storage sources to write to arbitrary paths.

The vulnerability has an impact on file integrity and availability. An attacker who controls a synchronized remote repository can construct specific filenames that escape the intended local destination directory when downloaded by a vulnerable client configuration. This enables unauthorized write operations to administrative or critical system paths on the target machine.

Root Cause Analysis

To safely process object names across disparate file storage platforms, rclone uses a standardized transformation architecture. Many cloud storage providers allow characters that are restricted on local host filesystems, such as backslashes, colons, or relative directory markers. Rclone translates these dangerous remote characters into safe Unicode equivalent representations during standard operation to prevent directory traversal and file corruption during synchronization.

Specifically, a double-dot relative reference (..) is translated into fullwidth double dots (..) during transmission. Under default configurations, when the local backend writes these files to the local disk, the standard encoder (defined by encoder.OS) maintains safety by preserving the fullwidth characters or applying safe transformations. This translation logic is handled by the FromStandardPath function, which maps normalized paths back to native representations.

However, if the local backend's encoding is manually configured to exclude the Dot flag, such as with --local-encoding Slash, None, or Raw, FromStandardPath translates the safe fullwidth dot sequence (..) back into native literal dots (..). This output is then passed to Go's filepath.Join function alongside the target root path of the synchronization directory.

Go's filepath.Join automatically cleans the combined string to evaluate relative path segments. While filepath.Join removes redundant path separators and simplifies relative steps, it does not restrict the resolved path from climbing past the parent boundaries of the root folder. If the relative input contains sufficient parent directory sequences, the final clean path is resolved entirely outside of the intended target directory.

Code Analysis

Prior to version v1.75.0, the path resolution in rclone's local backend relied entirely on the encoding subsystem to prevent traversal. The following snippet illustrates the vulnerable path calculation logic within backend/local/local.go:

// Vulnerable path calculation in local.go
func (f *Fs) localPath(name string) string {
	// f.opt.Enc.FromStandardPath decodes fullwidth characters based on configuration
	// filepath.FromSlash converts forward slashes to native OS separators
	// filepath.Join resolves the combined path but lacks boundary validation
	return filepath.Join(f.root, filepath.FromSlash(f.opt.Enc.FromStandardPath(name)))
}

If the configuration excludes the Dot flag, the returned path escapes the designated root without raising an error. The patch in version v1.75.0 addresses this by introducing a post-resolution verification check. This check computes the relationship between the final path and the intended destination root using the standard library's filepath.Rel function:

// Patched path calculation in local.go
func (f *Fs) localPath(name string) (string, error) {
	native := filepath.FromSlash(f.opt.Enc.FromStandardPath(name))
	localPath := filepath.Join(f.root, native)
	
	// Calculate the relative path from the root to the target path
	rel, err := filepath.Rel(f.root, localPath)
	
	// If the calculation fails, or if the relative path resolves to parent directories,
	// return an explicit path escape error
	if err != nil || rel == ".." || strings.HasPrefix(rel, ".."+string(filepath.Separator)) {
		return "", fserrors.NoRetryError(fmt.Errorf("%q: %w", name, errPathEscapes))
	}
	return localPath, nil
}

This refactoring changes the function signature to return both the path string and an error. When the path resolution escapes the directory boundary, the function returns a non-retryable error (errPathEscapes). Every caller within local.go that accesses the filesystem was updated to handle this error and abort the write transaction immediately.

Exploitation Mechanics

Exploitation of this vulnerability requires a set of specific execution criteria. First, an attacker must control or gain write access to a remote repository that is synchronized by a target user. The attacker populates this remote source with objects containing encoded traversal patterns. For instance, the attacker creates an object named ../../etc/cron.d/malicious_cron within the remote cloud bucket.

Second, the victim must run rclone with a command-line configuration that overrides the default safe encoding of the local destination. The command must specify an encoding that omits the standard Dot translation, as shown in the following example execution:

rclone sync remote:source /var/tmp/sync_destination --local-encoding Slash

During synchronization, rclone fetches the object list and decodes the standard fullwidth dot sequence into native directory traversal characters (..). Because the destination path is resolved purely via filepath.Join without containment checks, the local backend writes the attacker-supplied file content to the host directory, bypasses the /var/tmp/sync_destination boundary, and deposits the payload directly in /etc/cron.d/.

Impact Assessment

The security consequences of a successful path traversal exploit are significant and depend on the execution privileges of the rclone process. If the command runs with administrative or root permissions, the attacker can overwrite sensitive system files or inject executable scripts into system-wide directories such as /etc/cron.d or /etc/profile.d. This results in arbitrary code execution with the permissions of the host operating system.

In environments where rclone runs as an unprivileged user, the exploit remains highly impactful. The attacker can modify or overwrite user configuration files like ~/.bashrc, ~/.ssh/authorized_keys, or local application files. These modifications allow for local privilege escalation, persistent access, or lateral movement within the network.

The CVSS v3.1 base score of 6.9 is characterized by a network attack vector and high integrity impact, but requires high attack complexity because the vulnerability depends on specific user configuration choices. The scope of the attack is changed because the security controls separating the synchronized directory from the surrounding operating system filesystem are bypassed entirely.

Mitigation and Remediation

The most effective remediation is to upgrade rclone to version v1.75.0 or later. In these updated versions, the local backend natively implements the filepath.Rel validation step, terminating the sync operation and throwing a path escape error before executing any local file creation or modification commands.

If immediate system upgrades are not feasible, administrators must audit all automated scripts, cron tasks, and user configuration files to ensure that custom local encoding options are disabled. In particular, configurations must not define --local-encoding or the equivalent configuration keys with parameters such as Slash, None, or Raw. The default encoder settings must be restored to guarantee standard safety protections.

As a defense-in-depth practice, rclone processes should be executed under restricted user profiles or containerized sandboxes. Restricting the file system access of the process using mechanisms like AppArmor, SELinux, or lightweight containers limits the impact of potential directory traversals by ensuring the process cannot write to critical administrative system directories even if a path escape occurs.

Fix Analysis (1)

Technical Appendix

CVSS Score
6.9/ 10

Affected Systems

rclone command-line utility (v1.51.0 through v1.74.x)

Affected Versions Detail

Product
Affected Versions
Fixed Version
rclone
rclone
>= 1.51.0, < 1.75.0v1.75.0
AttributeDetail
CWE IDCWE-22 (Improper Limitation of a Pathname to a Restricted Directory)
Attack VectorNetwork (AV:N)
CVSS v3.1 Score6.9 (Medium)
Exploit StatusPoC-level
CISA KEV StatusNo

MITRE ATT&CK Mapping

T1083File and Directory Discovery
Discovery
T1005Data from Local System
Collection
CWE-22
Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

References & Sources

  • [1]https://github.com/rclone/rclone/security/advisories/GHSA-7p4m-qxvv-g567
  • [2]https://github.com/rclone/rclone/commit/6a69713864b1d8f6edbc03d8af735f9624576d6e
  • [3]https://github.com/rclone/rclone/releases/tag/v1.75.0

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•30 minutes ago•CVE-2026-10740
5.3

CVE-2026-10740: Denial of Service in s2n-quic CryptoStream Reassembly

An unauthenticated Denial of Service vulnerability exists in the s2n-quic library's CryptoStream reassembler due to a lack of buffer limits on out-of-order cryptographic frames. An attacker can transmit a crafted CRYPTO frame with an extremely high offset and nominal payload, forcing the receiver to execute unbounded memory allocations and causing service crashes.

Amit Schendel
Amit Schendel
1 views•7 min read
•about 2 hours ago•CVE-2026-55153
7.1

CVE-2026-55153: JNDI Injection and Deserialization Gadget Abuse in mchange-commons-java

A JNDI Injection and Deserialization Gadget vulnerability exists in mchange-commons-java prior to version 0.6.0. The com.mchange.v2.naming.JavaBeanObjectFactory component permits arbitrary class instantiation and setter invocation, allowing attackers to perform Server-Side Request Forgery (SSRF) and remote class loading.

Alon Barad
Alon Barad
4 views•5 min read
•about 3 hours ago•GHSA-8RW6-P7M8-63JP
6.5

GHSA-8RW6-P7M8-63JP: Array Element-Level SELECT Permissions Leak in SurrealDB

SurrealDB versions supporting element-level SELECT permissions on arrays are vulnerable to a logical authorization bypass. Due to an index-shifting error during array filtration, restricted elements can skip permission checks and leak to unauthorized record users.

Alon Barad
Alon Barad
4 views•6 min read
•1 day ago•CVE-2026-12243
7.5

CVE-2026-12243: Incomplete Path Traversal Validation and Percent-Encoding Bypass in NLTK

CVE-2026-12243 is a path traversal vulnerability in the Natural Language Toolkit (NLTK) version 3.9.4. The flaw exists because the input validation routine fails to account for percent-encoded directory traversal sequences like '..%2f' before passing them to urllib.request.url2pathname(), which decodes them into active traversal sequences.

Amit Schendel
Amit Schendel
5 views•8 min read
•1 day ago•CVE-2026-73654
8.5

CVE-2026-73654: Prototype Pollution in Trigger.dev leading to Cascading Denial of Service

CVE-2026-73654 is a high-severity prototype pollution vulnerability in Trigger.dev. The flaw occurs during the handling of run-metadata updates through the PUT /api/v1/runs/:runId/metadata endpoint. Because user-supplied keys are parsed directly by the @jsonhero/path library without sanitization, an authenticated attacker with low privileges can pollute the global Object.prototype. This causes database queries via Prisma ORM to fail validation and induces unhandled exceptions in the Prometheus metrics client, resulting in a process-wide denial of service.

Alon Barad
Alon Barad
11 views•6 min read
•1 day ago•CVE-2026-73559
6.5

CVE-2026-73559: Uncontrolled Resource Consumption in vLLM API completions

CVE-2026-73559 is an uncontrolled resource consumption vulnerability in the vLLM engine, specifically within the /v1/completions API endpoint, allowing authenticated attackers to cause application-level denial of service via unbounded prompt arrays.

Amit Schendel
Amit Schendel
10 views•5 min read