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

14/02/2011 10:49

Несколько недель назад в интерпретаторе PHP была исправлена уязвимость, позволяющая вызвать зависание процесса при выполнении операций c некоторыми числами с плавающей запятой. Уязвимость проявлялась только при использовании в процессе преобразования чисел x87 FPU-регистров. Как оказалось, данной проблеме подвержен не только интерпретатор PHP, но и виртуальная машина Java, сообщает opennet.ru. Например, чтобы вызвать бесконечное зацикливание достаточно обеспечить выполнение примерно такого кода "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-апплете переименование файлов без каких-либо действий со стороны пользователя.
Описание уязвимости