Loading...
Skip to main content

CVE-2026-54917 — SeaweedFS: Path traversal in...

HIGH

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

Published August 12, 2026Updated September 25, 2026Source: osv

Summary

## 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) variants are equivalent, because gorilla/mux URL-decodes captured variables and `NormalizeObjectKey` folds `\` to `/` before the path is used. ## Affected components - S3 API gateway (`weed s3`, and the S3 endpoint embedded in `weed server`) - Iceberg REST catalog gateway ## Affected versions All releases prior to **4.30**. ## Patched version **4.30** and later. ## Proof of concept With a bucket `evil-bucket` containing `secret.txt`, and a caller that only has (or needs no) access to `bucket-A`: ``` GET /bucket-A/../evil-bucket/secret.txt HTTP/1.1 Host: <gateway> ``` The response returns the contents of `evil-bucket/secret.txt`. The encoded form `GET /bucket-A/%2e%2e/evil-bucket/secret.txt` behaves identically. ## Remediation Upgrade to SeaweedFS **4.30** or later. The fix adds a validation middleware to both gateway routers that rejects any captured path variable containing a `.` or `..` segment, a NUL byte, an embedded slash/backslash in single-segment slots, or an empty captured value, before any handler runs. ## Workarounds For deployments that cannot upgrade immediately, place a reverse proxy in front of the gateway that normalizes the request path and rejects requests whose path contains `..`, `%2e%2e`, or backslash sequences. Note that disabling auth removes the only remaining barrier, so do not rely on `enableAuth=false` deployments being protected by anything. ## Resources - Fix: https://github.com/seaweedfs/seaweedfs/pull/9687 (commit `dd1b428`) ## Credits Reported responsibly by **Denis Abashkin** ([@dadbravo](https://github.com/dadbravo)).

Advisory Timeline

  • First published August 12, 2026 (61 days ago).
  • Last revised September 25, 2026 — 44 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Go
Update github.com/seaweedfs/seaweedfs to 0.0.0-20260526080459-dd1b4287899e or later
go get github.com/seaweedfs/seaweedfs@v0.0.0-20260526080459-dd1b4287899e

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (1)

Affects 1 ecosystem: go (1).

PackageEcosystemAffectedFixed In
github.com/seaweedfs/seaweedfs
go
All versions0.0.0-20260526080459-dd1b4287899e

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 10.0 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
—
Confidentiality
—
Integrity
—
Availability
—

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N

Frequently Asked Questions

What is CVE-2026-54917?
SeaweedFS: Path traversal in the S3 and Iceberg REST gateways allows cross-bucket access This vulnerability has been assigned a severity rating of HIGH (CVSS score: 10.0/10).
How do I check if my project is affected by CVE-2026-54917?
CVE-2026-54917 affects github.com/seaweedfs/seaweedfs. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-54917 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
10.0

Exploitation is straightforward and causes maximum impact. Patch immediately.

Also Known As

GHSA-w62w-66v9-vvgv
BIT-seaweedfs-2026-54917
BIT-seaweedfs-2026-58372
CVE-2026-58372
GO-2026-6221

Related CVEs

  • CVE-2026-72920
    CRITICAL

    SeaweedFS: Unauthenticated filer IAM gRPC service grants S3 administrative control

  • CVE-2026-73080
    CRITICAL

    SeaweedFS: Unauthenticated SSRF with response read-back via VolumeServer.FetchAndWriteNeedle

  • CVE-2026-107809
    HIGH

    Nginx-UI AuthRequired token cookie fallback enables CSRF against management APIs

  • CVE-2026-107813
    HIGH

    Nginx UI: Incomplete fix of CVE-2026-84315 - the api/cluster router was not - wrapped in RequireSecureSession, so those sensitive mutations run without OTP step-up

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies