ruby 1.9 におけるハッシュ飽和攻撃による DoS 脆弱性 (CVE-2012-5371)

ruby 1.9 系列で使用しているハッシュ関数について、ハッシュ飽和攻撃によってサービスを停止させることができる脆弱性が報告されました。 この脆弱性は 1.8.7 に対して公表された CVE-2011-4815 とは異なるものです。 全ての ruby 1.9 ユーザーは、この問題に対するセキュリティフィックスが含まれた ruby-1.9.3 patchlevel 327 に更新することが推奨されます。

影響

綿密に構築された文字列の並びをサーバーに対して送信することにより、そのサーバーがこの文字列の並びを文字列をキーとした Hash オブジェクトの生成に利用する場合、サービス停止攻撃が成立します。 例えば、信頼できない送信元から送られた JSON データを解釈する Web アプリケーションなどがこの脆弱性の影響を受けます。

詳細

この脆弱性は ruby 1.8.7 における CVE-2011-4815 に類似しています。 ruby 1.9 系列は MurmurHash 関数の改変版を使用していましたが、この関数においてもそれぞれのハッシュ値が衝突するような文字列の並びを作成する手法が報告されました。 今回の対応では、String オブジェクトに対するハッシュ関数を MurmurHash から SipHash 2-4 に変更しています。

解決策

ruby 1.9 を使用している場合、ruby-1.9.3 patchlevel 327 へ更新してください。 ruby 2.0.0 preview1 または trunk を使用してる場合、revision 37575 以降へ更新してください。 また、信頼できない送信元からのデータ入力を受け入れる ruby アプリケーションは、データのサイズを適切なサイズまでに制限するように作成して下さい。 将来においても、プログラミング言語のレベルでこの種の脆弱性に対する防護策を提供可能であるかどうかは保証されていません。

影響のあるバージョン

  • ruby 1.9.3 patchlevel 327 より前の全ての ruby 1.9 系列
  • ruby 2.0.0 revision 37575 より前の全ての ruby 2.0 系列 (2.0.0 preview1 を含む)

クレジット

この脆弱性は SipHash 設計者の一人である Jean-Philippe Aumasson によって報告されました。 今回の対応における SipHash の実装は、ruby のコミッタの一人である Martin Boßlet によって提供されたものをベースとしました。

更新履歴

  • 2012-11-21 22:14:42 誤字修正
  • 2012-11-10 04:23:00 初版