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

Published Jun 25, 2026
·
Updated

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).

Other sources

SeaweedFS is a distributed storage system for object storage (S3), file systems, and Iceberg tables. Prior to 4.30, 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. This vulnerability is fixed in 4.30.

MITRE

Affected Software

3 affected componentsFixes available
SeaweedFS<4.30
seaweedfs seaweedfs<4.30
go/github.com/seaweedfs/seaweedfs<0.0.0-20260526080459-dd1b4287899e
0.0.0-20260526080459-dd1b4287899e

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/github.com/seaweedfs/seaweedfs to a version that resolves this vulnerability.

    Fixed in 0.0.0-20260526080459-dd1b4287899e
  2. Upgrade

    Upgrade seaweedfs/seaweedfs to a version that resolves this vulnerability.

    Fixed in 4.30
  3. Configuration

    For deployments affected by the path-cleaning bypass behavior (prior to 4.30), do not rely on mux.NewRouter().SkipClean(true); upgrade to 4.30+ instead, where a validation middleware rejects captured traversal segments before handlers run.

    SeaweedFS gateway (S3 API gateway and Iceberg REST catalog gateway) SkipClean = true (current/affected behavior)
  4. Compensating control

    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.

Event History

Jun 25, 2026
CVE Published
via MITRE·06:41 PM
Data Sourced
via MITRE·06:41 PM
DescriptionWeakness
Data Sourced
via NVD·07:16 PM
RemedyDescriptionSeverityWeaknessAffected Software
Aug 12, 2026
Advisory Published
via GitHub·07:19 PM
Data Sourced
via GitHub·07:19 PM
DescriptionWeaknessAffected Software

Frequently Asked Questions

1

What is the severity of CVE-2026-54917?

CVE-2026-54917 has a risk rating of 71, indicating a significant vulnerability that could lead to security issues.

2

How do I fix CVE-2026-54917?

To fix CVE-2026-54917, upgrade your SeaweedFS to version 4.30 or later, where the vulnerability has been addressed.

3

What impact does CVE-2026-54917 have on SeaweedFS users?

CVE-2026-54917 allows for path traversal attacks that can result in unauthorized cross-bucket access in SeaweedFS.

4

Is CVE-2026-54917 a remote code execution vulnerability?

CVE-2026-54917 is not a remote code execution vulnerability; it specifically pertains to path traversal and unauthorized data access.

5

What components of SeaweedFS are affected by CVE-2026-54917?

The S3 API gateway and the Iceberg REST catalog gateway of SeaweedFS are affected by CVE-2026-54917.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203