如何测试应用程序是否存在 sprockets 漏洞?

How do I test whether an app is vulnerable to the sprockets vulnerability?

如果 Rails 应用程序容易受到 sprockets 漏洞 CVE-2018-3760 的攻击,我应该 运行 测试什么 Web 请求?

我已经进行了必要的更改以使其免受该问题的影响,但我想通过查看在安全版本和非安全版本上发生的情况来对其进行测试

我在使用 Google Chrome 的开发机器上以生产模式在示例 Rails 应用程序 运行 上尝试了 http://localhost:3000/assets/file:%2f%2f///Users/agrimm/rails/sprockets_replication/README.rdoc,但它没有即使使用不安全版本的 sprockets 和 production.rb 中的 config.assets.compile = true 也能检索文件。 (如果网络请求的路径错误,我不会感到惊讶 - 这有点疯狂猜测)

https://blog.heroku.com/rails-asset-pipeline-vulnerability nor https://groups.google.com/forum/#!topic/rubyonrails-security/ft_J--l55fM 均未提供有关如何测试该漏洞的示例。

请记住,这适用于资产,因此请尝试使用资产文件夹之外的文件,例如

/path/to/project/folder/app/assets/config 
/path/to/project/folder/app/assets/images 
/path/to/project/folder/app/assets/javascripts 
/path/to/project/folder/app/assets/stylesheets 
/path/to/project/folder/vendor/assets/javascripts 
/path/to/project/folder/vendor/assets/stylesheets 

或者所有资产文件夹 gems 都无法工作。

所以你正在尝试的那个是行不通的,因为它会抛出 Sprockets::FileOutsidePaths 的错误,它甚至识别出该文件存在,因为如果你在日志中看到,有一个

Sprockets::FileOutsidePaths (/path/to/project/folder/README.md is no longer under a load path)

如果不存在,您将看到

的错误
Sprockets::FileNotFound (could not find file)

所以你走在正确的道路上,但需要尝试使用列出的文件夹中的资产文件,例如:

localhost:3000/assets/file:%2f%2f///path/to/project/folder/app/assets/stylesheets/devise.css

有了这个,您将看到浏览器正在返回一个资产。

并且在将 gem 链轮更新到 3.7.2 后,使用 config.assets.compile = true 并尝试再次访问同一地址,您将看到一个只显示 forbidden 和没有别的。

那些是我在本地进行的测试得出的结论,根据这些说明,您可以测试问题 objective 的漏洞