Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with low-privilege credentials
-
DeliveryInspect target bucket policy for ForAllValues:StringNotEquals or ArnNotEquals on jwt:groups/jwt:roles
-
ExploitCraft JWT or request with partially overlapping group/role values
-
ExecutionSubmit request to restricted resource
-
PersistInverted quantifier logic causes Deny guardrail to evaluate as Allow
-
ImpactAccess confidential or writable resource
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 | Exploitation requires that the target RustFS deployment has at least one IAM policy using ForAllValues: or ForAnyValue: set qualifiers in combination with one of the five negated operators: StringNotEquals, StringNotEqualsIgnoreCase, StringNotLike, ArnNotEquals, or ArnNotLike. The attacker must be authenticated (CVSS PR:L - unauthenticated exploitation is not enabled by this flaw). The triggering condition further requires that the attacker's request values partially overlap with the policy's condition values - a fully disjoint or fully overlapping value set may not invert the result. Policies that use only non-negated operators (StringEquals, StringLike, ArnEquals) are entirely unaffected. Absent condition keys in requests (e.g., no jwt:groups claim present) also receive inverted ForAllValues/ForAnyValue treatment, which can cause vacuously-satisfied ForAllValues conditions to fail or vice versa. Deployments using jwt:groups or jwt:roles for RBAC-style group enforcement with negated exclusion conditions are the highest-risk configurations. |
| Impact | The official CVSS 8.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N) reflects network-accessible exploitation requiring only low-privilege authentication, with high confidentiality and integrity impact. However, AC:L warrants scrutiny: the vulnerability only activates when target IAM policies are specifically configured with negated operators (StringNotEquals, StringNotLike, etc.) combined with ForAllValues: or ForAnyValue: set qualifiers - this is not a default or ubiquitous configuration pattern. An independent assessment of AC:H is more appropriate, as the attacker depends on a non-default policy structure being present in the target environment. No EPSS data was provided in the input; exploitation probability is inferred as low-to-moderate given the policy configuration dependency. There is no CISA KEV listing, and no public exploit code is known. The product is in pre-1.0 beta, constraining real-world exposure. The most realistic high-risk scenario involves organizations using jwt:groups or jwt:roles for RBAC enforcement, where a Deny guardrail using ForAllValues:StringNotEquals silently inverts to an Allow. |
| Exploit ScenarioDerived | An authenticated low-privilege user identifies that a restrictive Deny policy uses ForAllValues:StringNotEquals on the jwt:groups condition key to exclude their group from a sensitive bucket. Because the policy engine incorrectly negates the aggregate result rather than each predicate, submitting a request with a jwt:groups claim that partially overlaps the excluded set causes the Deny evaluation to return the wrong boolean, and the request is permitted instead of denied. No public exploit code exists, but the logic inversion is mechanically predictable from the description. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 12, 2026
Policy engine logic in RustFS incorrectly swaps ForAllValues: and ForAnyValue: set-qualifier semantics when paired with negated condition operators (StringNotEquals, StringNotLike, ArnNotEquals, ArnNotLike, StringNotEqualsIgnoreCase), allowing authenticated low-privilege users to bypass IAM-style access controls in versions prior to 1.0.0-beta.12. The root cause is that negation is applied to the aggregate quantifier result rather than to each individual request-value predicate before quantification, meaning partially overlapping policy and request value sets can cause an explicit Deny guardrail to evaluate as Allow - including policies controlling access via jwt:groups and jwt:roles claims. No public exploit has been identified at time of analysis, but the flaw directly undermines the authorization boundary for any deployment relying on negated set-qualifier conditions.
RemediationAI
Upgrade to RustFS 1.0.0-beta.12 or later; the patched release is available at https://github.com/rustfs/rustfs/releases/tag/1.0.0-beta.12, corresponding to commit 92f83bfe155d8a3b9cdd903086e5b28d52339efb. If an immediate upgrade is not possible, audit all IAM policies in use and identify any that pair ForAllValues: or ForAnyValue: qualifiers with negated operators (StringNotEquals, StringNotEqualsIgnoreCase, StringNotLike, ArnNotEquals, ArnNotLike). Rewrite those conditions using equivalent non-negated logic (e.g., replace a Deny with ForAllValues:StringNotEquals with an explicit Allow using StringEquals covering only the permitted values) - note this approach requires policy restructuring and careful testing to preserve intended access semantics. Pay particular attention to policies using jwt:groups and jwt:roles condition keys, as these are called out in the advisory as specifically affected. Absent condition keys must also be re-evaluated, as they receive inverted ForAllValues/ForAnyValue treatment in vulnerable versions.
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 AWS S3-compatible IAM policy engine in Rust, using condition functions defined in crates/policy/src/policy/function/string.rs. The bug involves two orthogonal axes of condition evaluation: the condition operator (e.g., StringNotEquals) and the set qualifier (ForAllValues: or ForAnyValue:). ForAllValues: is satisfied when every request value satisfies the operator predicate; ForAnyValue: is satisfied when at least one does. For negated operators, correct semantics require applying negation per individual request-value predicate before the quantifier aggregates results - i.e., NOT(predicate(v)) for each v, then AND/OR across all v. The vulnerable code instead evaluates the positive predicate across all values, takes the aggregate boolean, then negates it - mathematically equivalent to swapping ForAllValues and ForAnyValue. The fix (commit 92f83bfe) introduces a Quantifier enum (None, ForAnyValue, ForAllValues) replacing a boolean for_all parameter, ensuring correct per-predicate negation. CWE-863 (Incorrect Authorization) describes the class: the system performs authorization checks but the logic is wrong, producing incorrect access decisions. 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:L/UI:N/S:U/C:H/I:H/A:N
AC:H because exploitation depends on non-default policy configurations using negated set-qualifier operators; PR:L because authentication is required per description and CVSS input.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
RustFS is a distributed object storage system built in Rust. Prior to 1.0.0-beta.12, RustFS evaluates the ForAllValues: and ForAnyValue: set qualifiers with the negated string operators StringNotEquals, StringNotEqualsIgnoreCase, StringNotLike, ArnNotEquals, and ArnNotLike using each other's semantics because crates/policy/src/policy/function/string.rs negates the aggregate result after eval or eval_like instead of negating each request-value predicate before quantification. Partially overlapping policy and request value sets can therefore make an Allow condition grant access to an excluded principal or make a Deny guardrail fail, including policies based on jwt:groups and jwt:roles; absent keys also receive the opposite ForAllValues: and ForAnyValue: behavior. This issue is fixed in version 1.0.0-beta.12.
Executive ViewAI
RustFS policy engine deployments face an authorization logic flaw affecting versions before 1.0.0-beta.12 that allows authenticated users with limited privileges to bypass access controls. The vulnerability occurs when policies use negated set-qualifier conditions (such as StringNotEquals or ArnNotLike) for role or group-based access decisions, potentially enabling attackers to escalate privileges and access restricted resources. Organizations must immediately audit and remediate affected policy configurations.
No vendor-released patch identified at time of analysis. Interim mitigations: (1) eliminate all negated set-qualifier conditions from policies, restructuring access decisions using explicit allow/deny rules based on positive group/role membership; (2) restrict policy configuration access to a minimal set of administrators; (3) implement continuous monitoring and alerting for authorization failures and unusual access patterns by lower-privileged accounts; (4) conduct periodic access reviews to verify that access grants match intended policies.
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-57234
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB