RustFS Hardcoded gRPC Authentication Token Leading to Full Node Compromise (CVE-2025-68926)
by materaj2 · 2026-07-06
- Severity
- Critical
- CVE
- CVE-2025-68926
- Category
- cloud
- Affected product
- RustFS (Rust-based S3-compatible distributed object storage) — internal node-to-node gRPC service
- Affected versions
- < 1.0.0-alpha.78
- Disclosed
- 2026-07-06
- Patch status
- unpatched
Tags
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-06 |
| Last Updated | 2026-07-06 |
| Author / Researcher | materaj2 |
| CVE / Advisory | CVE-2025-68926 |
| Category | cloud |
| Severity | Critical |
| CVSS Score | 9.8 (per NVD) |
| Status | Weaponized |
| Tags | rustfs, grpc, hardcoded-credentials, authentication-bypass, object-storage, s3-compatible, information-disclosure, credential-theft, data-destruction, cwe-798, cwe-306 |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | RustFS (Rust-based S3-compatible distributed object storage) — internal node-to-node gRPC service |
| Versions Affected | < 1.0.0-alpha.78 |
| Language / Platform | Bash (PoC using grpcurl); target is a Rust gRPC service (node_service.NodeService) |
| Authentication Required | No (the “authentication” token is a hardcoded, publicly known constant) |
| Network Access Required | Yes (direct network access to the RustFS internal gRPC port, default 9000-range) |
Summary
RustFS’s internal cluster/node gRPC service (node_service.NodeService) authenticates peer-to-peer RPC calls using a fixed, hardcoded bearer token — the literal string "rustfs rpc" — which is compiled into every RustFS build and cannot be rotated or configured by operators. Any network-reachable attacker who can supply this well-known string as the authorization gRPC metadata header is treated as a fully trusted internal cluster node, bypassing authentication entirely. The included PoC uses grpcurl against the real node.proto service definition to demonstrate that an unauthenticated caller can invoke any of the 70+ privileged NodeService RPCs — including server/system information disclosure, credential and service-account theft, bucket/volume deletion, and cluster reconfiguration/service control — resulting in complete compromise of the storage cluster.
Vulnerability Details
Root Cause
RustFS nodes communicate over an internal gRPC service defined in node.proto (node_service.NodeService), exposing dozens of privileged administrative RPCs (DeleteBucket, LoadUser, LoadServiceAccount, SignalService, disk/volume read-write primitives, etc.). Authentication for these calls is enforced via a gRPC metadata header (authorization) that the server compares against a single hardcoded constant value, "rustfs rpc", rather than a per-deployment secret, mTLS client certificate, or rotatable credential:
| |
Because this string is identical and public across every RustFS installation (it ships in the binary/source and is now published in this PoC), any attacker with network access to the gRPC port can present it and be treated as a legitimate, fully-privileged internal peer — there is no per-cluster secret, TLS mutual authentication, or IP allow-listing enforced by default.
Attack Vector
- Attacker identifies a reachable RustFS internal gRPC endpoint (default plaintext gRPC, e.g.
host:9000). - Attacker confirms the service rejects unauthenticated
Pingcalls (baseline sanity check). - Attacker resends
Pingwith the metadata headerauthorization: rustfs rpc— the server accepts it as a trusted node and returns version/status data, confirming the bypass. - Using the same hardcoded token, the attacker calls further privileged RPCs:
ServerInfo,LocalStorageInfo,GetOsInfo,GetCpus,GetMemInfo,GetProcInfofor full system/storage reconnaissance. - Attacker calls
LoadUser/LoadServiceAccountwith a target access key to attempt extraction of credentials and service-account data. - Attacker calls
DeleteBucketto demonstrate the ability to destroy arbitrary storage buckets. - Broader impact (not all exercised by the PoC but exposed by the same token/service) includes
SignalService(start/stop/restart nodes), pool/rebalance/tier reconfiguration, and low-level disk read/write/delete primitives (ReadAll,WriteAll,Delete,RenameFile, etc.), enabling full data manipulation across the cluster.
Impact
Unauthenticated, remote, complete compromise of a RustFS storage cluster: information disclosure (server/system/storage metadata), theft of user and service-account credentials, arbitrary destruction of buckets/volumes/objects, and administrative control over cluster services (start/stop, rebalance, tiering, replication) — all without any valid credentials, since the “authentication” is a single public hardcoded string.
Environment / Lab Setup
Target: RustFS < 1.0.0-alpha.78, internal node gRPC service reachable (default plaintext, e.g. host:9000)
Attacker: grpcurl (https://github.com/fullstorydev/grpcurl), bash
node.proto (matching RustFS's crates/protos/src/node.proto,
e.g. https://raw.githubusercontent.com/rustfs/rustfs/1.0.0-alpha.77/crates/protos/src/node.proto)
Note: Script auto-downloads a standalone grpcurl binary if only a snap-confined grpcurl is available
Proof of Concept
PoC Script
See
exploit.shandnode.protoin this folder.
| |
The script performs a baseline unauthenticated check, then re-runs each privileged RPC (Ping, ServerInfo, LocalStorageInfo, GetOsInfo, GetCpus, GetMemInfo, LoadUser, LoadServiceAccount, DeleteBucket, GetProcInfo) using grpcurl with the metadata header authorization: rustfs rpc, printing each disclosed response and a final vulnerability summary.
Detection & Indicators of Compromise
authorization: rustfs rpc
Signs of compromise:
- gRPC access/audit logs showing
NodeServiceRPC invocations from IPs outside the known cluster peer set - Unexplained bucket/volume deletions or metadata rewrites
- Unexpected
SignalServicecalls (node restarts/stops) or rebalance/replication reconfiguration events - Presence of the literal string
rustfs rpcin captured network traffic to the gRPC port from non-peer hosts
Remediation
| Action | Detail |
|---|---|
| Primary fix | Upgrade RustFS to >= 1.0.0-alpha.78, which addresses the hardcoded token issue |
| Interim mitigation | Restrict network access to the internal gRPC port to trusted cluster nodes only (firewall/security groups/private network segmentation); do not expose the node gRPC service to the public internet; monitor for unauthorized use of the rustfs rpc token in traffic |
References
Notes
Mirrored from https://github.com/materaj2/CVE-2025-68926-repo on 2026-07-06. exploit.sh uses grpcurl against the real RustFS node.proto service definition to abuse the hardcoded rpc token; legitimate, functional exploit with no templated branding.
| |