BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Ruby の BigDecimal にサービス拒否(DoS)脆弱性

Ruby の BigDecimal にサービス拒否(DoS)脆弱性

ブックマーク

原文(投稿日:2009/6/10)へのリンク

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ユーザにはこの問題は影響しない。

この記事に星をつける

おすすめ度
スタイル

BT