railsの脆弱性への対応をパッチで対応する。
作業中ですが、記録のために、、、
自分は、rails2.3.12を使ってますが、rubyが1.8.6から上げられない状況にあるが故に(検証とパフォーマンスの問題)、パッチ対応を選択しました。
railsの脆弱性に関するパッチ対応
内容を読みつつパッチをダウンロード
パッチファイルは、$HOME/tmp 以下に置いてあるとして、、、
パッチをドライラン
% cd /path/to/gems/ % patch -p0 --dry-run < $HOME/tmp/2-3-xml_parsing.txt (Stripping trailing CRs from patch.) patching file actionpack-2.3.12/test/controller/webservice_test.rb (Stripping trailing CRs from patch.) patching file activesupport-2.3.12/CHANGELOG (Stripping trailing CRs from patch.) patching file activesupport-2.3.12/lib/active_support/core_ext/hash/conversions.rb
パッチをあてる(patchのオプションは。。。)
% cd /path/to/gems/ % sudo patch -p0 < $HOME/tmp/2-3-xml_parsing.txt [sudo] password for admin: (Stripping trailing CRs from patch.) patching file actionpack-2.3.12/test/controller/webservice_test.rb (Stripping trailing CRs from patch.) patching file activesupport-2.3.12/CHANGELOG (Stripping trailing CRs from patch.) patching file activesupport-2.3.12/lib/active_support/core_ext/hash/conversions.rb
環境内のアプリケーション/railsのワーキングコピーでテスト
- アプリケーションのテストの場合、主にはfunctional/integrationが該当。
気になるリクエストを動作テスト
- 通常のリンクをたどるリクエストは関係ない。
- formデータも、今回の修正には関係ない。
- 例えば、、、swfuploadは挙動するか? => 挙動してた。。。
- 例えば、、、ajaxは挙動するか? => 挙動してる。。。
修正された内容について
中心的な修正は、1箇所のみ。他はテスト
controller
な修正は含まれないが、使用しているロジックが修正され、結果的に修正されている。- 今回の脆弱性に関する、ケースレベルでの確認する場合は、
activesuport/test/core_ext/hash_ext_test.rb
activesupport/lib/active_spport/core_ext/hash/conversions.rb
- ハッシュを生成するロジックに、
disallowed_type
というロジックが加わっている。 from_xml
という、リクエストから主にparamsハッシュを生成するロジックがある。- その第2引数に
disallowed_type
が設定可能になる。 未設定==デフォルト
、では、DISALLOWED_TYPE=%W(symbol yaml)
がdisallowed_type
となる。
- その第2引数に
- 実際に、
disallowed_type
を見て処理するのは、typecast_xml_value
という変換ロジック内。 disallowed_type
なものが渡された場合、例外DisallowedType
が発生する。
- ハッシュを生成するロジックに、