Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
Requires an authenticated FTP login (PR:L) over the network; bypassing the IAM authorization boundary is a scope change (S:C) with read-only data exposure (C:H, I:N, A:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
RustFS is a distributed object storage system built in Rust. From 1.0.0-alpha.1 until 1.0.0-beta.9, when the FTP frontend is enabled, the FTP read and probe handlers dispatch directly to the storage backend without ever calling the IAM authorization function that the FTP write/list handlers (and the entire HTTP S3 path) use. As a result, any user who can authenticate to the FTP listener - including a user whose IAM policy contains an explicit Deny on s3:GetObject - can read (RETR) and stat (SIZE/MDTM) any object in any bucket, and probe any bucket (CWD), completely regardless of their IAM policy. This vulnerability is fixed in 1.0.0-beta.9.
AnalysisAI
Authorization bypass in RustFS (1.0.0-alpha.1 through pre-beta.9 builds) lets any user able to authenticate to the optional FTP listener read and stat arbitrary objects in any bucket, even when their IAM policy explicitly Denies s3:GetObject. The FTP read/probe handlers (RETR, SIZE, MDTM, CWD) dispatch straight to the storage backend and skip the IAM authorization check enforced everywhere else, breaking tenant/object isolation. There is no public exploit identified at time of analysis, no CISA KEV listing, and no EPSS score was provided.
Technical ContextAI
RustFS is a distributed, S3-compatible object storage system written in Rust. Beyond the HTTP S3 API it exposes an optional FTP frontend so clients can interact with stored objects over FTP. Normally every data-plane operation funnels through a central IAM authorization function that evaluates the caller's policy (Allow/Deny on actions such as s3:GetObject). This flaw is a CWE-862 Missing Authorization: the FTP write and list handlers and the entire HTTP S3 path correctly invoke that IAM check, but the FTP read handler (RETR) and probe handlers (SIZE, MDTM for stat; CWD for bucket existence) call the storage backend directly without it. The CPE cpe:2.3:a:rustfs:rustfs:*:*:*:* confirms the affected component is the RustFS application itself across the alpha/beta release line up to 1.0.0-beta.9.
RemediationAI
Vendor-released patch: upgrade RustFS to 1.0.0-beta.9, which adds the missing IAM authorization call to the FTP read and probe handlers. If you cannot upgrade immediately, the most effective compensating control is to disable the FTP frontend entirely and serve data only over the HTTP S3 path, which already enforces IAM (trade-off: any legitimate FTP-based workflows break and must move to S3 clients). Where FTP must stay enabled, restrict network access to the FTP listener to trusted hosts and tightly control who holds FTP credentials, recognizing that this only narrows-does not close-the bypass, since any authenticated FTP user can still read denied objects. Refer to the advisory at https://github.com/rustfs/rustfs/security/advisories/GHSA-3g29-xff2-92vp for details.
RustFS (alpha.13 to alpha.78) has a path traversal in /rustfs/rpc/read_file_stream that allows reading arbitrary files o
RustFS (alpha.13 to alpha.78) has a privilege escalation where restricted service accounts can self-issue unrestricted c
Stored XSS in RustFS distributed object storage system before 1.0.0-alpha.83. Malicious JavaScript persists in stored ob
Incorrect IAM permission validation in RustFS prior to version 1.0.0-alpha.79 permits principals with export-only permis
RustFS versions 1.0.0-alpha.1 through 1.0.0-alpha.79 expose the shared HMAC secret in server logs when processing invali
Authentication bypass in RustFS distributed object storage (versions prior to 1.0.0-beta.2) allows unauthenticated remot
Privilege escalation in RustFS distributed object storage before 1.0.0-beta.2 lets a low-privileged user holding ImportI
Stored cross-site scripting in RustFS Console (0.1.7 through 0.1.9) lets an attacker upload an HTML payload disguised as
Privilege escalation in RustFS prior to version 1.0.0-beta.11 allows any authenticated user holding CreateServiceAccount
Unauthenticated denial of service and information disclosure in RustFS distributed object storage prior to version 1.0.0
License-enforcement bypass in RustFS distributed object storage (versions prior to 1.0.0-beta.2) stems from a hardcoded
Cross-tenant object injection in RustFS 1.0.0-beta.4 lets a tenant holding only PutObject rights on their own bucket wri
Same weakness CWE-862 – Missing Authorization
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-39864