CVEReports
Reports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Reports
  • Sitemap

Company

  • About
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Powered by Google Gemini & CVE Feed

|
•

CVE-2025-68926
CVSS 9.8|EPSS 0.07%

RustFS: The 'rustfs rpc' Skeleton Key (CVE-2025-68926)

Alon Barad
Alon Barad
Software Engineer•December 30, 2025•5 min read
PoC AvailableNot in KEV

Executive Summary (TL;DR)

RustFS versions prior to 1.0.0-alpha.77 contain a hardcoded gRPC authentication token ('rustfs rpc'). Attackers can use this token to bypass all authentication checks, allowing them to delete buckets, modify policies, and seize control of the storage cluster via standard gRPC tools.

A critical authentication bypass in the RustFS distributed object storage system allows unauthenticated attackers to gain full administrative control by sending a specific hardcoded string in the gRPC authorization header.

The Hook: Performance vs. Security

RustFS bills itself as a high-performance distributed object storage system. It leverages the speed and memory safety of Rust to handle massive amounts of data. But as is often the case in the world of bleeding-edge infrastructure software, developers sometimes prioritize 'making it work' over 'locking it down'.

Imagine building a bank vault with three-foot thick steel walls, biometric scanners, and time locks. Then, because the construction crew got tired of swiping their badges every five minutes, they programmed the door to open if someone simply whispers 'open sesame'.

That is exactly what happened here. CVE-2025-68926 isn't a complex buffer overflow or a subtle race condition in the borrowing checker. It is a hardcoded magic string that turns any anonymous request into a super-admin command. It represents the classic tension between developer convenience and production security, resolved in the worst possible way.

The Flaw: A Polite Request for Access

The vulnerability resides in the gRPC interceptor logic of RustFS. For those unfamiliar with gRPC (and the tonic crate in Rust), interceptors are essentially middleware. They sit between the network socket and your application logic, allowing you to perform checks—like authentication—before any real work gets done.

The developers implemented a function intended to validate incoming requests. Ideally, this would check a JWT signature, verify an mTLS certificate, or look up a session token in a database. Instead, the logic was breathtakingly simple: it checked if the authorization header matched a static string.

And what was this secret, high-entropy cryptographic token? Was it a UUID? A SHA-256 hash? No. The token was "rustfs rpc". That's it. Two words, one space. If your request header said authorization: rustfs rpc, the server rolled out the red carpet. This suggests the code was likely a placeholder or a debug convenience that survived into production releases—a 'temporary' fix that became a permanent vulnerability.

The Code: The Smoking Gun

Let's look at the offending code snippet found in the shared protocol definitions (likely crates/protos/src/lib.rs). This function is wired up as an interceptor for the gRPC service definition.

// The Vulnerable Logic
fn check_auth(req: Request<()>) -> std::result::Result<(), Status> {
    // ⚠️ CRITICAL: Hardcoded static token defined right here
    let token: MetadataValue<_> = "rustfs rpc".parse().unwrap(); 
    
    // Check if the incoming request has the magic header
    match req.metadata().get("authorization") {
        // If it matches, you are authenticated. No questions asked.
        Some(t) if t == token => Ok(()),
        // Otherwise, reject.
        _ => Err(Status::unauthenticated("Invalid token")),
    }
}

In the patched version (1.0.0-alpha.77), this logic is entirely removed or replaced with a dynamic configuration lookup. The fix wasn't about changing the string to something harder to guess; it was about removing the hardcoded backdoor entirely and enforcing proper identity management. Hardcoded credentials are an architectural sin that cannot be 'fixed' by just making the password longer—they must be excised.

The Exploit: Knocking on the Door

Exploiting this requires zero coding skills. You don't need to craft shellcode or spray the heap. You just need a gRPC client like grpcurl and network visibility to port 9000 (the default RustFS port).

Here is how an attacker dumps the server configuration, essentially confirming they own the node:

# Target IP: 192.168.1.100
# Port: 9000
grpcurl -plaintext \
  -H 'authorization: rustfs rpc' \
  192.168.1.100:9000 \
  node.NodeService/GetServerInfo

The node.proto definition in RustFS exposes over 50 methods. Once this check passes, you have access to all of them. You want to delete a bucket? There's a method for that. You want to change the IAM policy? Easy. You want to shut down the node? Done.

This is a 'Class Break' vulnerability. Once the magic string is known (and it is now public knowledge), every single unpatched RustFS instance on the internet is vulnerable to the exact same payload. There is no per-installation secret to brute force.

The Impact: Total System Compromise

Because RustFS is a storage system, the impact here is two-fold: Data Integrity and Data Confidentiality.

1. Ransomware and Destruction: An attacker can enumerate all buckets and simply issue delete commands. In a ransomware scenario, they could download the data, delete the originals, and demand payment. Since they have administrative rights, they could also potentially lock out legitimate administrators by modifying access policies first.

2. Lateral Movement: Infrastructure tools often store sensitive data—backups, configuration files, and secrets for other services. Gaining read access to a distributed object store is often a stepping stone to compromising the entire cloud environment. If your Terraform state file or database backups are in a RustFS bucket, the attacker now owns your entire infrastructure stack.

Official Patches

RustFSOfficial Repository

Technical Appendix

CVSS Score
9.8/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
EPSS Probability
0.07%
Top 100% most exploited

Affected Systems

RustFS < 1.0.0-alpha.77

Affected Versions Detail

ProductAffected VersionsFixed Version
RustFS
RustFS
< 1.0.0-alpha.771.0.0-alpha.77
AttributeDetail
CWECWE-798 (Use of Hard-coded Credentials)
CVSS v3.19.8 (Critical)
Attack VectorNetwork (gRPC)
Privileges RequiredNone
Port9000/TCP
Token Value"rustfs rpc"

MITRE ATT&CK Mapping

MITRE ATT&CK Mapping

T1078Valid Accounts
Initial Access
T1190Exploit Public-Facing Application
Initial Access
CWE-798
Use of Hard-coded Credentials

The software contains hard-coded credentials, such as a password or cryptographic key, which it uses for its own inbound authentication, outbound communication to external components, or encryption of internal data.

Exploit Resources

Known Exploits & Detection

ManualExploitation is trivial via any gRPC client using the header 'authorization: rustfs rpc'.

Vulnerability Timeline

Vulnerability Timeline

Vulnerability identified in codebase
2025-01-15
Patch released in version 1.0.0-alpha.77
2025-02-01

References & Sources

  • [1]RustFS GitHub Repository

Subscribe to updates

Get the latest CVE analysis reports delivered to your inbox.

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.