CVE-2026-88015: rclone local Denial of Service Vulnerability
MODERATECVE-2026-88015 is a MODERATE (CVSS 5.3) denial of service vulnerability (CWE-190: Integer Overflow or Wraparound) affecting rclone local libraries in the Go ecosystem. The issue involves crafted range request against a translated symlink panics (dos). Remediation is available by upgrading affected packages to version 1.75.1.
CVE-2026-88015 at a Glance
Security Impact
CVSS: 5.3
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L).
How to Fix CVE-2026-88015
To remediate this vulnerability, upgrade all affected rclone local dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade github.com/rclone/rclone to 1.75.1
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for github.com/rclone/rclone
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-88015, inspect your project dependencies for rclone local:
inspect dependencies for github.com/rclone/rclone
Analyze the terminal output to locate any version of rclone local in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.75.1), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-190: Integer Overflow or Wraparound, where the product performs a calculation that can produce an integer overflow or wraparound when the logic assumes that the resulting value will always be larger than the original value. this occurs when an integer value is incremented to a value that is too large to store in the associated representation. when this occurs, the value may become a very small or negative number. In rclone local, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-88015 Affected rclone local Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
github.com/rclone/rclone
|
Go |
< 1.75.1
|
1.75.1
|
References
Frequently Asked Questions
What is CVE-2026-88015?
Which rclone local versions are affected?
What version fixes CVE-2026-88015?
Is github.com/rclone/rclone affected?
What is the CVSS score of CVE-2026-88015?
What CWE is associated with CVE-2026-88015?
How can I check Go dependencies for CVE-2026-88015?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-p6m2-r3w9-mpxw",
"modified" : "2026-09-10T22:49:27Z",
"published" : "2026-09-10T22:49:27Z",
"aliases" : [ "CVE-2026-88015" ],
"summary" : "rclone local: crafted Range request against a translated symlink panics (DoS)",
"details" : "### Summary\nWhen `backend/local` is used with `--links`/`-l` (or the `links=true` config option), each symlink is exposed as an rclone object whose content is the target path string, suffixed `.rclonelink`. `Object.Open()` decodes an incoming `fs.RangeOption` via `Decode(o.Size())`, then for a translated-symlink object passes the decoded `offset` straight into `openTranslatedLink`, which indexes the target string directly: `linkdst[offset:]`.\n\n`RangeOption.Decode`'s `Start >= 0` branch (an ordinary `Range: bytes=X-` request) sets `offset = o.Start` with no upper bound, unlike its suffix-range branch (`Start < 0`, e.g. `bytes=-N`), which already clamps a too-large value to 0 - the fix for a prior, related crash (issue #6310: \"bytes=-90407\" against a 5-byte object panicked with \"slice bounds out of range\", now covered by an existing regression test). The `Start >= 0` branch never received the analogous protection.\n\nA `Range: bytes=<hugeStart>-` request sent to `rclone serve http`/`webdav` (or any consumer of `lib/http/serve`'s `Object()`, which parses and decodes the client's own Range header) against a directory containing a symlink therefore reaches `linkdst[offset:]` with offset far beyond the target string's length, and Go panics with \"slice bounds out of range\" instead of returning an empty read.\n\n### Details\nVulnerable code (before fix):\n```go\nfunc (o *Object) openTranslatedLink(offset, limit int64) (lrc io.ReadCloser, err error) {\n\tlinkdst, err := os.Readlink(o.path)\n\tif err != nil { return nil, err }\n\treturn readers.NewLimitedReadCloser(io.NopCloser(strings.NewReader(linkdst[offset:])), limit), nil\n}\n```\n\n### PoC\nCalled the real production `Object.Open()` on a translated-symlink object (target length 12) with `&fs.RangeOption{Start: math.MaxInt64, End: -1}`:\n```\npanic: runtime error: slice bounds out of range [9223372036854775807:8]\n ...backend/local.(*Object).openTranslatedLink\n ...backend/local.(*Object).Open\n```\n\n### Impact\nA remote client can send a single crafted `Range` header against any symlink-backed object exposed by `rclone serve http`/`webdav`/etc (backed by `backend/local` with `--links` enabled) to deterministically panic the request-handling goroutine. Go's `net/http` recovers panics per-connection by default, so this fails the one request/connection rather than crashing the whole server process, and no file handle is left open (the panic occurs before any read handle is acquired) - but it is fully deterministic and remotely triggerable with no authentication or race window needed, unlike some other panic-recovery findings.\n\n### Fix\nClamp `offset` to the length of the target string before slicing, matching how a real file read past EOF behaves (an empty read):\n```go\nif offset > int64(len(linkdst)) {\n\toffset = int64(len(linkdst))\n}\n```\nNote: the shared `RangeOption.Decode()` also has a related, unaddressed issue - `limit = o.End - o.Start + 1` can itself overflow to a large negative number for a huge `End` - but a fix attempted there during this investigation broke `fs/operations/reopen.go`'s `NewReOpen`, which calls `Decode` with its `h.end` field still at its zero value at that point in construction. Flagged for awareness but not changed here to keep this patch minimal and low-risk.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Go",
"name" : "github.com/rclone/rclone"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "1.75.1"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 1.75.0"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/rclone/rclone/security/advisories/GHSA-p6m2-r3w9-mpxw"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-88015"
}, {
"type" : "WEB",
"url" : "https://github.com/rclone/rclone/commit/28bf49d66f94acc3f4f7f318504a706686281af9"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/rclone/rclone"
}, {
"type" : "WEB",
"url" : "https://github.com/rclone/rclone/releases/tag/v1.75.1"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-190", "CWE-248" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-09-10T22:49:27Z",
"nvd_published_at" : "2026-09-10T16:18:08Z"
}
}