Ruby 1.8.x すべてのバージョンにサービス拒否(Denial of Service:Dos)脆弱性が発見された。
BigDecimal オブジェクトから Floatへの変換処理において,攻撃者がセグメント違反(Segmentation fault)を発生させることができる,という問題がある。
ActiveRecord がこのメソッドに依存しているため,大部分のRailsアプリケーションが影響を受ける。ただしRails固有の問題ではない。
Riding Rails ブログもこの脆弱性を取り上げている。
まもなく登場する Rails 2.3.3 リリースには,この脆弱性に関する潜在的な攻撃手段範囲を制限するような,いくつかのマイナーチェンジが含まれている。しかしこれらのマイグレーションでも,すべての潜在的な攻撃方法を防止することはできないので,可能な限り早く ruby インストレーションのアップグレードを実施すべきである。
ブログはNZKoz' bugdecimal-segfault-fix についても言及している。これはRubyインストレーションを即時にアップグレードできないユーザ向けの一時的なフィックスであるが,アプリケーションの動作を損ねる可能性があるため,アップグレードが唯一正式な解決手段であることに変わりはない。
すべての Ruby 1.8.x バージョンがこの問題の影響を受ける。対策済のRubyバージョンはRuby 1.8.6-p369(1.8.6 FTP ダウンロードリンク)以降およびRuby 1.8.7-p173(1.8.7 FTP ダウンロードリンク)以降である。
この問題はJRubyにも関係する。トラックBugJRUBY-3744に次のような説明がある。
JRuby にも同様に影響があるようだ。クラッシュはしないが,無限ループへのスタック(stuck)が発生する。
動作内容はこのサンプル出力に記録されている。
試験した結果,bigdecimal-degfault-fixで使用された解決策がJRuby でも一時的なフィックスとしては有効なことが分かった。これはBigDecimalクラスを拡張して,過大な数値が使用された場合に例外をスローするように修正するものだ。このフィックスコードはJRuby スレッドをbusy状態に留めずに即座にフェールさせる。そのためフィックスコードの既定値を超える大きな数値の処理を必要とするアプリケーションの挙動を損ねるのは明らかである。
Ruby 1.9.xユーザにはこの問題は影響しない。