Skip to content

GHSA-333v-68xh-8mmq CVE-2026-22782

RustFS's RPC signature verification logs shared secret

High crates.io
Severity
0.0 / 10
High · CVSS 4.0
Exploit chance (EPSS)
0.52%
Chance of exploitation in the next 30 days. Higher than 44.47% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-532 Insertion of Sensitive Information into Log File
Fix
1.0.0-alpha.80
Upgrade rustfs to this version or later

Description

Summary

Invalid RPC signatures cause the server to log the shared HMAC secret (and expected signature), which exposes the secret to log readers and enables forged RPC calls.

Details

In crates/ecstore/src/rpc/http_auth.rs:115-122 , the invalid signature branch logs sensitive data:

if signature != expected_signature {
    error!(
        "verify_rpc_signature: Invalid signature: secret {}, url {}, method {}, timestamp {}, signature {}, expected_signature {}",
        secret, url, method, timestamp, signature, expected_signature
    );

    return Err(std::io::Error::other("Invalid signature"));
}

This log line includes secret and expected_signature, both derived from the shared HMAC key. Any invalidly signed request triggers this path. The function is reachable from RPC and admin request handlers.

PoC

  1. Run RustFS with error logging enabled.
  2. Send a request with an invalid signature:
     ts=$(date +%s)
     curl -v \
       -H "x-rustfs-timestamp: $ts" \
       -H "x-rustfs-signature: invalid-signature" \
       "http://localhost:9000/rustfs/rpc/read_file_stream?disk=foo&volume=bar&path=baz&offset=0&length=1"
    
  3. Observed output:
     HTTP 403 AccessDenied: Invalid signature
     verify_rpc_signature: Invalid signature: secret rustfsadmin, url /rustfs/rpc/read_file_stream?disk=foo&volume=bar&path=baz&offset=0&length=1, method GET, timestamp 1767852115, signature invalid-signature, expected_signature oisNxNRTb80GXf97s/PGdScJzu8QB9Oxs+uOwf8RiK8=
    

Impact

  • Exposes the shared RPC HMAC secret to log readers.
  • Enables attackers with log access to forge valid RPC signatures and make unauthorized RPC calls.

Affected versions

crates.io

PackageVulnerableFixed in
rustfs
>= 1.0.0-alpha.1, < 1.0.0-alpha.80
1.0.0-alpha.80

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

rustfs crates.io → 1.0.0-alpha.80

cargo
cargo update -p rustfs --precise 1.0.0-alpha.80

Severity breakdown

CVSS 4.0 0.0

CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P

Attack vector
Network
Attack complexity
Low
Attack requirements
Present
Privileges required
None
User interaction
None
Confidentiality (vulnerable system)
Low
Integrity (vulnerable system)
None
Availability (vulnerable system)
None
Confidentiality (subsequent systems)
None
Integrity (subsequent systems)
None
Availability (subsequent systems)
None
Exploit maturity
Proof of concept

CVSS 3.1 7.5

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

Weakness

CWE-532: Insertion of Sensitive Information into Log File

The product writes sensitive information to a log file.

How to prevent it
  • Architecture and Design, Implementation: Consider seriously the sensitivity of the information written into log files. Do not write secrets into the log files.
  • Distribution: Remove debug log files before deploying the application into production.
  • Operation: Protect log files against unauthorized read/write.
  • Implementation: Adjust configurations appropriately when software is transitioned from a debug state to production.

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-mm2q-qcmx-gw4w
RustFS: ListServiceAccount authorizes against wrong admin action, enabling cross-user enumeration and root service account takeover
High Also affects rustfs
GHSA-pfcq-4gjr-6gjm
RustFS: Missing admin authorization on notification target endpoints allows unauthenticated configuration of event webhooks
High Also affects rustfs
GHSA-mx42-j6wv-px98
RustFS has an authorization bypass in multipart UploadPartCopy enables cross-bucket object exfiltration
Medium Also affects rustfs
GHSA-v9fg-3cr2-277j
Rust has Critical Stored XSS in Preview Modal, leading to Administrative Account Takeover
Medium Also affects rustfs
GHSA-w5fh-f8xh-5x3p
RustFS: Missing Post Policy Validation leads to Arbitrary Object Write
Critical Also affects rustfs
GHSA-r54g-49rx-98cr
RustFS Logs Sensitive Credentials in Plaintext
High Also affects rustfs
GHSA-fc6g-2gcp-2qrq
RustFS has SourceIp bypass via spoofed X-Forwarded-For/Real-IP headers
High Also affects rustfs
GHSA-xgr5-qc6w-vcg9
RustFS has IAM deny_only Short-Circuit that Allows Privilege Escalation via Service Account Minting
Critical Also affects rustfs
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor