またもや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コードが実行されちゃう可能性があると。
こりゃ大変だ。
--- !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)