十二、【漏洞复现】Rails任意文件读取(CVE-2019-5418)
12.1、漏洞原理
Ruby on Rails是一个使用 Ruby 语言写的开源 Web 应用框架,它是严格按照 MVC 结构开发的。它努力使自身保持简单,来使实际的应用开发时的代码更少,使用最少的配置。Rails在开发环境下使用Sprockets作为静态文件服务器,Sprockets是编译及分发静态资源文件的Ruby库。在Sprockets部分版本中因为二次解码导致的路径穿越漏洞,攻击者可以利用该漏洞来跨越到根目录,读取或执行目标服务器上任意文件。
12.2、影响范围
4.0.0.beta7 及更低版本、
3.7.1 及更低版本、
2.12.4 及更低版本。
12.3、指纹识别
12.4、漏洞复现
- 访问/chybeta路径并进行抓包
- 在Accept构造../../../../../../../../etc/passwd{{
3.flag位置:../../../../../../../../proc/self/environ{{
12.5、漏洞修复
1、升级版本
Rails任意文件读取漏洞(CVE-2019-5418)已经被修复。要修复此漏洞,您需要升级到Rails版本6.0.3.2更高版本。如果您无法立即升级,请考虑使用以下两种方法之一进行临时修复:
- 您可以在应用程序的路由配置文件中添加一个过滤器,限制对危险请求的访问。您可以使用以下代码片段将过滤器添加到config/routes.rb文件中:
ActionDispatch::Routing::Routes.draw do |map|# ... 其他路由配置 ...map.get '/path/to/vulnerable/file', controller: 'vulnerable', action: 'index'map.get '/path/to/safe/file', controller: 'safe', action: 'index'map.get '/*path', controller: 'vulnerable', action: 'invalid_request' end
- 您还可以使用安全性补丁gem,如"safe_yaml"来过滤用户提供的参数,以防止路径穿越攻击。您可以在Gemfile中添加以下行来安装"safe_yaml":
gem 'safe_yaml', '~> 1.0.5'
然后运行bundle install命令以安装该gem。