The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В Java проявилась уязвимость при обработке чисел с плавающей запятой

13.02.2011 22:21

Несколько недель назад в интерпретаторе PHP была исправлена уязвимость, позволяющая вызвать зависание процесса при выполнении операций c некоторыми числами с плавающей запятой. Уязвимость проявлялась только при использовании в процессе преобразования чисел x87 FPU-регистров. Как оказалось, данной проблеме подвержен не только интерпретатор PHP, но и виртуальная машина Java.

Например, чтобы вызвать бесконечное зацикливание достаточно обеспечить выполнение примерно такого кода "double d = 2.2250738585072012e-308; System.out.println("Value: " + d);". В реальных условиях, эксплуатировать данную уязвимость можно без привлечения определенных Java-апплетов: достаточно отправить на большинство серверов приложений специальный HTTP-запрос, указав проблемное число в заголовке "Accept-Language" или "Accept", например: "Accept: audio/*; q=магическое число, audio/basic".

Примечательно, что компания Sun была поставлена в известность о данной проблеме в 2000 году, после чего извещалась еще несколько раз. Серьезность уязвимости была признана только после эскалации проблемы после случая с PHP. Выход официального обновления Java SE запланирован на 15 февраля, до этого момента можно использовать hotfix или патч к OpenJDK.

