Rails 3.2.12, 3.1.11, and 2.3.17 have been released!

またもやreleaseされていました。


3.2.12/11は1個、2.3.17には2個の脆弱性対策がされているのと
JSON gemも脆弱性対策がされています。

Riding Rails: Rails 3.2.12, 3.1.11, and 2.3.17 have been released!


CVE-2013-0276

attr_protected が回避される脆弱性。
attr_accessible 派は影響無し。
Fixed Versions:3.2.12, 3.1.11, 2.3.17

パッチを見てみると

正規表現の修正がされています。
複数行で値が渡されるとまずかったのかな。

-            @regex = /^(#{Regexp.escape(@prefix)})(.+?)(#{Regexp.escape(@suffix)})$/
+            @regex = /\A(#{Regexp.escape(@prefix)})(.+?)(#{Regexp.escape(@suffix)})\z/
-        key.to_s.gsub(/\(.+/, '')
+        key.to_s.gsub(/\(.+/m, '')

CVE-2013-0277

3.1以上は問題無し。3.0は影響あるけど修正なしだけど、パッチはある。
Fixed Versions: 2.3.17


ActiveRecordのserializeを使うとobjectをBLOBでDBに保存できますが
仕組み上はYAMLなんですが、このYAMLの中身が下記みたいのだと
任意のrubyコードが実行されちゃう可能性があると。
こりゃ大変だ。

YAML f7u12 | Tenderlovemaking

--- !ruby/hash:Helpers
foo: |-
  mname; end; puts 'hello!'; def oops


パッチは正規表現で/^---/があれば例外を投げるようにしています。

JSON gem CVE-2013-0269

また、JSON gemにも脆弱性対策がされているので更新を促しています。

Ruby1.9系に影響あり。
Fixed Versions: 1.7.7, 1.6.8, 1.5.5

JSON.parse(user_input) 

普通のparseですが、user_inputが以下のような場合だと

{"json_class":"foo"} 

"foo"定数を探しに行ってsymbolを作成するそうです。


tenderlove先輩のblogのように
SymbolはGCされないからメモリ食いつぶしますよー的なのかと思ったけど
CVEのメールの方には、SQL injectionにつながるって書いてますが、よくわかりません。

workaround
    JSON.parse(json, :create_additions => false) 

前々関係ないですが

結構前からなんですが、chromeでpatchファイルを参照すると結構みやすくなっていていい感じです。