
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-77368 is an authenticated cross-prefix Insecure Direct Object Reference (IDOR) vulnerability in the SeaweedFS filer's TUS resumable-upload handler, classified as an Authorization Bypass Through User-Controlled Key (CWE-639). It affects SeaweedFS version 4.39 and is fixed in version 4.40. A low-privilege tenant who obtains another tenant's TUS session identifier can hijack that session to write attacker-controlled content to filer paths their own JWT explicitly forbids, delete other tenants' sessions, or read upload metadata. It carries a CVSS v3.1 base score of 7.6 (High) (GitHub Advisory).
The root cause is that checkTusJwtAuthorization in weed/server/filer_server_tus_handlers.go only populated the scopedPaths list (used for JWT allowed_prefixes enforcement) during session creation (HTTP POST). For HEAD, PATCH, and DELETE verbs acting on an existing session by its UUID, scopedPaths remained empty, causing the prefix-check loop in checkJwtAuthorization to never execute and the function to return true — authorizing the request on JWT signature and method alone without verifying the session's stored TargetPath against the caller's AllowedPrefixes. The session UUID was incorrectly treated as an authorization boundary, but it is obtainable by a legitimate tenant from a leaked Location header, server logs, or a shared upload link. A self-contained Go integration PoC (test/tus/tus_idor_auth_test.go) was included in the advisory and reproduced end-to-end against a real cluster built from vulnerable 4.39 source (GitHub Advisory, Fix Commit ce82e3a).
Successful exploitation allows an authenticated low-privilege tenant to write attacker-controlled content to any filer path — including S3 /buckets/... paths — that their own JWT explicitly forbids, effectively bypassing multi-tenant prefix isolation. Additionally, the attacker can DELETE other tenants' in-progress upload sessions (denial of service against uploads) and use HEAD to read upload progress and declared size (information disclosure). The vulnerability is bounded by the requirement for a valid filer write JWT and knowledge of a target session UUID, but in multi-tenant deployments relying on allowed_prefixes as a tenant boundary, the impact is a cross-tenant arbitrary write (GitHub Advisory).
A working PoC was developed and reproduced end-to-end by the reporter (AdrianAcala) against a real SeaweedFS 4.39 cluster using Docker and curl, and a Go integration test is included in the fix commit. Exploitation requires a valid (low-privilege) filer write JWT and knowledge of a victim's TUS session UUID — the latter is obtainable from a leaked Location response header, server logs, or a shared upload link. The vulnerability only affects deployments with both jwt.filer_signing.key configured and TUS uploads enabled. No in-the-wild exploitation has been reported, and the EPSS score is 0.0. It is not listed in the CISA KEV catalog (GitHub Advisory).
/buckets/allowed), and identify a SeaweedFS 4.39 deployment with jwt.filer_signing.key configured and TUS uploads enabled.Location response header (e.g., from shared upload links, server logs, or network interception). The UUID is of the form /.tus/.uploads/<uuid>./buckets/secret/victim.bin) with the attacker's token returns HTTP 401, confirming JWT enforcement is active./.tus/.uploads/<victim-session-uuid> with the attacker's JWT, including headers Tus-Resumable: 1.0.0, Upload-Offset: 0, Content-Type: application/offset+octet-stream, and the attacker-controlled payload body. The server returns HTTP 204 without checking the session's TargetPath against the attacker's AllowedPrefixes.completeTusUpload calls CreateEntry at the session's stored TargetPath (e.g., /buckets/secret/victim.bin) with the attacker's content, achieving an arbitrary cross-prefix write./.tus/.uploads/<uuid> from a tenant whose JWT allowed_prefixes does not match the session's target path; cross-tenant TUS session interactions visible in filer access logs./.tus/.uploads/ endpoints succeeding (HTTP 204/200) for tokens scoped to a different prefix than the session's TargetPath; absence of jwt path not allowed log entries for such requests (pre-patch behavior)./buckets/secret/) that the writing tenant's JWT should not permit; file timestamps inconsistent with legitimate tenant activity.Upgrade SeaweedFS to version 4.40, which resolves the issue by extending checkTusJwtAuthorization to resolve the session's stored TargetPath for HEAD, PATCH, and DELETE verbs and scope-check it against the caller's AllowedPrefixes, failing closed on any resolution error. The fix also splits JWT authentication from path authorization, enforces canonical UUID session IDs, and revalidates the pinned session before completing an upload. No configuration-based workaround is available for version 4.39; the only mitigation short of upgrading is to disable TUS uploads or remove jwt.filer_signing.key (which removes JWT enforcement entirely and is not recommended for multi-tenant deployments) (GitHub Advisory, Fix Commit ce82e3a, Fix Commit fa549e9).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."