Rack存在潜在信息泄露漏洞 · CVE-2025-61780
漏洞详情
摘要 当Rack::Sendfile运行在支持x-sendfile头文件的代理(如Nginx)后面时,存在一个潜在的信息泄露漏洞。特制构造的头文件可能导致Rack::Sendfile与代理之间通信错误,并触发意外的内部请求,从而可能绕过代理级别的访问限制。
详情 当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 < 2.2.20
- rack >= 3.0, < 3.1.18
- rack >= 3.2, < 3.2.3
已修复版本:
- 2.2.20
- 3.1.18
- 3.2.3
缓解措施
-
升级到已修复的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相关修复提交
- 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 (修复开发者)