Rails version 3.2.4/5 に続き、またもやセキュリティfixです。
CVE
・Ruby on Rails Unsafe Query Generation Risk in Ruby on Rails (CVE-2012-2694) - Google グループ
・Ruby on Rails SQL Injection (CVE-2012-2695) - Google グループ
Release ANN
・Riding Rails: Rails version 3.2.6 has been released!
・Riding Rails: Rails version 3.1.6 has been released!
・Riding Rails: Rails version 3.0.14 has been released!
ざっくり
Unsafe Query Generation Risk in Ruby on Rails
unless params[:token].nil? user = User.find_by_token(params[:token]) user.reset_password! end
params[:token] が ['xyz', nil]を返すような場合
SQLとしては、 IN ('xyz', NULL) と追加されてしまうという対応のようです。
前回の続き物ですね。
to_sするこの回避策も嫌ですね。upgradeしておきたいところ。
unless params[:token].nil? || params[:token].to_s.empty? user = User.find_by_token(params[:token].to_s) user.reset_password! end
Creditを見てみると、githubをhackしたEgor Homakov さんの名前が。
SQL Injection
これがまずいらしいです。
Post.where(:id => params[:id]).all
回避策はこちら。
Post.where(:id => params[:id].to_s).all
testコードを見てみると
どうやら、hashの入れ子だとSQL Injectionされていたようです。
だから回避策で to_s してるのか。
diff --git a/activerecord/test/cases/relation/where_test.rb b/activerecord/test/cases/relation/where_test.rb index 90c690e..b9eef1d 100644 --- a/activerecord/test/cases/relation/where_test.rb +++ b/activerecord/test/cases/relation/where_test.rb @@ -11,6 +11,12 @@ module ActiveRecord end end + def test_where_error_with_hash + assert_raises(ActiveRecord::StatementInvalid) do + Post.where(:id => { :posts => {:author_id => 10} }).first + end + end
他
actionpack
・Deprecate :confirm in favor of ':data => { :confirm => "Text" }' option for button_to, button_tag, image_submit_tag, link_to and submit_tag helpers.
activerecord
・update_attribute(※3.2.7予定)がdeprecate
次回release予定ですが、update_attributeがupdate_columnに変わるようです。
まぁ、update_attributesと間違えやすかったですからね。