Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify RustFS instance with public S3 endpoint
-
DeliveryDiscover or guess bucket name
-
ExploitSend GET /<bucket>?versions= without credentials
-
ExecutionAuthorization fallback skips RestrictPublicBuckets check
-
ImpactReceive full object version metadata listing
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Two simultaneous operator-configured conditions must be present: (1) the target bucket must have a bucket policy that explicitly grants s3:ListBucket to anonymous principals (Principal: "*"), and (2) the operator must have separately enabled RestrictPublicBuckets via put_public_access_block on that same bucket. The vulnerability is specifically in the authorization fallback for GET /<bucket>?versions= - no other S3 API endpoints are affected by this bypass. Exploitation is limited to object version metadata (keys, version IDs, ETags, timestamps) and does not permit reading object content; GetObject requests are correctly denied. Default RustFS deployments without anonymous bucket policies are not affected. The CVSS vector PR:N confirms no authentication is required once the target configuration exists. |
| Impact | The CVSS 5.3 score (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) reflects unauthenticated network access with limited confidentiality impact - only version metadata is exposed, not object contents, since GetObject requests are correctly denied. However, the AC:L rating warrants scrutiny: successful exploitation requires two simultaneous operator-configured conditions (an anonymous s3:ListBucket policy grant and RestrictPublicBuckets enabled), which is a relatively narrow configuration window rather than a universally exploitable default. In practice this means the population of immediately vulnerable deployments is smaller than the raw CVSS suggests, though operators who have enabled RestrictPublicBuckets are precisely those who intended to block public access and are most likely to be surprised by the bypass. No EPSS data was available in the provided intelligence. The vulnerability is absent from CISA KEV and no public exploit code has been released, though the publicly visible commit diff makes reproduction straightforward for an attacker targeting a known-vulnerable instance. The version-metadata disclosure could reveal internal naming conventions, versioning frequency, and object lifecycle patterns useful for reconnaissance against higher-value targets. |
| Exploit ScenarioDerived | An anonymous attacker who knows or guesses the name of a RustFS bucket sends a GET request to /<bucket>?versions= against an instance where the bucket policy contains an s3:ListBucket Allow for all principals and the operator has enabled RestrictPublicBuckets. The server returns HTTP 200 with an XML body listing all object version IDs, keys, last-modified timestamps, and ETags - data the operator intended to block - while a parallel GetObject request for the same bucket is correctly denied with HTTP 403. No credentials are required and the attack is a single HTTP request. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 12, 2026
Object version metadata exposure in RustFS allows anonymous HTTP clients to enumerate all stored object versions via GET /<bucket>?versions= even after an operator enables RestrictPublicBuckets. The authorization fallback in rustfs/src/storage/access.rs grants listing through an s3:ListBucket check but returns before applying the public-access block controls, silently contradicting the operator's intent to restrict anonymous access. No public exploit has been identified and the vulnerability is not listed in CISA KEV; the vendor-released fix is available in 1.0.0-beta.12.
RemediationAI
Upgrade to RustFS 1.0.0-beta.12, which corrects the authorization fallback path so that RestrictPublicBuckets and deny_anonymous_table_data_plane_if_needed are applied consistently to ListObjectVersions requests. The fix is traceable to commit 92f83bfe155d8a3b9cdd903086e5b28d52339efb. If an immediate upgrade is not feasible, remove anonymous s3:ListBucket Allow grants from bucket policies for any bucket containing versioned objects with sensitive metadata - this eliminates the fallback trigger, though it also removes legitimate anonymous listing access where it was intentional. A second compensating control is to disable object versioning on sensitive buckets, which removes the ?versions= endpoint as an attack surface; however, this permanently loses version history and has significant operational trade-offs. There is no network-layer workaround because the endpoint is part of the standard S3 API surface. Vendor advisory: https://github.com/rustfs/rustfs/security/advisories/GHSA-x298-9x87-fvjq.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
RustFS is an S3-compatible distributed object storage system written in Rust. The flaw resides in rustfs/src/storage/access.rs, where anonymous ListObjectVersions requests lack a direct bucket-policy grant and fall back to an s3:ListBucket permission check. This fallback code path returns before reaching the policy_allowed branch responsible for invoking deny_anonymous_table_data_plane_if_needed and enforcing the RestrictPublicBuckets public-access block. Consequently, the operator-level public-access control - designed to override bucket-level allow grants - is never evaluated for the ?versions= endpoint. The fix commit (92f83bfe155d8a3b9cdd903086e5b28d52339efb) also refactors the condition-quantifier logic in crates/policy/src/policy/function.rs, replacing a boolean for_all flag with a typed Quantifier enum to ensure consistent policy evaluation across all authorization paths. Root cause is CWE-863 (Incorrect Authorization): equivalent privileged operations (list objects vs. list object versions) are subject to inconsistent authorization enforcement across diverging code paths. The affected CPE is cpe:2.3:a:rustfs:rustfs:*:*:*:*:*:*:*:*.
Know when Rustfs gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
AC:H reflects that exploitation requires two specific operator-configured conditions simultaneously present, which are beyond attacker control and constitute a narrow non-default configuration.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
RustFS is a distributed object storage system built in Rust. Prior to 1.0.0-beta.12, an anonymous ListObjectVersions request in rustfs/src/storage/access.rs that lacks a direct bucket-policy grant falls back to an s3:ListBucket check and returns before the policy_allowed path applies deny_anonymous_table_data_plane_if_needed and RestrictPublicBuckets, so a bucket that permits anonymous listing can continue exposing version listings after an operator enables the public-access control. The bypass affects GET /<bucket>?versions= and can disclose object version metadata even though equivalent GetObject requests are denied. This issue is fixed in version 1.0.0-beta.12.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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
Path traversal in the RustFS /rustfs/rpc/read_file_stream endpoint allows an attacker to read arbitrary files from the h
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
RustFS is a distributed object storage system built in Rust. [CVSS 4.0 MEDIUM]
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
EUVD-2026-57235
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB