CVE-2026-49980: Rclone: Unauthenticated command execution in `rclone rcd --rc-serve` via inline remote instantiation, bypassing CVE-2026-41179 fix
Summary
rclone rcd --rc-serve accepts unauthenticated GET and HEAD requests to paths of the form:
text /[remote:path]/object
The remote value is parsed from the URL and passed to normal backend initialization. Inline remote configuration can set backend options that execute local commands during initialization. As a result, a single unauthenticated GET or HEAD request can execute a command as the rclone process user.
Versions from 1.55.0 onwards are vulnerable to command execution. Earlier versions (from 1.46.0) are vulnerable to the unauthenticated local file read described under "Additional impact" but not to command execution, because inline backend option overrides did not exist until 1.55.0.
Preconditions
Preconditions for this vulnerability are:
- The rclone remote control API must be enabled, either by the --rc flag or by running the rclone rcd server - The remote control API must be reachable by the attacker - by default rclone only serves the rc to localhost unless the --rc-addr flag is in use - The rc must have been deployed without global RC HTTP authentication - so not using --rc-user/--rc-pass/--rc-htpasswd/etc - The --rc-serve flag must be in use
Impact
An unauthenticated network attacker who can reach the RC HTTP listener can execute commands as the rclone process user.
Additional impact observed during testing:
- GET and HEAD both trigger backend initialization. - The same path allows unauthenticated local file read through inline local remotes. - Inline global. options can mutate process-wide rclone configuration, including global.httpproxy. - Browser subresource requests can also trigger the issue against a localhost-only RC listener. In testing, Firefox triggered the payload from a public HTTPS page containing only an <img> tag pointing at http://127.0.0.1:5572/.... This is an additional impact multiplier, not the primary attack precondition.
Mitigations / Workarounds
- Upgrade to rclone 1.74.3 (or 1.75.0 when released). - Or, configure HTTP authentication on the rc with --rc-user/--rc-pass or --rc-htpasswd, which has always been the recommended deployment. - Or, do not use --rc-serve if file serving is not needed.
The Fix
The vulnerabilities in this advisory have been fixed by two commits:
- rc: fix unauthenticated command execution via --rc-serve inline remotes - rc: stop global. connection string options changing config
Other sources
Rclone is a command-line program to sync files and directories to and from different cloud storage providers. From 1.46.0 until 1.74.3, rclone rcd --rc-serve accepts unauthenticated GET and HEAD requests to paths of the form: /[remote:path]/object. The remote value is parsed from the URL and passed to normal backend initialization. Inline remote configuration can set backend options that execute local commands during initialization. As a result, a single unauthenticated GET or HEAD request can execute a command as the rclone process user. This vulnerability is fixed in 1.74.3.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
go/github.com/rclone/rcloneto a version that resolves this vulnerability.Fixed in 1.74.3 - Upgrade
Upgrade
rcloneto a version that resolves this vulnerability.Fixed in 1.74.3 - Upgrade
Upgrade
rcloneto a version that resolves this vulnerability.Fixed in 1.75.0 - Configuration
Ensure the `--rc-serve` flag is in use (per advisory precondition for the vulnerable path: /[remote:path]/object).
rclone rc (rclone rcd --rc-serve) --rc-serve = in use - Configuration
Configure HTTP authentication on the rc using `--rc-user`/`--rc-pass` (or `--rc-htpasswd`/related `--rc-htpasswd` option as mentioned) so unauthenticated GET/HEAD requests cannot execute commands.
rclone rc (rclone rcd --rc) rc listener authentication = enabled - Configuration
Do not expose the RC HTTP listener beyond localhost: avoid using `--rc-addr` so the rc remains reachable only on localhost by default.
rclone rc (rclone rcd) --rc-addr = not used (localhost-only) - Configuration
Stop using inline `global.*` options in remote configuration/connection strings because they can mutate process-wide rclone configuration (including `global.http_proxy`).
rclone rc (rclone rcd --rc-serve) global.* inline remote options = disabled/avoided - Configuration
If file serving is not needed, do not use `--rc-serve` to reduce exposure to the vulnerable unauthenticated GET/HEAD paths.
rclone rc (rclone rcd) --rc-serve = not used (when file serving not needed)
Event History
Frequently Asked Questions
What is the severity of CVE-2026-49980?
The severity of CVE-2026-49980 is critical with a score of 9.8.
What risks are associated with CVE-2026-49980?
CVE-2026-49980 poses significant risks as it allows unauthenticated access to sensitive data through `GET` and `HEAD` requests.
How do I fix CVE-2026-49980?
To fix CVE-2026-49980, disable unauthenticated access by configuring proper authentication for the `rclone rcd --rc-serve` command.
Which software is affected by CVE-2026-49980?
CVE-2026-49980 affects the rclone software from the repository go/github.com/rclone/rclone.
When was CVE-2026-49980 published?
CVE-2026-49980 was published on June 16, 2026.