Skip to content
seaweedfsGHSA-w62w-66v9-vvgv

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

HighCVE-2026-54917 · Published Aug 12, 2026 · updated Sep 25, 2026

GitHub advisory

Affected versions

PackageAffectedFixed in
github.com/seaweedfs/seaweedfs
Go
< 0.0.0-20260526080459-dd1b4287899e0.0.0-20260526080459-dd1b4287899e
Details and references

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

CVSS 4.0
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
Severity from
GitHub (reviewed advisory)
Weakness
CWE-22
Also known as
BIT-seaweedfs-2026-54917, BIT-seaweedfs-2026-58372, CVE-2026-54917, CVE-2026-58372, GO-2026-6221

More seaweedfs advisories

All
DateAdvisory
Aug 11SeaweedFS: Unauthenticated SSRF with response read-back via VolumeServer.FetchAndWriteNeedle
CVE-2026-73080Critical9.3fixed in 0.0.0-20260512171120-69da20bdaec9
Aug 28SeaweedFS: Improper authorization in the S3Tables / Iceberg REST management API lets a low-privileged S3 user enumerate administrator-owned table buckets
CVE-2026-55873Medium4.3fixed in 0.0.0-20260614205536-b13463880c1f
Aug 28SeaweedFS: Path traversal in the S3 gateway X-Amz-Copy-Source header allows cross-bucket object read
CVE-2026-55874High7.7fixed in 0.0.0-20260612000715-b44cf51fe931
Sep 2SeaweedFS: Unauthenticated filer IAM gRPC service grants S3 administrative control
CVE-2026-72920Critical9.8fixed in 0.0.0-20260512171108-5e8f99f40a8a
Sep 2SeaweedFS: Filer JWT allowed_prefixes literal prefix match allows cross-tenant access to sibling paths
CVE-2026-72921High8.1fixed in 0.0.0-20260512171048-05ed5c9ae8a2
May 162025SeaweedFS Vulnerable to SQL Injection
CVE-2024-40120Medium6.5fixed in 0.0.0-20240625155419-9ac102336200

Critical advisories by email

Wednesdays: the week’s critical and high advisories in the AI and data stack, with the fixed versions. Only in weeks that have some.

Double opt-in. Unsubscribe any time.