漏洞简介
Ruby On Rails在开发环境下使用Sprockets作为静态文件服务器,Ruby On Rails是著名Ruby Web开发框架,Sprockets是编译及分发静态资源文件的Ruby库。
漏洞概述
Sprockets 3.7.1及之前版本中,存在一处因为二次解码导致的路径穿越漏洞,攻击者可以利用%252e%252e/来跨越到根目录,读取或执行目标服务器上任意文件。
漏洞原理
问题出在sprockets,它用来检查 JavaScript 文件的相互依赖关系,用以优化网页中引入的js文件,以避免加载不必要的js文件。
当访问如http://127.0.0.1:3000/assets/foo.js时,会进入server.rb:
rorbidden_request用来对path进行检查,是否包含…以防止路径穿越,是否是绝对路径:
漏洞复现
第一次转码:%2E%2E,因为%也要进行二次编码,第二次编码就是:%252e%252e