Skip to content
Heist/ feed
CriticalFix available

SeaweedFS: Path traversal in the S3 and Iceberg REST gateways allows cross-bucket access

Type: advisorySource: OSV1 source record

## Summary The S3 API gateway and the Iceberg REST catalog gateway construct their routers with `mux.NewRouter().SkipClean(true)`. With path cleaning disabled, a `..` segment inside the URL survives routing, so a request such as: ``` GET /bucket-A/../evil-bucket/key ``` is matched as `bucket=bucket-A`, `object=../evil-bucket/key`. The captured object key is then joined into a filer path with `util.JoinPath` (S3) / `path.Join` (Iceberg), which collapse the `..` server-side, so the actual read or write lands in `evil-bucket`. The captured path variables were never validated for traversal segments before reaching the handlers, so bucket isolation depended on downstream checks rather than on the path itself. ## Impact - **With authentication disabled** (`enableAuth=false`): direct cross-bucket read and write. An object key containing `..` resolves to and operates on a different bucket than the one named in the request path. - **With authentication enabled** (`enableAuth=true`): an authorization confused-deputy. IAM evaluates the policy against the mux `{bucket}` variable (`bucket-A`) in `iam.authRequestWithAuthType`, while the I/O is performed against the traversed target (`evil-bucket`). A principal authorized for one bucket can therefore reach objects in another bucket it has no grant for. This breaks tenant isolation. The same class of traversal applies to the Iceberg REST catalog's `{prefix}`, `{namespace}`, and `{table}` path variables. `%2e%2e`-encoded and `..\` (backslash)

Announced Source revision 1
Original source ↗

GHSA-w62w-66v9-vvgv

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-w62w-66v9-vvgv

github.com/seaweedfs/seaweedfs

Source reference: /affected/0/package/name

Affected versions
Not stated in this record
Fixed versions
0.0.0-20260526080459-dd1b4287899e

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": "0.0.0-20260526080459-dd1b4287899e"
          }
        ]
      }
    ],
    "package": {
      "name": "github.com/seaweedfs/seaweedfs",
      "purl": "pkg:golang/github.com/seaweedfs/seaweedfs",
      "ecosystem": "Go"
    },
    "database_specific": {
      "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/08/GHSA-w62w-66v9-vvgv/GHSA-w62w-66v9-vvgv.json"
    }
  }
]
Related CVEs
CVE-2026-54917

Source reference: /aliases

CVE-2026-58372

Source reference: /aliases

Publisher severity

high

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
#15248 · Revision 1
Added to Heist Feed
Publisher date
Read the original announcement