漏洞概述
一个可能的信息泄露漏洞存在于 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.203.1.183.2.3
漏洞详情
当 Rack::Sendfile 从客户端接收到不可信的 x-sendfile-type 或 x-accel-mapping 头信息时,会将其解释为代理配置指令。这可能导致该中间件向代理服务器发送一个“重定向”响应,促使代理重新发出一个新的内部请求,而该请求不受代理访问控制策略的限制。
攻击者可通过以下方式利用此漏洞:
- 设置一个精心构造的
x-sendfile-type: x-accel-redirect头。 - 设置一个精心构造的
x-accel-mapping头。 - 请求一个符合基于代理的加速条件的路径。
影响
攻击者可能绕过代理强制实施的访问限制,访问本应受保护的内部端点(例如管理页面)。此漏洞不允许任意文件读取,但可能暴露敏感的应用路由。
此漏洞仅影响满足以下所有条件的系统:
- 应用程序使用了
Rack::Sendfile,且其后是支持x-accel-redirect的代理(例如 Nginx)。 - 代理未始终设置或移除
x-sendfile-type和x-accel-mapping头信息。 - 应用程序暴露了一个返回可响应
.to_path方法调用的响应体的端点。
缓解措施
- 升级到已修复的 Rack 版本:该版本需要显式配置来启用
x-accel-redirect功能:1use Rack::Sendfile, "x-accel-redirect" - 配置代理:始终设置或剥离相关头部信息(建议如此操作):
1 2proxy_set_header x-sendfile-type x-accel-redirect; proxy_set_header x-accel-mapping /var/www/=/files/; - 或在 Rails 应用程序中:完全禁用 sendfile 功能:
1config.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百分位)