Nieskończona pętla w Javie

Data publikacji: 17/02/2011, CERT Polska


Oracle ostrzega przed krytyczną luką w Javie (JRE / JDK), która umożliwia napastnikowi wywołanie nieskończonej pętli w aplikacji Javy. Hotfix jest już dostępny na stronach Oracle. Problem wykrył Konstantin Preißer, który zainspirowany problemami z parsowaniem liczby 2.2250738585072011e-308 w PHP odkrył ten sam problem w Javie.

Problem dotyczy błędu w funkcji konwersji liczby zmiennoprzecinkowej 2.2250738585072012e-308 do typu double. Próba wykonania parseDouble(„2.2250738585072012e-308”) powoduje, iż maszyna wirtualna Javy wpada w nieskończoną pętlę, co objawia się 100% utylizacją procesora na serwerze, a z punktu widzenia użytkownika aplikacja „zawiesza się”.

Problem dotyczy następujących wersji Javy:

Java SE
JDK and JRE 6 Update 23 and earlier for Windows, Solaris, and Linux
JDK 5.0 Update 27 and earlier for Solaris 9
SDK 1.4.2_29 and earlier for Solaris 8
Java for Business
JDK and JRE 6 Update 23 and earlier for Windows, Solaris and Linux
JDK and JRE 5.0 Update 27 and earlier for Windows, Solaris and Linux
SDK and JRE 1.4.2_29 and earlier for Windows, Solaris and Linux

Problem jest o tyle istotny, gdyż aby wywołać nieskończoną pętlę na serwerach aplikacyjnych korzystających z Javy (Tomcat / JBoss) wystarczy wysłać do nich odpowiednio spreparowane zapytanie HTTP.

Dla osób, które nie mogą wykonać szybkiej aktualizacji Javy, można jako środek zaradczy zaproponować użyci modułu apache-a mod_headers z następującą konfiguracją:

RequestHeader edit Accept-Language 5073858507 5073858508 early
RequestHeader edit Accept-Charset 5073858507 5073858508 early
RequestHeader edit Accept-Encoding 5073858507 5073858508 early
RequestHeader edit Accept 5073858507 5073858508 early