Rack 存在信息泄露漏洞:CVE-2025-61780 详解与修复方案

本文详细分析了 Rack 框架中一个可能的信息泄露漏洞(CVE-2025-61780)。该漏洞存在于 Rack::Sendfile 中间件中,当运行于支持 X-Sendfile 头的代理(如 Nginx)之后时,可能允许攻击者绕过代理访问控制,泄露敏感应用路由信息。

漏洞概述

Rack(一个用于 Ruby 的 Web 服务器接口)的 Rack::Sendfile 中间件存在一个可能的信息泄露漏洞。当运行在支持 x-sendfile 头部(例如 Nginx)的代理之后时,该漏洞可能导致信息泄露。

受影响版本

  • 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 头部的代理(如 Nginx)后运行时,存在一个可能的信息泄露漏洞。特制构造的头部可能导致 Rack::Sendfile 与代理通信错误,并触发意外的内部请求,可能绕过代理级别的访问限制。

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

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

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

影响 攻击者可能绕过代理强制执行的限制,访问本应受保护的内部端点(例如管理页面)。该漏洞不允许任意文件读取,但可能暴露敏感的应用路由。 此问题仅影响满足以下所有条件的系统:

  • 应用程序使用带有支持 x-accel-redirect 代理(例如 Nginx)的 Rack::Sendfile
  • 代理不总是设置或移除 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
    

参考链接

安全评分与弱点

  • 严重等级: 中等 (CVSS 总体评分: 5.8/10)
  • CVSS v3 基础指标: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N
  • EPSS 分数: 0.042% (第13百分位)
  • 相关弱点:
    • CWE-200: 向未经授权的参与者暴露敏感信息
    • CWE-441: 意外的代理或中间人(‘困惑的副手’)
    • CWE-913: 对动态管理代码资源的控制不当

致谢

此漏洞由以下人员发现和修复:

  • leahneukirchen (分析员)
  • jeremyevans (修复审核员)
  • matthewd (分析员)
  • ioquatix (修复开发者)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计