2011-02-09 7 views
9

Hay una manera fácil de bloquear totalmente un montón de JVM:¿Qué tipo de webapps puede verse afectado de forma realista por el error flotante?

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

o, para colgar el compilador:

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

como se explica aquí: http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/

Mi pregunta es muy simple: ¿Qué tipo de aplicación web bien concebida sabes que puede verse afectada de manera realista?

En otras palabras: ¿en qué tipo de webapps podría un atacante realizar un Denegación de servicio utilizando esa debilidad conocida?

Es malo, es terriblemente malo. Pero además de los programadores que usan el punto flotante para el cálculo monetario, no veo muchos sitios web respaldados por Java que puedan ser bloqueados.

puedo ver juguete applets científicas ser candidatos, pero aparte de eso ...

Aquí hay una threadump del hilo bloqueado (hecho uso de "matar -3" en 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) 

EDITAR

JVM encerrados aquí:

java version "1.5.0_10" Java (TM) 2 Runti Me Medio Ambiente, Standard Edition (build 1.5.0_10-b03) Java HotSpot (TM) Server VM (build 1.5.0_10-b03, modo mixto)

java version "1.6.0_17" Java (TM) SE Runtime Medio Ambiente (build 1.6.0_17-b04) Java HotSpot (TM) Server VM (build 14.3-b01, modo mixto)

+0

(¿cómo convierto esto en Wiki de una comunidad?) – SyntaxT3rr0r

+2

Parece algo ingenuo convierte un valor de cadena ingresado por el usuario en un doble que podría verse afectado. –

+0

¿Cómo es que esto no es una pregunta real? ¿Cómo alguien puede votar para cerrar esto? – SyntaxT3rr0r

Respuesta

7

odio a decir lo obvio, pero todos aplicación que permite al usuario envía el 2.2250738585072011e- cadena" 308 ", y las llamadas parse dobles pueden verse" realísticamente "afectadas.

+0

No sé si declarar lo obvio merece un +1 para ti o un -1 para la pregunta. De todos modos, estoy tomando el camino más fácil. –

+0

También me gustaría añadir que este caso es muy relevante para la mayoría del servicio basado en el resto. Cualquier aplicación que no necesariamente desinfecte la entrada. (No es que diga que todas las aplicaciones deben desinfectar todo). Habiendo dicho eso, la mayoría del framework de aplicaciones maneja este tipo de conversión malvada. (Son lo suficientemente inteligentes como para no realizar un tipo de operación segura) –

1

Debe sospecharse cualquier cosa en la que permita al usuario ingresar un número de punto flotante y hacer una comparación o cálculo en ella. Yo diría que un formulario de pago, una calculadora de préstamo y un formulario de licitación serían los más comunes. Todo lo que se necesitaría es una pequeña utilidad de calculadora en toda su aplicación para poder colgar el servidor web mediante hits repetidos.

8

Muchos servidores web analizan una parte de los encabezados http usando Double.parse, por lo que estamos tratando con infraestructura aquí (además de cualquier problema con las aplicaciones que se ejecutan en el contenedor). Los comentarios del blog Binary Explorando le enlazar a tener el siguiente ejemplo:

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

Si el servlet que la solicitud va en contra hace una llamada a cualquiera de las API de localización (que luego se intentará analizar la encabezado de idioma), lo anterior reducirá el servidor.

Así que sí, este es un problema muy grande. La superficie de ataque es bastante grande y las consecuencias bastante altas.

+2

+1. zomg. Esto es ** ENORME **. Más grande que la mayoría de la gente (especialmente fanbois de Java ... No me malinterpreten: I * love * Java) darse cuenta. – SyntaxT3rr0r

4

Todas las versiones de Tomcat se han parcheado y liberado para manejar la condición "Aceptar idioma".

Oracle ha publicado una revisión en caliente que se puede encontrar aquí:

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

La revisión trabajará para Java 1.4, 1.5 y 1.6.

+0

zomg. Esto ni siquiera es una "CPU" (actualización de parche crítico). Es un hotfix. Esto dice mucho sobre cuán vulnerables son la mayoría de los servidores web de Java. – SyntaxT3rr0r

0

Entiendo que este número es solo uno en un rango de números que bloquearían las aplicaciones, pero no pude resistirme a comentar, verifique los últimos 4 dígitos. 2012, habla volúmenes del número, el antiguo y predecible día del juicio final, y nuestras aplicaciones modernas apuntan a un umbral de falla a menos que se solucione :-)

Cuestiones relacionadas