Rails 3.2.8 has been released!

http://weblog.rubyonrails.org/2012/8/9/ann-rails-3-2-8-has-been-released/

3つsecurity fixがあります。
3.2系のdeprecation warningを削除し、今後導入もやめるそうです。
(え?やめちゃうの?どこで議論されてたんだろう?)

CVE

CVE-2012-3463

Ruby on Rails Potential XSS Vulnerability in select_tag prompt

select_tag時にpromptというキーで値を渡すとescapeされなかったようです。
2.3系は無関係。


問題となる書き方。

    select_tag("name", options, :prompt => UNTRUSTED_INPUT) 


修正箇所。

# actionpack/lib/action_view/helpers/form_tag_helper.rb
         if prompt = options.delete(:prompt)

-          option_tags = "<option value=\"\">#{prompt}</option>".html_safe + option_tags
+          option_tags = content_tag(:option, prompt, :value => '').safe_concat(option_tags)
CVE-2012-3464

Potential XSS Vulnerability in Ruby on Rails


single quoteを含む場合、escapeされないという脆弱性があったようです。
Railsが提供しているhelperについては、single quoteを使うことはないので
影響は低い模様。
Rack::Utils.escape_html を利用するように修正したのですが
今度は'/'がescapeされてしまうので、ブラウザは期待通りに動くはずですが
testが落ちるかもとのこと。



修正箇所。
escape対象にsigle quoteを追加しています。
あと、ついでに1.8.7対応のコード(Issue #3927: warning: regexp match /.../n against to UTF-8 string · rails/rails)を削除。

# activesupport/lib/active_support/core_ext/string/output_safety.rb
-    HTML_ESCAPE = { '&' => '&amp;',  '>' => '&gt;',   '<' => '&lt;', '"' => '&quot;' }
+    HTML_ESCAPE = { '&' => '&amp;',  '>' => '&gt;',   '<' => '&lt;', '"' => '&quot;', "'" => '&#x27;' }
CVE-2012-3465

XSS Vulnerability in strip_tags


不正なhtml形式の場合、strip_tags が動作しなかったようです。
テストコードに下記のようなのが追加されています。

assert_equal "", strip_tags("<script>")


修正箇所。へー。

#actionpack/lib/action_view/helpers/sanitize_helper.rb
def strip_tags(html)
-  self.class.full_sanitizer.sanitize(html).try(:html_safe)
+  self.class.full_sanitizer.sanitize(html)
end

ざっくり

ActionPack

・deprication の削除
':data => { :confirm => "Text" }'、:disable_with、:mouseover、button_to_function、link_to_function

ActiveRecord

RSpec利用時にdevelopmentのdatabase切り捨てが発生していた模様。
原因は、RAILS_ENVの渡し方に問題があるようです。
4b8b8c)3.2.7のバグっぽいです。


・数値の0から0に値を変更した場合、changesメソッドの戻り値がtrueになっていたのを修正(Issue #7237


・depricationの削除
update_attribute, composed_of, :finder_sql, :counter_sql, :insert_sql, :delete_sql


・session storeがeager loadされない(Issue #7160
ActionDispatchなしでeager loadingされないって書いてるが、ちょっとよくわからん。

ActiveSupport

・Mocha > 0.12.1 使うとまずかった模様

・depricationの削除
ActiveSupport::JSON::Variable

余談

security reportはemailで送るんですね。
Ruby on Rails: Security Policy