Уязвимость в округлении в Java: большой урон малыми ресурсами

Discussion in 'Мировые новости. Обсуждения.' started by _VoVaN_, 8 Feb 2011.

  1. _VoVaN_

    _VoVaN_ Banned

    Joined:
    20 Sep 2010
    Messages:
    1,203
    Likes Received:
    143
    Reputations:
    42
    Баг в фреймворке 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 и когда будет закрыта эта уязвимость пока неизвестно.

    08/02/11
    http://www.xakep.ru/post/54751/
     
  2. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    не ужели их код на столько хреновый что им нужно так много времени что бы вспомнить как он работает, и внести небольшие поправки для устранения это пустякового бага О_о


    PS. вчера на работе встретился с удивительным багом:
    есть строка 8.25pt характеризующая размер текста, она парсится, из нее выкидывается pt и точка заменяется на запятую для последующего преобразования функцией C# Convert.ToSingle(string) в число с плавающей запятой одиночной точности. И это приводило к вызову исключения, из за того что в параметрах локализации системы разделителем для дробных чисел являлась точка (или запятая, щас уже не помню, но значение отличное от того которое ставится по умолчанию)