Skip to content
Heist/ feed
LowFix available

rclone local `--metadata` applies attacker-controlled mode/uid - setuid binary planted from an untrusted remote

Type: advisorySource: OSV2 source records

### Summary When writing an object with metadata, the local backend applies the source-supplied `mode`, `uid`, and `gid` verbatim: it parses `mode` as an octal integer and passes it straight into `os.Chmod(o.path, os.FileMode(umode))`, and passes `uid`/`gid` straight into `os.Chown`. The value is never masked to permission bits, so any value with Go's `ModeSetuid` (1<<23) or `ModeSetgid` (1<<22) bit set causes the setuid/setgid bit to be applied. Because both the file content and its metadata come from the (attacker-controlled) source remote, an attacker stores a binary of their choosing with `mode = 40000755` (and `uid = 0`); when the victim runs `rclone copy -M : /dest`, rclone writes the attacker's binary and makes it setuid. If the victim runs rclone as root (typical for system backup/restore), the `uid=0` chown plus setuid produces a root-owned setuid binary with attacker content — any local user then escalates to root. When rclone runs as a non-root service user, the planted setuid binary is owned by that user, giving any local user that user's privileges (lateral escalation / persistent backdoor). ### Details `backend/local/metadata.go`, `writeMetadataToFile()`: ```go uid, hasUID := o.parseMetadataInt(m, "uid", 10) gid, hasGID := o.parseMetadataInt(m, "gid", 10) if hasUID { ... err = os.Chown(o.path, uid, gid) // source-controlled owner, no same-uid guard } mode, hasMode := o.parseMetadataInt(m, "mode", 8) if hasMode && mode >= 0 { umode := uint(mode) if umode <= math.

Announced Group revision 1
Original source ↗

GHSA-945v-v9p3-v5xw

Primary source · Revision 1

Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.

Security context

Source reference: osv:GHSA-945v-v9p3-v5xw

github.com/rclone/rclone

Source reference: /affected/0/package/name

Affected versions
Not stated in this record
Fixed versions
1.74.4

Source reference: /affected/0/ranges

Prerequisites
Not stated in this record

Structured affected-version data

Original package identities and version rules from this source.

[
  {
    "ranges": [
      {
        "type": "SEMVER",
        "events": [
          {
            "introduced": "0"
          },
          {
            "fixed": "1.74.4"
          }
        ]
      }
    ],
    "package": {
      "name": "github.com/rclone/rclone",
      "purl": "pkg:golang/github.com/rclone/rclone",
      "ecosystem": "Go"
    },
    "database_specific": {
      "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/08/GHSA-945v-v9p3-v5xw/GHSA-945v-v9p3-v5xw.json",
      "last_known_affected_version_range": "<= 1.74.3"
    }
  }
]
Related CVEs
CVE-2026-79783

Source reference: /aliases

Publisher severity

low

Source reference: /database_specific/severity

Linked CVE context

These ratings describe the referenced vulnerabilities and products. They are not a severity rating for every application using this dependency.

Event
#15286 · Revision 1
Added to Heist Feed
Publisher date
Read the original announcement

GO-2026-6190

Revision 1

Unsafe file permission restoration from metadata in github.com/rclone/rclone

Unsafe file permission restoration from metadata in github.com/rclone/rclone

Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.

Security context

Source reference: osv:GO-2026-6190

github.com/rclone/rclone

Source reference: /affected/0/package/name

Affected versions
Not stated in this record
Fixed versions
1.74.4

Source reference: /affected/0/ranges

Prerequisites
Not stated in this record

Structured affected-version data

Original package identities and version rules from this source.

[
  {
    "ranges": [
      {
        "type": "SEMVER",
        "events": [
          {
            "introduced": "0"
          },
          {
            "fixed": "1.74.4"
          }
        ]
      }
    ],
    "package": {
      "name": "github.com/rclone/rclone",
      "purl": "pkg:golang/github.com/rclone/rclone",
      "ecosystem": "Go"
    },
    "database_specific": {
      "source": "https://vuln.go.dev/ID/GO-2026-6190.json"
    },
    "ecosystem_specific": {
      "imports": [
        {
          "path": "github.com/rclone/rclone/backend/local",
          "symbols": [
            "Directory.SetMetadata",
            "Fs.Copy",
            "Fs.MkdirMetadata",
            "Fs.Move",
            "Fs.Put",
            "Fs.PutStream",
            "Object.SetMetadata",
            "Object.Update",
            "Object.writeMetadataToFile"
          ]
        }
      ]
    }
  }
]
Related CVEs
CVE-2026-79783

Source reference: /aliases

Publisher severity

No explicit severity was provided.

Linked CVE context

These ratings describe the referenced vulnerabilities and products. They are not a severity rating for every application using this dependency.

CVE-2026-79783 · Low

github.com/rclone/rclone

Event
#15287 · Revision 1
Added to Heist Feed
Publisher date
Read the original announcement