Баг в фреймворке Java от Oracle служит причиной зависания компьютеров, когда
те сталкиваются с определенными числовыми значениями - эта уязвимость делает
сайты восприимчивыми к эффективным DOS-атакам.

Уязвимость в последней версии Java похожа на ту, что была в языке PHP, и
которая была обнаружена в прошлом месяце. Ситуация возникает когда приложения
пытаются обработать значения типа 2.2250738585072011e-308. Приложения,
работающие на Windows и Linux, которые пытаются привести такое значение к
переменной типа double, становятся жертвами бесконечного цикла, который пожирает
100% ресурсов ЦПУ.

Брайан Салливан, главный исследователь безопасности в Adobe Systems, окрестил
такие баги уязвимостями типа "отказ в обслуживании на уровне приложений" и
предупредил, что они могут сделать сайты уязвимыми к атакам, которые могут
нанести серьезный вред используя минимум ресурсов.

"Худшая часть этой техники заключается в том, что они высоко эффективны в
поглощении серверных ресурсов, а также экстремально асимметричны в плане
затрачиваемых ресурсов и получаемого эффекта", - он написал в прошлом месяце. "В
большинстве случаев единичного HTTP-запроса менее чем в 1 000 байт 
достаточно для того, чтобы использовать уязвимость. Это изначально сводит
затраты хакера к нулю, и, к сожалению, делает его почти неуловимым, и к еще
большему сожалению, вы не сможете предотвратить атаку какими бы то ни было
системами предотвращения вторжений или брэндмауэрами".

Салливан предложил простой фильтр типа "черный список", который разработчики
могут использовать для защиты своих Java-приложений от угрозы до той поры, когда
Oracle выпустит патч. Временный обходной путь достаточно прост в применении, но
он может сгенерировать неправильные положительные срабатывания, сказал он.

Java-уязвимость была впервые обнаружена Константином Прайзером. Он заявил,
что Windows-машины с последними 32- или 64-битными версиями JRE/JDK 1.6.0_23
уязвимы. Он также обнаружил проблему в 32-битной Java на OpenSuse Linux.

Эта уязвимость происходит от сложности в представлении некоторых чисел с
плавающей запятой в формате двоичного кода. Вот как Салливан объяснил это
изданию The Register:

Эта проблема с определенным рядом чисел, которые вызывают зависание Java -
логическая дыра в коде выполнения округления. Появляется цикл, который
перебирает попытки подобраться как можно ближе к точному значению: определяется
чуть большее значение, затем чуть меньшее значение и так далее, пока не
появляется лучшее приближение. Но когда код пытается округлить значение типа
2.225073858507201E-208, он впадает в постоянный цикл, не находя подходящего
приближения.

Исправление DOS-бага после его первого обнаружения заняло у разработчиков PHP
48 часов. Oracle же не такой искусный в исправлении уязвимостей 
безопасности в Java и когда будет закрыта эта уязвимость пока неизвестно.

Оставить мнение