security fixです。
CVE
digest認証 を利用している場合に影響があるようです。
Release ANN
・Riding Rails: Rails version 3.2.7 has been released!
・Riding Rails: Rails version 3.1.7 has been released!
・Riding Rails: Rails version 3.0.16 has been released!
ざっくり
CVE-2012-3424
authenticate_or_request_with_http_digestにDoS脆弱性があったもようです。
回避策はないようなのでupdateしましょう。
こんなやつ。
class MyController < ApplicationController def index authenticate_or_request_with_http_digest(REALM) do |uname| # ... end end end
実装は
こちら。
HashをHashWithIndifferentAccessに変更しているのと
headerから取得したkey(ユーザ名)をto_symしています。
ソース見てもどこがポイントかよくわかんなかったのでCVEでググってみると
JVNDB-2009-002526 - JVN iPedia - 脆弱性対策情報データベース
がありました。
Ruby on Rails のダイジェスト認証の機能の事例コードには、 ユーザが存在しない場合の authenticate_or_request_with_http_digest 定義に関して不備があるため、 パスワードなしの無効なユーザ名を送信することでアプリケーションの認証を回避される脆弱性が存在します。
なるほど、Headerから取得したkeyをto_symしてるとこがまずいようです。
余談ですが
HashWithIndifferentAccess がよくわからないのでソースを見てみます。
# activesupport-3.2.7/lib/active_support/hash_with_indifferent_access.rb def []=(key, value) regular_writer(convert_key(key), convert_value(value)) end protected def convert_key(key) key.kind_of?(Symbol) ? key.to_s : key end def convert_value(value) if value.is_a? Hash value.nested_under_indifferent_access elsif value.is_a?(Array) value.dup.replace(value.map { |e| convert_value(e) }) else value end end
keyがSymbolでも対応できるようにto_sしています。
def nested_under_indifferent_access self end
他
actionpack
・名前付きrouteに/が含めれるようになったっぽい
Add support for optional root segments containing slashes · 71d274d · rails/rails
get '/(page/:page)', :to => 'pages#index', :as => :root
activemodel
・validates_inclusion_of / validates_exclusion_of で:withinオプションが可能(alias :in)
activerecord
deprecate祭り。
・finder_sql / counter_sql(代わりはscope)
・has_and_belongs_to_manyのinsert_sql/delete_sql (代わりはhas_many :through)
・composed_of
rails4で無くなるそうです。(代わりはaccessors/mutatorsで。)
def balance @balance ||= Money.new(value, currency) end def balance=(balance) self[:value] = balance.value self[:currency] = balance.currency @balance = balance end
(これmutatorって呼ぶの?)
・update_attribute (代わりはupdate_column。)