Rack存在信息泄露漏洞,慎用x-sendfile头部配置

本文详细分析了Rack框架中Rack::Sendfile中间件的一个潜在信息泄露漏洞。该漏洞存在于特定版本中,当运行在支持x-sendfile的代理后端时,攻击者可能利用特制头文件绕过代理访问限制,访问受保护的内部分页。文章提供了漏洞详情、影响版本及缓解措施。

Rack存在潜在信息泄露漏洞 · CVE-2025-61780

漏洞详情

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

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

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

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

影响 攻击者可以绕过代理强制实施的限制,访问预期受保护的内部分页。该漏洞不允许任意文件读取,但可能暴露敏感的应用路由。

此问题仅影响同时满足以下所有条件的系统:

  • 应用程序使用Rack::Sendfile,并且后端代理支持x-accel-redirect(例如Nginx)。
  • 代理并非总是设置或移除x-sendfile-type和x-accel-mapping头文件。
  • 应用程序暴露了一个响应.to_path方法并返回相应主体的端点。

受影响版本与修复版本

受影响版本:

  • rack < 2.2.20
  • rack >= 3.0, < 3.1.18
  • rack >= 3.2, < 3.2.3

已修复版本:

  • 2.2.20
  • 3.1.18
  • 3.2.3

缓解措施

  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相关修复提交
  • NVD漏洞详情页面
  • Ruby安全咨询数据库条目

安全信息

CVSS 3.1 总体评分:5.8(中危) CVSS 3.1 基本指标向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N

相关弱点:

  • CWE-200:向未授权行为者暴露敏感信息
  • CWE-441:意外的代理或中间人(‘Confused Deputy’)
  • CWE-913:对动态管理代码资源的控制不当

致谢:

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