2011-02-09 12 views
9

完全にJVMの多くをロックする簡単な方法があります:フローティングバグの影響を受けるウェブアプリケーションはどれですか?

class runhang { 
public static void main(String[] args) { 
    System.out.println("Test:"); 
    double d = Double.parseDouble("2.2250738585072012e-308"); 
    System.out.println("Value: " + d); 
} 
} 

または、コンパイラハングアップする:

class compilehang { 
public static void main(String[] args) { 
    double d = 2.2250738585072012e-308; 
    System.out.println("Value: " + d); 
} 
} 

をここで説明したように:http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/

私の質問は非常に簡単です:どのようなうまく構想されたWebアプリケーションが、これによって現実的に影響を受けるのか分かりますか?

つまり、どのような種類のWebアプリケーションで攻撃者がサービス拒否を実行する可能性がありますか?既知の弱点を使用していますか?

ひどく悪いです。しかし、金銭計算に浮動小数点を使用するプログラマー以外にも、クラッシュする可能性のある多くのJavaベースのWebサイトは見当たりません。

私はおもちゃの科学的なアプレットが候補であることが、それ以外にも見ることができます...

をここでブロックされたスレッド( "殺す-3" Linux上で使用して行う)のthreadumpです:

"main" prio=1 tid=0x09ab8a10 nid=0x57e9 runnable [0xbfbde000..0xbfbde728] 
     at sun.misc.FDBigInt.mult(FloatingDecimal.java:2617) 
     at sun.misc.FloatingDecimal.multPow52(FloatingDecimal.java:158) 
     at sun.misc.FloatingDecimal.doubleValue(FloatingDecimal.java:1510) 
     at java.lang.Double.parseDouble(Double.java:482) 

EDITここでロックされ

のJVM:

Javaのバージョン "1.5.0_10" のJava(TM)2 Runti私の環境、標準版(1.5.0_10-B03を構築) は、Java HotSpot(TM)ServerのVM(1.5.0_10-B03、混合モードを構築する)

Javaのバージョン "1.6.0_17" のJava(TM)SEランタイムJava HotSpot(TM)サーバVM(ビルド14.3-b01、混合モード)

+0

(私はこれをコミュニティのWikiに変換するにはどうすればいいですか) – SyntaxT3rr0r

+2

これはまったくのように見えますユーザが入力した文字列の値をdoubleに変換すると、影響を受ける可能性があります。 –

+0

これはどうして本当の質問ではありませんか?誰かがこれを閉じるためにどのように投票できますか? – SyntaxT3rr0r

答えて

7

明示的であるがユーザが文字列「2.2250738585072011e- 308 "を呼び出し、parse double onを"現実的に "影響を与えることができます。

+0

あなたが明白であると述べたら、あなたに+1を、または質問に-1を付けてもよいかどうか分かりません。とにかく私は簡単な方法を取っています。 –

+0

私はこれを追加したいと思います。このケースは残りのほとんどのサービスに関連しています。必ずしも入力をサニタイズしないアプリケーション。 (私はすべてのアプリケーションがすべてを消毒すべきだと言っているわけではありません)。ほとんどのアプリケーションフレームワークがこの型変換の悪を処理すると言います。 (タイプセーフな操作を行わないほどスマートです) –

1

ユーザが浮動小数点数を入力し、その上で比較または計算を実行させる場合は、疑わしいものでなければなりません。私は、支払いフォーム、ローン計算機、および入札フォームが最も一般的であると言います。すべてのアプリケーションで繰り返し計算されたヒットでWebサーバーをハングアップできるようにするには、小さな計算ツールを1つ使用するだけです。

8

多くのWebサーバDouble.parseを使用して、HTTPヘッダーの解析部分、私たちは(コンテナ内で実行するアプリケーションで何の問題に加えて)ここにインフラを扱っています。あなたは一例として、次のことを持っているリンク探るバイナリーブログのコメント:

GET/HTTP/1.1 
Host: myhost 
Connection: keep-alive 
Accept-Language: en-us;q=2.2250738585072012e-308 

要求が逆行されたサーブレットは、解析しようとローカリゼーションのAPIのいずれかへの呼び出しを(行った場合言語ヘッダー)、上記はサーバーを停止させます。

はい、これは非常に大きな問題です。攻撃面はかなり大きく、その結果はかなり高いです。

+2

+1。ゾムグ。これは**巨大な**です。ほとんどの人よりもヒューガー(特にJava fanbois ...私を間違えないでください:私は*愛* Java)を実現します。 – SyntaxT3rr0r

4

「Accept-Language」条件を処理するために、Tomcatのすべてのバージョンがパッチ適用され、リリースされています。修正プログラムは、Java 1.4、1.5、および1.6のために動作します

http://www.oracle.com/technetwork/java/javase/fpupdater-tool-readme-305936.html

Oracleは、ここで見つけることができホットフィックスをリリースしました。

+0

zomg。これは「CPU」(Critical Patch Update)でさえありません。それは修正プログラムです。これは、ほとんどのJava Webサーバーがどれほど脆弱であるかを示すものです。 – SyntaxT3rr0r

0

この数字は、アプリケーションをクラッシュさせてもコメントできない数の範囲内で1つしかないことを理解しています。最後の4桁を確認してください。

関連する問題