おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

Rails2.1系にCSRFに対する脆弱製が発見されました

Rails2.1系のwebサービスを公開している方は注意。

Riding Rails: Potential Circumvention of CSRF Protection in Rails 2.1

どういう事かというと、

  • 通常、RailsCSRFを防ぐために、フォームにtokenを自動で埋め込みリクエスト受付時に認証を行っています。
  • ブラウザで普通生成できない、信頼されているcontent-typeのリクエストはそのtokenの認証を行わずスルーしているようです。
  • その信頼されているcontent-typeリストの中に、ブラウザで生成できる'text/plain'が入ってしまっているようです。

つまり、Rails2.1系で作られたwebサイトに対しては、content-typeをtext/plainにしておけばCSRFし放題ってこと・・・なはず。

対策

次回のアップデートバージョンである2.1.3及び2.2.2ではこの脆弱製は解消されているようです。
それらがリリースするまでの暫定処置としてはconfig/initializers配下にhoge.rbのようなファイルを作り、下記のように書けばOKなようです。

Mime::Type.unverifiable_types.delete(:text)