支持本站 — 捐款将帮助我们持续运营

目标:1000 元,已筹:736

73.6%
一、 漏洞 CVE-2026-22782 基础信息
漏洞信息
                                        # RustFS RPC签名验证泄露密钥

## 概述
RustFS 在处理无效 RPC 签名时,会将 HMAC 共享密钥及相关敏感信息记录到日志中,导致密钥泄露。

## 影响版本
从 `1.0.0-alpha.1` 到 `1.0.0-alpha.79`。

## 细节
在 `crates/ecstore/src/rpc/http_auth.rs` 文件中,处理无效签名的代码分支会记录包含 `secret` 和 `expected_signature` 的日志,这些数据均来源于共享的 HMAC 密钥。任何带有无效签名的请求都会触发该日志记录逻辑。该函数可通过 RPC 和管理接口请求触发。

## 影响
攻击者可通过读取日志获取 HMAC 共享密钥,进而伪造合法的 RPC 请求,实现未授权操作。该问题已在 `1.0.0-alpha.80` 中修复。
                                        
神龙判断

是否为 Web 类漏洞: 未知

判断理由:

N/A
提示
尽管我们采用了先进的大模型技术,但其输出仍可能包含不准确或过时的信息。
神龙会尽力确保数据准确,但也请结合实际情况进行甄别与判断。
神龙祝您一切顺利!
漏洞标题
RustFS RPC signature verification logs shared secret
来源:美国国家漏洞数据库 NVD
漏洞描述信息
RustFS is a distributed object storage system built in Rust. From >= 1.0.0-alpha.1 to 1.0.0-alpha.79, 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. In crates/ecstore/src/rpc/http_auth.rs, the invalid signature branch logs sensitive data. 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. This vulnerability is fixed in 1.0.0-alpha.80.
来源:美国国家漏洞数据库 NVD
CVSS信息
N/A
来源:美国国家漏洞数据库 NVD
漏洞类别
通过日志文件的信息暴露
来源:美国国家漏洞数据库 NVD
二、漏洞 CVE-2026-22782 的公开POC
#POC 描述源链接神龙链接
三、漏洞 CVE-2026-22782 的情报信息
  • 标题: RPC signature verification logs shared secret · Advisory · rustfs/rustfs · GitHub -- 🔗来源链接

    标签:x_refsource_CONFIRM

    神龙速读:
                                            ### 关键漏洞信息
    
    - **CVE ID**: CVE-2026-22782
    - **Severity**: Low
    - **Affected Versions**: >= 1.0.0-alpha.1, <= 1.0.0-alpha.79
    - **Patched Versions**: 1.0.0-alpha.80
    
    ### 漏洞描述
    
    #### Summary
    无效的 RPC 签名会导致服务器记录共享的 HMAC 密钥(和预期签名),从而暴露出密钥并允许伪造 RPC 调用。
    
    #### Details
    在文件 `crates/ectore/src/rpc/http_auth.rs:115-122` 中,无效签名的分支记录了敏感数据:
    
    ```rust
    if signature != expected_signature {
        error!(
            "verify_rpc_signature: Invalid signature: secret {}, url {}, method {}, timestamp {}, signature {}, expected_secret, url, method, timestamp, signature, expected_signature
        );
        return Err(std::io::Error::other("Invalid signature"));
    }
    ```
    
    此日志行包括 `secret` 和 `expected_signature`,两者均来自共享的 HMAC 密钥。任何无效签名的请求都会触发此路径。该函数可被 RPC 和管理员请求处理程序调用。
    
    #### Proof of Concept (PoC)
    1. 启用错误日志记录运行 RustFS。
    2. 发送一个带有无效签名的请求:
    
        ```bash
        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. 观察到的输出:
    
        ```bash
        HTTP 403 AccessDenied: Invalid signature
        verify_rpc_signature: Invalid signature: secret rustfsadmin, url /rustfs/rpc/read_file_stream?disk=foo&vol...
        ```
    
    ### 影响
    
    - 暴露了共享的 RPC HMAC 密钥到日志读者。
    - 允许具有日志访问权限的攻击者伪造有效的 RPC 签名并发出未经授权的 RPC 调用。
                                            
    RPC signature verification logs shared secret · Advisory · rustfs/rustfs · GitHub
  • 标题: fix: Remove secret and signature from the log (#1466) · rustfs/rustfs@6b2eebe · GitHub -- 🔗来源链接

    标签:x_refsource_MISC

    神龙速读:
                                            从这个网页截图中可以获取到以下关于漏洞的关键信息:
    
    - **修正内容**:
      - `Commit 6b2eebe` 主要用于移除日志中的秘密信息和签名(`fix: Remove secret and signature from the log (#1466)`)。
      - 更新了敏感信息的处理和日志输出方式,能更好地保护敏感字段,并且在日志中不会泄露敏感数据。
    
    - **关键变更**:
      ```markdown
      **Commit修改文件:**
      - crates/ecstore/src/rpc/http_auth.rs:更新了验证签名函数 `verify_rpc_signature` 处理日志输出的方式,在日志中不再直接输出原始签名值,而是进行部分遮盖。
      
      - rustfs/src/admin/mod.rs:删除了与平台无关的性能分析接口等机器信息,避免敏感信息暴露。
      
      - rustfs/src/config/mod.rs:移除了所有不必要的敏感字段如访问密钥和密钥,增加了错误日志时对敏感字段的掩码处理办法。
      ```
    
    - **保护措施**:
      - 通过重新格式化敏感字段日志输出,使用特定格式分别处理日志中的 `signature` 和 `expected_signature` 防止敏感数据被完全显示。
      - 引入 `mask_sensitive` 函数屏蔽 `secret_key` 和 `access_key` 等敏感信息部分或者完整信息,进一步防止敏感值外泄。
      - 增加了更好的字段注释和变化说明,说明本次提交为修复和预防安全泄露的措施。
                                            
    fix: Remove secret and signature from the log (#1466) · rustfs/rustfs@6b2eebe · GitHub
  • 标题: rustfs/crates/ecstore/src/rpc/http_auth.rs at 9e162b6e9ebb874cc1d06a7b33bc4a05786578aa · rustfs/rustfs · GitHub -- 🔗来源链接

    标签:x_refsource_MISC

    神龙速读:
                                            ### 关键信息摘要
    
    #### 漏洞类型
    - **签名验证**
    
    #### 漏洞描述
    - **签名验证失效**:代码实现中可能存在签名验证逻辑缺陷,导致请求签名可以被绕过或篡改。
    - **时间戳验证**:验证时间戳是否在允许的时间范围内,防止重放攻击。
    
    #### 涉及文件
    - `ecstore/src/rpc/http_auth.rs`
    
    #### 漏洞关键代码片段
    ```rust
    pub fn verify_rpc_signature(url: &str, method: &Method, headers: &HeaderMap) -> ... {
        // Check signature and timestamp
        if signature != expected_signature {
            error!(
                "verify_rpc_signature: Invalid signature: {
                    secret, url, method, timestamp, signature, expected_signature
                }
            );
            return Err(std::io::Error::new(std::io::ErrorKind::Other, "Invalid signature"));
        }
    }
    ```
    
    #### 潜在风险
    - **签名被篡改**:攻击者可能通过篡改请求中的签名字段绕过验证。
    - **重放攻击**:如果时间戳验证逻辑不严格,攻击者可能利用旧的请求进行重放攻击。
    
    #### 建议措施
    1. **严格验证签名**:确保签名验证逻辑正确无误,使用安全的哈希算法。
    2. **加强时间戳验证**:严格检查时间戳的有效性,防止过期和提前的请求。
    3. **代码审计**:对相关代码进行安全审计,确保没有其他潜在的安全隐患。
    4. **更新依赖库**:确保使用的第三方库是最新版本,避免已知的安全漏洞。
                                            
    rustfs/crates/ecstore/src/rpc/http_auth.rs at 9e162b6e9ebb874cc1d06a7b33bc4a05786578aa · rustfs/rustfs · GitHub
  • https://nvd.nist.gov/vuln/detail/CVE-2026-22782
四、漏洞 CVE-2026-22782 的评论

暂无评论


发表评论