Rack 框架中发现潜在信息泄露漏洞(CVE-2025-61780)详解

本文详细披露了Ruby Web服务器接口Rack中存在的一个可能的信息泄露漏洞。该漏洞影响特定版本的Rack::Sendfile中间件,在特定代理配置下可能被利用以绕过访问控制,访问受保护的内网端点。

漏洞概述

一个可能的信息泄露漏洞存在于 Rack::Sendfile 中间件中,当该中间件在支持 x-sendfile 头(例如 Nginx)的代理服务器后运行时。精心构造的请求头可能导致 Rack::Sendfile 与代理服务器之间的错误通信,并触发意外的内部请求,从而可能绕过代理级别的访问限制。

受影响版本

  • bundler 包管理器
  • rack (RubyGems):
    • < 2.2.20
    • >= 3.0, < 3.1.18
    • >= 3.2, < 3.2.3

已修复版本

  • 2.2.20
  • 3.1.18
  • 3.2.3

漏洞详情

Rack::Sendfile 从客户端接收到不可信的 x-sendfile-typex-accel-mapping 头信息时,会将其解释为代理配置指令。这可能导致该中间件向代理服务器发送一个“重定向”响应,促使代理重新发出一个新的内部请求,而该请求不受代理访问控制策略的限制。

攻击者可通过以下方式利用此漏洞:

  1. 设置一个精心构造的 x-sendfile-type: x-accel-redirect 头。
  2. 设置一个精心构造的 x-accel-mapping 头。
  3. 请求一个符合基于代理的加速条件的路径。

影响

攻击者可能绕过代理强制实施的访问限制,访问本应受保护的内部端点(例如管理页面)。此漏洞不允许任意文件读取,但可能暴露敏感的应用路由。

此漏洞仅影响满足以下所有条件的系统:

  • 应用程序使用了 Rack::Sendfile,且其后是支持 x-accel-redirect 的代理(例如 Nginx)。
  • 代理未始终设置或移除 x-sendfile-typex-accel-mapping 头信息。
  • 应用程序暴露了一个返回可响应 .to_path 方法调用的响应体的端点。

缓解措施

  1. 升级到已修复的 Rack 版本:该版本需要显式配置来启用 x-accel-redirect 功能:
    1
    
    use Rack::Sendfile, "x-accel-redirect"
    
  2. 配置代理:始终设置或剥离相关头部信息(建议如此操作):
    1
    2
    
    proxy_set_header x-sendfile-type x-accel-redirect;
    proxy_set_header x-accel-mapping /var/www/=/files/;
    
  3. 或在 Rails 应用程序中:完全禁用 sendfile 功能:
    1
    
    config.action_dispatch.x_sendfile_header = nil
    

参考资料

  • GHSA-r657-rxjc-j557
  • rack/rack 提交记录:57277b7, 7e69f65, fba2c8b
  • NVD 漏洞详情:CVE-2025-61780
  • Ruby Advisory DB 条目

安全信息

  • 严重等级:中危 (Moderate)
  • CVSS 3.1 总分:5.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N)
  • 相关 CWE:CWE-200 (敏感信息暴露)、CWE-441 (非预期代理或中间人)、CWE-913 (动态管理代码资源控制不当)
  • EPSS 分数:0.042% (第13百分位)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计