Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain IAM credential with s3:GetObject grant
-
DeliveryIdentify target bucket with versioning enabled
-
ExploitEnumerate or infer a historical versionId
-
ExecutionSend GetObject/CopyObject/UploadPartCopy request with explicit versionId
-
PersistRustFS authorizes incorrectly against s3:GetObject
-
ImpactHistorical object version content disclosed
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
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 | Exploitation requires an authenticated IAM principal holding at least s3:GetObject permission on the target bucket or object prefix - unauthenticated access is not possible, as confirmed by PR:L in the CVSS vector. The RustFS deployment must have S3 object versioning enabled on the target bucket; without versioning, there are no historical versions to disclose. IAM policies must differentiate between s3:GetObject and s3:GetObjectVersion for the exposure to be meaningful - deployments that grant both actions uniformly are not further harmed. The attacker must know or be able to enumerate a valid versionId for a specific historical object; versionId discovery may require list-version permissions (s3:ListBucketVersions), which is an additional prerequisite if the versionId is not otherwise known. The bypass is limited strictly to confidentiality: no write, delete, or administrative capability is obtained through this flaw. |
| Impact | The CVSS 6.5 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N) accurately characterizes the threat profile: the attack is network-accessible with low complexity, requires only a low-privilege IAM credential, and produces high confidentiality impact while leaving integrity and availability unaffected. Real-world impact is bounded by two deployment prerequisites: object versioning must be enabled on the target bucket, and IAM policies must distinguish between s3:GetObject and s3:GetObjectVersion grants - environments that issue broad, undifferentiated S3 access see no effective exposure. EPSS data is absent from the provided intelligence, so a numerical exploitation probability cannot be stated. The vulnerability is not listed in CISA KEV. No public exploit code is identified. The PR diff confirms the flaw was straightforward to introduce and equally straightforward to exploit by any credential holder aware of a target versionId, suggesting low attack complexity in permissive-but-not-fully-permissive IAM environments. |
| Exploit ScenarioDerived | An IAM principal configured with s3:GetObject but explicitly denied s3:GetObjectVersion sends a standard GetObject HTTP request to RustFS with a known versionId query parameter targeting a sensitive historical object version. RustFS evaluates the IAM check against s3:GetObject rather than s3:GetObjectVersion, the principal passes authorization, and the historical object content is returned in the response body. No exploit tooling beyond a standard S3-compatible client (e.g., aws-cli, boto3, or curl with the appropriate query string) is needed. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 12, 2026
Versioned object access control bypass in RustFS allows authenticated principals holding only s3:GetObject permission to read historical object versions by supplying an explicit versionId parameter on GetObject, CopyObject source, or UploadPartCopy source requests. The authorization boundary in access.rs conflated two distinct IAM actions - s3:GetObject and s3:GetObjectVersion - by always evaluating versioned reads against the former, effectively collapsing a privileged historical-version operation into an ordinary current-object read. No active exploitation has been confirmed (not in CISA KEV), and no public exploit code has been identified; however, the bypass is trivial to exercise for any valid IAM credential with bucket read access.
RemediationAI
Upgrade RustFS to version 1.0.0-beta.11 or later, which contains the corrected authorization logic applied across all three affected code paths in rustfs/src/storage/access.rs, as detailed in PR #5142 (https://github.com/rustfs/rustfs/pull/5142) and commit 81665617029e5e437ecf9dc70d8dcbbbf80cdbd1. The vendor advisory is at https://github.com/rustfs/rustfs/security/advisories/GHSA-3ppv-fx5m-m749. If immediate upgrade is not feasible, two compensating controls apply: first, audit IAM policies and ensure no principal is granted s3:GetObject on sensitive buckets without also explicitly granting s3:GetObjectVersion - this removes the practical impact of the bypass because the authorization gap only matters when the two actions carry different grants; second, temporarily disabling object versioning on sensitive buckets eliminates the historical-version attack surface, at the cost of losing version history protection and recoverability from accidental overwrites or deletes.
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 implements an S3-compatible IAM authorization model that mirrors AWS S3's distinction between s3:GetObject (read the current/latest version of an object) and s3:GetObjectVersion (read a specific historical object version). In versioned S3-compatible buckets, multiple revisions of the same key coexist; accessing a non-current version via an explicit versionId query parameter is intentionally gated behind the more privileged s3:GetObjectVersion action. The flaw (CWE-862: Missing Authorization) resided in rustfs/src/storage/access.rs, where the authorize_request call for all three affected operations - GetObject, CopyObject source selection, and UploadPartCopy source selection - unconditionally passed S3Action::GetObjectAction regardless of whether a versionId was present in the request. The fix introduced a versioned_read_action() function that inspects the versionId parameter and returns S3Action::GetObjectVersionAction when an explicit version is named, or S3Action::GetObjectAction when no version is specified. CPE string cpe:2.3:a:rustfs:rustfs:*:*:*:*:*:*:*:* confirms the flaw spans all releases prior to 1.0.0-beta.11.
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:L/UI:N/S:U/C:H/I:N/A:N
S3 API is network-reachable with low complexity; exploitation requires a valid IAM credential (PR:L); impact is confidentiality-only via historical version disclosure with no integrity or availability effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
RustFS is a distributed object storage system built in Rust. RustFS authorizes explicit versionId reads in GetObject, CopyObject sources, and UploadPartCopy sources with s3:GetObject instead of s3:GetObjectVersion, allowing principals without historical-version permission to disclose known historical object content. This issue is fixed in version 1.0.0-beta.11.
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-57227
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB