信息安全 当前位置: 网站首页 >> 信息安全 >> 正文 >

Ruby on Rails路径穿越与任意文件读取漏洞,可导致服务器敏感信息泄露

发布时间:2019-03-18 浏览次数:

0x01关键词:

Ruby on Rails 路径穿越 任意文件读取

0x02背景:

近日,补天漏洞响应平台监测到网络上出现了Ruby on Rails的路径穿越与任意文件读取漏洞以及利用,通过此漏洞可导致服务器敏感信息泄露,可对公司资产进行窃取,严重危害信息安全。

补天漏洞平台对此次事件进行了技术分析,鉴于该漏洞可直接读取服务器任意文件,建议相关企业尽快进行安全评估。

0x03情报通告

发现时间

2019年03月16日

威胁目标

采用Ruby on Rails框架进行开发的企业

主要风险

敏感信息造成威胁

攻击入口

操作视图处

使用漏洞

CVE-2019-5418

受影响应用

6.0.0.beta3及以前的全部版本都受影响

已知影响

导致服务器信息泄露

威胁程度

0x04威胁程度:

个人风险评级:低危

企业风险评级:高危

情报风险预警:对公司影响等级为高,对基于Ruby on Rails框架的企业均有被攻击的风险。

0x05情报描述:

操作视图(Action View)中存在文件内容泄露漏洞,特制的HTTP请求头与render file调用相结合可导致目标服务器上任意文件被读取,造成严重的信息安全威胁。

0x06漏洞测试过程:

本文所用版本是vulnerable Rails (版本5.2.1)。

下载安装测试代码:

生成控制器:

在app/controllers/chybeta_controller.rb中添加:

在config/routes.rb中添加resources :

可以用命令rails routes检查是否存在路由。

构造HTTP头修改Accept头为../../../../../../../../etc/passwd{{ :完成复现

代码审计:

在控制器中通过render file形式来渲染应用之外的视图,因此在actionview-5.2.1/lib/action_view/renderer/template_renderer.rb:22中会根据options.key?(:file),调用find_file来寻找视图。

find_file代码:

继续跟入args_for_lookup函数,用于生成用于查找文件的参数,当其最终返回时会把payload保存在details[formats]中:

此后回到@view_paths.find_file并跟入会进入actionview-5.2.1/lib/action_view/path_set.rb:

由于要渲染的视图在应用之外,因此跟入find_all_anywhere:

跳过cached部分,跟入find_templates,这里正式根据条件来查找要渲染的模板:

build_query后如下:

利用../与前缀组合造成路径穿越,利用最后的{{完成闭合,经过File.expand_path解析后组成的query如下:

/etc/passwd{{},}{+{},}{.{raw,erb,html,builder,ruby,coffee,jbuilder},}

最后/etc/passwd被当成模板文件进行渲染,最后造成了任意文件读取。

0x07影响面

企业使用6.0.0.beta3及以前的全部版本均受到此漏洞影响。

0x08相关漏洞

CVE-2019-5418

受影响产品及版本

6.0.0.beta3及以前的全部版本都受影响 6.0.0.beta3

漏洞情报解决方案

0x09总结以及处置建议

处置建议

目前Ruby on Rails官方已发出修复补丁,企业可通过下载补丁进行文件替换操作封堵漏洞。补丁链接:

https://groups.google.com/forum/#!topic/rubyonrails-security/pFRKI96Sm8Q

参考资料:

https://chybeta.github.io/2019/03/16/Analysis-for%E3%80%90CVE-2019-5418%E3%80%91File-Content-Disclosure-on-Rails/

https://github.com/rails/rails/commit/f4c70c2222180b8d9d924f00af0c7fd632e26715

https://github.com/mpgn/CVE-2019-5418

版权所有:长春工程学院现代教育技术中心(信息化建设办公室)