2006 年 8 月 10 日,星期四

Rails 1.1.6、反向移植和全部披露

David 发布

已经人尽皆知了,所以以下是对目前安全漏洞的全部披露版本。从 Rails 1.1.0 到 1.1.5(不包括短暂的 1.1.3)中,由于 Rails 路由代码中的错误,你可以通过 URL 触发 Ruby 代码的评估。这意味着,你实际上可以通过启动类似 /script/profiler 的代码来终止 Rails 进程,因为该代码运行的时间会很长,并且在此过程中,进程将被挂起。其他 URL 甚至可能导致数据丢失。

我们为所有受影响的版本反向移植了一个修复程序,供那些无法更新的版本使用。你必须对你的版本应用 diff。

这些补丁程序(以及 1.1.6)将破坏使用第三方引擎 idea 的应用程序。因此,如果由于对它们的依赖而无法升级,你也可以在引擎更新期间添加以下 URL 阻止。以下是在 Apache 下使用 mod_rewrite 完成此操作的方法

RewriteRule ^(app|components|config|db|doc|lib|log|public|script|test|tmp|vendor)/ - [F]

以下是在 lighttpd 下完成此操作的方法

url.rewrite-once = ( "^/(app|components|config|db|doc|lib|log|public|script|test|tmp|vendor)/" => "index.html" )

遗憾的是,昨天的 1.1.5 更新只是部分修复了该漏洞(消除了最严重的数据丢失触发器)。在进一步了解了该问题的程度之后,我们现在已经发布了 1.1.6 版本,彻底修复了该漏洞的所有元素(使用了与上述反向移植相同的技术)。

因此,如果你昨天升级到了 1.1.5,则需要再次升级。方法保持不变,但由于 Rubyforge gem 服务器在分发 gem 更新时可能非常缓慢,因此你应直接从 Rails 服务器获取此修复程序

sudo gem install rails --source http://gems.rubyonrails.org --include-dependencies

如果你使用的是使用修订版 4394 或更高版本的 trunk(也称为 edge),则你不会受到此问题的影响。

我们将及时提供更多信息。不用说,这是 Rails 核心团队现在正在做的所有工作,并且我们已经招募了一批测试人员来帮助我们解决此问题。我们将评估所有收到的反馈,并制定一些修复措施一种用于解决未来安全问题的策略。感谢你的理解。

我们还为可以使用 IRC 的人创建了 Freenet 上的 #rails-security,以获取和分享更多信息。

更新:如果你浮在 gem 上(没有 vendor/rails),请务必在你的 config/environment.rb 中更新 RAILS_GEM_VERSION。否则,即使安装了新的 gem,你仍将受限于该较早版本的 Rails。

更新 2:Rails 1.1.6 已发布在官方 gem 服务器,因此您无需添加 —source http://gems.rubyonrails.org 参数。