{"id":"EUVD-2026-39535","revision":"ef8001fd2b7c4281b9f552180705c505","records":[{"revision":"ef8001fd2b7c4281b9f552180705c505","observedAt":"2026-11-03T11:59:01.299+00:00","statement":{"source":"euvd","id":"EUVD-2026-39535","aliases":["CVE-2026-54917","GHSA-w62w-66v9-vvgv"],"title":"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 p…","description":"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.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 4.0","vector":"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","score":7.8,"severity":null}],"references":["https://github.com/seaweedfs/seaweedfs/security/advisories/GHSA-w62w-66v9-vvgv","https://github.com/seaweedfs/seaweedfs/pull/9687"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-39535","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Jun 25, 2026, 6:41:19 PM","dateUpdated":"Jun 25, 2026, 7:05:31 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-39535","identifiers":["EUVD-2026-39535","CVE-2026-54917","GHSA-w62w-66v9-vvgv"]},"retained":false,"historicalAffected":[]}],"coverage":[]}