倍精度浮動小数点の処理に起因する無限ループの脆弱性(Scan Tech Report)

2011年2月16日(水) 08時00分
このエントリーをはてなブックマークに追加
1.概要
Java および PHP には、特定の倍精度浮動小数点の処理に不備が存在するため、サービス運用妨害 (DoS) が発生する脆弱性が報告されました。ローカルの悪意あるユーザまたはリモートの第三者に利用された場合、Java/PHP アプリケーションを不正に停止される可能性があります。
脆弱性の悪用は容易であると考えられ、深刻な影響を受ける可能性があるため、対象のユーザは速やかに以下の対策を実施することを推奨します。


2.深刻度(CVSS)
・Java
CVE-ID 未割り当てのため、現状なし
・PHP
5.0
http://nvd.nist.gov/cvss.cfm?version=2&name=CVE-2010-4645&vector=%28AV%3AN/AC%3AL/Au%3AN/C%3AN/I%3AN/A%3AP%29


3.影響を受けるソフトウェア
Java SE (JDK and JRE) 6 Update 23※1
PHP 5.2.16 以前
PHP 5.3.4 以前
Apache Tomcat 5.5.32 以前※2
Apache Tomcat 6.0.31 以前
Apache Tomcat 7.0.6 以前

※1 Java SE においては、Windows、Solaris、および Linux プラットフォームの全ての環境が影響を受けます。
また、Solaris 8 上の SDK 1.4.2_29 以前、Solaris 9 上の JDK 5.0 Update 27 以前も影響を受けます。
※2 その他の Java ベースのサーバまたはクライアントアプリケーションもこの脆弱性の影響を受ける可能性があることが報告されています。


4.解説
倍精度浮動小数点数は、IEEE 64 ビット (8 バイト) の符号付き浮動小数点数 (仮数と指数で表現) を表し、double 型は、倍精度浮動小数点数で表せる数値を意味します。

Oracle (Sun) Java の JRE コンポーネントには、doubleValue() メソッド (FloatingDecimal.java) において、入力値の double 型への変換処理に不備が存在するため、倍精度浮動小数点 "2.2250738585072012e-308" を処理した場合に、無限ループが発生し、JRE がハングアップする脆弱性が存在します。(CVE-2010-4476)

同様に、x87 FPU レジスタを利用する環境の PHP には、zend_strtod() 関数 (strtod.c) において、入力値の double 型への変換処理に不備が存在するため、倍精度浮動小数点 "2.2250738585072011e-308" を処理した場合にに、無限ループが発生し、PHP インタプリタがハングアップする脆弱性が存在します。(CVE-2010-4645)

それぞれの脆弱性を利用することで、ローカルまたはリモートの攻撃者は CPU 資源が大量に消費させ、Java/PHP アプリケーションをサービス不能状態にする可能性があります。

なお、PHP の問題に関しては、x86 32 ビットの PHP プロセスのみ影響を受けることが php.net より報告されています。また、php.net では、対象システムでこの脆弱性の影響を受けるかどうか確認するためのテストコードを公開しています。

test_bug53632:
http://www.php.net/distributions/test_bug53632.txt


5.対策
(Web非公開)

6.関連情報
(Web非公開)

7.エクスプロイト
(Web非公開)

8.エクスプロイトの動作概要および結果
(Web非公開)

9.想定される攻撃シナリオ
(Web非公開)

(執筆:株式会社ラック サイバーリスク総合研究所 コンピュータセキュリティ研究所

※Web非公開該当コンテンツ閲覧をご希望の方はScan Tech Reportにご登録(有料)下さい。

Scan Tech Report
http://scan.netsecurity.ne.jp/archives/51916302.html
《ScanNetSecurity》
RSS

特集・連載

ピックアップフォト