BigDecimal の DoS 脆弱性

Ruby標準ライブラリの一つであるBigDecimalに、DoS(Denial Of Service)状態を引き起こしてしまう脆弱性が存在することが発見されました。 BigDecimalオブジェクトから浮動小数点数(Float)への変換に問題があり、攻撃者はsegmentation faultsを引き起こすことができます。

ActiveRecordライブラリはこのメソッドを使用しているため、多くのRailsアプリケーションはこの脆弱性の影響を受けます。しかしながら、これはRailsのみの問題ではなく、Rubyアプリケーション全体に影響の起こりうる問題です。

影響

攻撃者は巨大なBigDecimalの数値を変換することにより、DoS状態を引き起こすことができます。 その一例を以下に示します。

 BigDecimal("9E69999999").to_s("F")

脆弱性の存在するバージョン

1.8系

  • 1.8.6-p368 とそれ以前の全てのバージョン
  • 1.8.7-p160 とそれ以前の全てのバージョン

1.9系

  • (1.9.1の全てのバージョンはこの問題の影響を受けません)

解決方法

1.8系

1.8.6-p369 または ruby-1.8.7-p174 にアップグレードしてください。

更新情報

  • Ruby 1.8.7-p173 には問題がありました。すでにダウンロード済みの場合は、より新しいバージョンを再度取得してください。なお Ruby 1.8.6-p369 にはこの問題はありません。