2011-02-09 25 views
9

Có một cách dễ dàng để hoàn toàn khóa rất nhiều JVM:Loại webapp nào có thể bị ảnh hưởng bởi lỗi nổi?

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

hay, để treo các trình biên dịch:

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

như đã giải thích ở đây: http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/

Câu hỏi của tôi rất đơn giản: loại ứng dụng web được hình thành tốt nào bạn biết rằng thực tế có thể bị ảnh hưởng bởi điều này?

Nói cách khác: loại trình tấn công web nào có thể là kẻ tấn công thực hiện Từ chối dịch vụ sử dụng điểm yếu đã biết đó?

Rất tệ, điều đó thật tệ. Nhưng bên cạnh các lập trình viên sử dụng dấu phẩy động để tính toán tiền, tôi không thấy nhiều trang web được hỗ trợ bởi Java có thể bị lỗi.

tôi có thể thấy đồ chơi applet khoa học là ứng cử viên nhưng bên cạnh đó ...

Dưới đây là một threadump của thread chặn (thực hiện bằng "giết -3" trên Linux):

"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 khóa ở đây:

java phiên bản "1.5.0_10" Java (TM) 2 Runti tôi Môi trường, Phiên bản Chuẩn (xây dựng 1.5.0_10-b03) Máy chủ Java HotSpot (TM) VM (xây dựng 1.5.0_10-b03, chế độ hỗn hợp)

phiên bản java "1.6.0_17" Java (TM) SE Runtime Môi trường (xây dựng 1.6.0_17-b04) Máy chủ Java HotSpot (TM) VM (xây dựng 14.3-b01, chế độ hỗn hợp)

+0

(làm cách nào để biến điều này thành cộng đồng Wiki?) – SyntaxT3rr0r

+2

Dường như bất cứ điều gì ngây thơ chuyển đổi giá trị chuỗi do người dùng nhập thành một đôi có thể bị ảnh hưởng. –

+0

Đây không phải là câu hỏi thực sự? Làm thế nào một người nào đó có thể bỏ phiếu để đóng này? – SyntaxT3rr0r

Trả lời

7

Ghét rõ ràng, nhưng tất cả ứng dụng cho phép người dùng gửi chuỗi "2.2250738585072011e- 308 ", và các cuộc gọi phân tích cú pháp đôi trên có thể" thực tế "bị ảnh hưởng.

+0

Không biết nếu bạn nói rõ ràng xứng đáng một +1 cho bạn hoặc -1 cho câu hỏi. Dù sao thì tôi cũng đang đi một cách dễ dàng. –

+0

Tôi cũng muốn thêm rằng, trường hợp này rất phù hợp với hầu hết các dịch vụ dựa trên phần còn lại. Bất kỳ ứng dụng nào không nhất thiết phải khử trùng đầu vào. (không phải là tôi nói rằng tất cả các ứng dụng nên khử trùng tất cả mọi thứ). Có nói rằng hầu hết các khung ứng dụng xử lý loại chuyển đổi ác này. (chúng đủ thông minh để không thực hiện thao tác an toàn loại) –

1

Bất cứ điều gì bạn cho phép người dùng nhập số dấu phẩy động và thực hiện một phép so sánh hoặc tính toán trên đó phải là nghi ngờ. Tôi sẽ nói một hình thức thanh toán, máy tính cho vay, và hình thức đấu thầu sẽ là hình thức phổ biến nhất. Tất cả nó sẽ mất là một tiện ích máy tính nhỏ trong toàn bộ ứng dụng của bạn để có thể treo máy chủ web bằng các lần truy cập lặp lại.

8

Nhiều trang web máy chủ phân tích cú pháp phần tiêu đề http bằng Double.parse, vì vậy chúng tôi đang xử lý cơ sở hạ tầng tại đây (ngoài bất kỳ vấn đề nào với các ứng dụng chạy trong vùng chứa). Các ý kiến ​​của blog Binary Khám phá bạn liên kết để có những điều sau đây là một ví dụ:

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

Nếu servlet mà yêu cầu được đi ngược lại thực hiện cuộc gọi tới bất kỳ API nội địa (mà sau đó sẽ cố gắng phân tích tiêu đề ngôn ngữ), ở trên sẽ đưa máy chủ xuống.

Vì vậy, có, đây là một vấn đề rất lớn. Bề mặt tấn công khá lớn, và hậu quả khá cao.

+2

+1. zomg. Đây là ** HUGE **. Huger hơn hầu hết mọi người (đặc biệt là fanbois Java ... Đừng hiểu lầm tôi: Tôi * yêu * Java) nhận ra. – SyntaxT3rr0r

4

Tất cả các phiên bản của Tomcat đã được vá và phát hành để xử lý điều kiện "Chấp nhận ngôn ngữ".

Oracle đã đưa ra bản vá nóng mà có thể được tìm thấy ở đây:

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

Các hotfix sẽ làm việc cho java 1.4, 1.5, và 1.6.

+0

zomg. Đây thậm chí không phải là "CPU" (Bản cập nhật vá quan trọng). Đó là một hotfix. Điều này nói lên khối lượng như thế nào dễ bị tổn thương nhất của máy chủ web Java. – SyntaxT3rr0r

0

Tôi hiểu rằng số này chỉ là một trong một loạt các số có thể làm hỏng ứng dụng nhưng không thể chống lại nhận xét, kiểm tra 4 chữ số cuối cùng. Năm 2012, nó nói khối lượng của số, ngày tận thế được dự đoán trước và các ứng dụng hiện đại của chúng tôi đang trỏ đến ngưỡng bị rơi trừ khi cố định :-)

Các vấn đề liên quan