Дополнительно всплыл еще один случай с затягиванием выпуска исправления. В 2008 году в Sun было направлено сообщение (и получено подтверждение о его получении) о наличии уязвимости в коде по обеспечению работы диалога JFileChooser. Уязвимость до сих пор не исправлена и позволяет организовать в Java-апплете переименование файлов без каких-либо действий со стороны пользователя.

  1. Главная ссылка к новости (http://www.exploringbinary.com...)
  2. OpenNews: Обновление PHP 5.3.5 и 5.2.17 с исправлением DoS-уязвимости
  3. OpenNews: Уязвимости в Apache Tomcat
  4. OpenNews: DoS-уязвимость при обработке некоторых чисел с плавающей запятой
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/29586-java
Ключевые слова: java, security
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (32) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Заоза (?), 22:26, 13/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Разве Oracle не схавала Sun.
     
     
  • 2.2, Аноним (-), 22:31, 13/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    В то время о котором ведется речь, еще был Sun, это его зона ответственности, а не Oracle.
     

  • 1.3, Zenitur (?), 22:36, 13/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Случай интересный. Но в Java с каждым корректирующим релизом исправляют от полусотни до нескольких сотен ошибок, так что не для главной.
     
     
  • 2.4, User294 (ok), 22:52, 13/02/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В яве с каждым релизом чинят кучу критичных ошибок, вплоть до выхода из песочницы. Так было и видимо так и дальше будет. Особенно доставил комент изена на хабре про то что задачу, дескать, можно снять и курсор, дескать двигается :))).
     
     
  • 3.34, Аноним (-), 16:51, 27/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ты сам то понял, что написал?
     
  • 2.7, gegMOPO4 (ok), 22:59, 13/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Плохо то, что это сверхкритическая ошибка, легко можно завесить любое приложение, принимающее нецелые числа от пользователя. В том числе даже сам сервер приложений.
     

  • 1.5, Zenitur (?), 22:53, 13/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это действительно работает! Только что проверил. Еле отключил сервер.
     
     
  • 2.8, gegMOPO4 (ok), 23:01, 13/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А если бы эксплойт приводил не к зависанию, а к взрыву процессора?
     
     
  • 3.10, klalafuda (?), 23:35, 13/02/2011 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > А если бы эксплойт приводил не к зависанию, а к взрыву процессора?

    Искусство - оно сцуко такое. Требует жертв. И они всегда находятся..

    PS: Самым эффективным способом распространения малваря на линуксе будет пост на исходники в соотв. ньюсах включая опеннет. Сработает на 100%. И, уверен, по нескольку раз.

     
     
  • 4.11, gegMOPO4 (ok), 23:40, 13/02/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Было уже. И не раз.
     
  • 3.31, User294 (ok), 21:50, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > А если бы эксплойт приводил не к зависанию, а к взрыву процессора?

    А это вам уже к господам из фирмы Интел. Они работают над этой возможностью (ака удаленная блокировка процессора). Вы ведь этого хотели, правда? :)

     

  • 1.6, gegMOPO4 (ok), 22:56, 13/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Долго же эта новость ползла до опеннета.

    Для Томката уже вышла версия, прикрывающая дыру с уязвимостью в заголовках запроса.

    Прямо сейчас обезопасить приложения можно, воспользоваться костылём, -- подсунуть через -Xbootclasspath/p: архив jar cо скомпилированным исправленным sun.misc.FloatingDecimal.

    Вот то, что в Оракле так долго возятся с элементарным патчем, -- очень печально.

     
     
  • 2.13, iZEN (ok), 00:50, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Вот то, что в Оракле так долго возятся с элементарным патчем, -- очень печально.

    Неправда.

    Порты JDK в коллекции портов FreeBSD были обновлены 9 февраля. Мне пришлось ждать перекомпиляции установленного OpenJDK6.

     

  • 1.9, pavlinux (ok), 23:05, 13/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    > Выход официального обновления Java SE запланирован на 15 февраля, до этого момента можно использовать.

    Спасибо. :)

     
     
  • 2.32, User294 (ok), 21:57, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >до этого момента можно использовать.

    ...дыры на серверах :)))  //ваш Кэп :)

     

  • 1.12, iZEN (ok), 00:46, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    L.O.R. сегодня падал несколько раз. Подозреваю, что проблема в непропатченной Java и устаревшем Tomcat, который они любят использовать, вместо того, чтобы перейти на Jetty7.
     
     
  • 2.14, ананим (?), 01:17, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    или на пыхпых
     
  • 2.15, User249 (?), 01:25, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Jetty7 тока вылупился - пусть усы отрастит как у кота сначало :)
     
     
  • 3.16, iZEN (ok), 01:37, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    http://opennet.ru/opennews/art.shtml?num=23778
     
  • 3.33, User294 (ok), 22:05, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Jetty7 тока вылупился - пусть усы отрастит как у кота сначало :)

    А у вас вообще ус отклеился с таким то ником :)

     

  • 1.17, Tav (ok), 02:09, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я так понимаю, причины ошибки в PHP были несколько иными.

    Для Fedora уже доступно обновление OpenJDK с исправлением уязвимости.

     
     
  • 2.20, ram_scan (?), 09:48, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Причины ошибки - бага в сопроцессоре.

    Заклинивать будет абсолютно любую программу которая пытается манипулировать с этими числами с помощью x87 арифметики если в ней нет воркэраунда.

     
     
  • 3.21, Андрей (??), 11:19, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Если это "бага в сопроцессоре" - то в чьей реализации? Intel? AMD? (не считаем остальных пока :) ) У обоих?
    В пыхпых лечилось пересборкой с CFLAGS="... -mfpmath=sse ...". Тут бинарники распространяются...
     
  • 3.25, безимени (?), 13:35, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Как мне кажется (после беглого взгляда на патч), проблема в программистах, которые не учли что по стандарту IEEE 754 существуют денормализованные числа с плавающей точкой (80 битные). При записи в память или при использовании SSE такие числа обнуляются...
     
     
  • 4.28, ram_scan (?), 14:14, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Там есть неоднозначность представления чисел -0, 0 и +0. И грабли такие вылезают только при работе с x87. MMX-SSE - нормально.

    Теоретически грабли только в интелях на x86 архитектуре.

     

  • 1.18, анон (?), 06:40, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Случаем не этой уязвимостью недавно лор роняли?
     
  • 1.19, безимени (?), 08:46, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/

    > такого кода "double d = 2.2250738585072012e-308; System.out.println("Value: " + d);".

    Хороший код... У меня старый NetBeans просто виснет если его вставить в текст программы.
    Даже компилировать и запускать не надо - парсер тоже на непатченной яве работает.

     
  • 1.24, bvf (?), 12:53, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А в новости нет ошибки? Действительно об ошибка знали с 2000-го года? Это же (матерные выражения)! Хотя ошибка не так критична если о ней знать, в коде можно легко обезопасить себя от намеренных взломов. Но блин зачем же и так усложнять жизнь. Я люблю сложные квесты, но не настолько :)
     
     
  • 2.29, dd (??), 14:36, 14/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >Хотя ошибка не так критична если о ней знать,
    >в коде можно легко обезопасить себя от намеренных взломов.

    Каким образом? Если в программе предусмотрен ввод чисел (будь то GUI или HTTP request - не важно), то прежде чем начнет выполнятся Ваш безопасный код, "неправильное" число будет обработано небезопасным кодом (из стандартных бибилиотек или Tomcat'а).

     

  • 1.26, z (??), 13:39, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Это же

    энтерпрайз!

     
  • 1.27, Аноним (-), 13:55, 14/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можно подумать, это единственная ошибка такого возраста. У одной ошибки возраст в аккурат с 95го года... ;)
     
  • 1.35, Babusha (?), 18:22, 06/03/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ("Value: " + d);".

    WTF? Исправьте.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру