3.2.16リリース!重大なセキュリティFIXがあります|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。4.0.2と3.2.16がリリースされました。このリリースには、5件(3.2.16には4件)のセキュリティFIXが含まれています。重要度の高いものがあるため、早急なアップデートをしましょう。CVE-2013-6416simple_formatヘルパーのXSS脆弱性に関する修正です。3.2系では元から発生しないため、3.2.16には含まれません。simple_formatはhtml_optionsとしてHashを渡せますが、デフォルトで、このclass指定がHTMLエスケープされていませんでした。class指定をユーザ入力による場合、容易にXSSが成立してしまいます。'"><script>alert(1)</script>'simple_formatの結果なお、該当の修正はこのコミットなのですが、小さいコミットで一瞬あれ?と思うけど面白いです。SanitizeとEscapeは全然違うものなのに、うっかり混ざってしまっていたようですね。何らかの理由でアップデートできない場合、simple_formatにclassを指定している箇所をすべてチェックし、手動でエスケープするようにしましょう。https://groups.google.com/forum/#!topic/ruby-security-ann/5ZI1-H5OoIMCVE-2013-6414ActionViewのDoS脆弱性に関する修正です。未修正の状態では、HTTPヘッダのformat部分を細工することで、ActionViewのキャッシュキーを操作することができます。これにより、リクエストを繰り返すとキャッシュキーを無限に増大させることができ、最終的にメモリ不足によるサービス停止を引き起こすことが可能になります。(具体的な攻撃方法はちょっと見ただけではわかりませんでした)対策として、あらかじめ登録されている正当なMIMEタイプ以外は弾くように修正されました。3.0と3.1系にもパッチが提供されています。3.0/3.1を使っている場合や、何らかの理由でアップデートできない場合は、以下のパッチの適用を検討しましょう。https://groups.google.com/forum/#!topic/ruby-security-ann/A-ebV4WxzKgCVE-2013-6415number_to_currencyのXSS脆弱性に関する修正です。未修正の状態では、number_to_currencyに渡すunitはHTMLエスケープされません。単位を「円」「ペリカ」「ゼニー」などユーザが変更できるようにしている場合、XSSが成立します。対策として、デフォルトでunitはHTMLエスケープされるようになりました。html_safeした場合は従来通りの挙動になります。何らかの理由でアップデートできない場合、unitを手動でHTMLエスケープするようにしましょう。h(params[:unit])https://groups.google.com/forum/#!topic/ruby-security-ann/9WiRn2nhfq0CVE-2013-4491反射型XSS脆弱性に関する修正です。gemが、以下のバージョン未満のときのみ発生します。最近作ったプロジェクトなら、問題ない可能性が高いです。applications未修正の状態では、i18nで対応するキーが無い場合、デフォルトで以下のように見やすいHTML形式で結果が返ってきました。hoge">hoge</span>これは見やすくて便利なのですが、しかしi18nが上記対策バージョン未満の場合、このkeyがHTMLエスケープされません。translationのキーをユーザが自由に入力できるパターンは少ないと思いますが、以下のような設定は多くのサイトで使われているのではないでしょうか。translationがある場合、ページの文字が大きくなったりします。tranlation表示ではなく、プレインテキスト形式に変更になりました。仕様変更になりますので、ご注意ください。:htmlを手動で指定しましょう。何らかの理由でアップデートできない場合、以下の本文に記載のあるモンキーパッチをconfig/initializersに設置しましょう。3.2.11で修正されたCVE-2013-0155ですが、対応が不完全だったため再修正されたものです。3.2.11のときに、Rails::Requestは修正されていましたが、Rack::Requestのほうは未対策でした。Middlewareがパラメータを参照した場合に、従来と同じ問題が発生する可能性があります。Middlewareでは、Railsに渡す前のパラメータを取得・加工していることがあるためです。対策として、Rack::Requestでもdeep_munge(空ハッシュなどをnilに変換)されるようになりました。Middlewareがパラメータを参照している箇所を、慎重に検査するしかありません。Middlewareを追加しているので、注意が必要です。https://groups.google.com/forum/#!topic/ruby-security-ann/niK4drpSHT4まとめ今回のセキュリティFIXは、潜在的というレベルではなく、多くのアプリで即座に影響のあるものが含まれています。アップデートが容易になるよう、セキュリティFIXのみのリリースになっているほか、個別パッチもリリースされていますので、早急なアップデートをしたいところです。シェアツイートブックマークLINEこの記事を書いた人babaゆとりプログラマー。BPS設立初期に在学中から参加している最古参メンバーの一人。Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。Gold、AWSソリューションアーキテクト(アソシエイト)、日商簿記2級、漢検準1級などを保有。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。