Railsセキュリティアップデート

セキュリティアップデートがまとめてリリースされました。
アップデートできない人は回避策をどうぞ。

Filter Skipping bugs

概要

action名に*などを指定すると任意のviewが参照できてしまう問題。

対象

3.0以降でroutesに:actionを使用している場合が該当。

回避策
match '/:controller(/:action(/:id))' 

match '/:controller(/:action(/:id))', :action => /[a-z_]+/ 

に変更。

SQL Injection issues

概要

quote_table_name methos(こんなんあるんか)にsql injectionの脆弱性。

対象

全バージョン。

回避策

なし。

Parse error in strip_tags

strip_tagsにXSSの脆弱性。

対象

全バージョン。

回避策

3.0より前はstrip_tagsをescape。
これを

<%= strip_tags(params[:user_content]) %> 

これに変更。

<%=h strip_tags(params[:user_content]) %> 


3.0以降は

<%= strip_tags(params[:user_content]) %> 

これに変更。

<%=h strip_tags(params[:user_content]).to_str %> 


2.3系でrails_xssプラグインを使用しているユーザの回避策はなし。

UTF-8 escaping vulnerability

ruby1.8の正規表現で、あるunicode文字列を使用した場合にXSSとなる脆弱性。

対象

ruby1.8系でのrails2.0以上。

回避策

before_filter

private 
  before_filter :reject_invalid_requests 
  def reject_invalid_requests 
    if include_invalid_utf8?(params) 
      head :bad_request 
    end 
  end 
  def include_invalid_utf8?(param) 
    param.any? {|k, v| !validate(k, v)} 
  end 
  def validate(*vars) 
    vars.all? do |var| 
      case var 
      when Hash 
        var[:tempfile].respond_to?(:read) ? true : !include_invalid_char?(var) 
      when Array 
        validate(*var) 
      else 
        ActiveSupport::Multibyte.verify(var.to_s) 
      end 
    end 
  end 

他bugfixなど

schema.rbにmagic encoding追加、デフォルトencodingをUTF-8に。
ActiveRecord::Batches#find_eachがselfを返すなど。
(3.0.10)

リリースが遅れた理由

珍しく下記のような内容が記載されています。


8/8にリリース予定だったが、CVEのidが発行されるのを待って遅らせたらしい。
でも、CVE idがまだ発行されないので、先行的にリリースをしたとのこと。


どうしたんでしょうね。CVE。