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

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

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

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