Security Lab

Десять новых уязвимостей в MS Java

Дата публикации:12.11.2002
Всего просмотров:1392
Опасность:
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Описание: Джоуко Пиннонен раскрыл некоторые детали обнаруженных им уязвимостей в Microsoft Java. Microsoft был уведомлен о проблеме еще в августе этого года, но с того момента смог устранить только 4 из 10 обнаруженных уязвимостей в патче http://www.securitylab.ru/?ID=33139 в сетнябре этого года. Вот эти подробное описание этих уязвимостей:
  1. Ошибка в разборе URL (кража куки)

    Java код не правильно анализирует URL, содержащий двоеточие, которое указывает на номер порта. Например URL http://www.evilsite.com:80@www.bank.com/bankapplet.html загрузит страницу с сайта www.bank.com, но из-за ошибки в механизме Java, загрузит апплет с сайта evilsite.com. Уязвимость может использоваться для кражи куки сайта www.bank.com, если тэг аплета на www.bank.com содержит ключевое слово MAYSCRIPT (через netscape.javascript.*). Нападение требует, чтобы Java аплет существовал на web-странице на www.bank.com.

  2. Переполнение стека в загрузчике класса (DoS атака)

    Переполнение происходит, когда загружается класс с очень длинным именем. Проблема связанна с Class.forName() и ClassLoader.loadClass(). В результате работа браузера аварийно завершится. Скорее всего, уязвимость не может использоваться для выполнения кода.

  3. Раскрытие местонахождения файла (Раскрытие текущей директории и имени пользователя)

    Из-за недостаточной проверки, любой Java апплет может узнать текущий каталог процесса Internet Explorer, делая новый File(".").getAbsolutePath(). Обычно в многопользовательской системе в пути содержится имя пользователя. Локальный доступ к файлу, как предполагается, будет отклонен от недоверяемого апплета. Информация, найденная этим способом, может использоваться совместно с другой уязвимостью.

  4. Доступ к памяти INativeService (чтение памяти с возможностью записи и последующим выполненим)

    Любой апплет может получить копию com.ms.awt.peer.INativeServices, вызывая SystemX.getNativeServices(). Эти методы могут быть косвенно вызваны через методы java lang.reflect.*. Методы INativeServices используют адреса памяти и т.д. как параметры, не проверяя их. Можно просто разрушить память браузера, передавая поддельные параметры. Также можно читать пространство памяти процесса через метод pGetFontEnumeratedFamily() и отыскивать чувствительную информацию типа cookies и адресов посещенных сайтов. В частности, уязвимость может использоваться, чтобы узнать точный путь к каталогам кэша IE. Можно также выполнить определенные codebase нападения, например, запуская другой апплет, содержащий file: codebase (см. уязвимость 6), который может просмотреть содержание жестких дисков и прочитать любой файл. Это может использоваться, например, для чтения cookies, паролей, и другой чувствительной информации, а также для выполнения произвольного кода.

  5. Доступ буферу обмена INativeService (любой апплет может читать и изменять буфер обмена)

    Методы ClipBoardGetText() и ClipBoardSetText() класса INativeServices могут использоваться, чтобы обратиться и изменять содержание буфера обмена. Методы доступны любым апплетом. Буфер обмена может очевидно содержать очень чувствительную информацию. Методы нужно назвать косвенно через пакет java lang.reflect.*. Методы ClipBoardGetText() и ClipBoardSetText()класса INativeServices могут использоваться, чтобы читать и изменять содержание буфера обмена. Методы доступны любым апплетом. Буфер обмена может очевидно содержать очень чувствительную информацию. Методы нужно вызывать косвенно через пакет java lang.reflect.*.

  6. file:// codebase когда используются общие ресурсы (любой апплет может получить доступ на чтение)

    Кодовая страница в тэге апплета может быть установлена в "file://%00", который позволит апплету получить доступ для чтения ко всем локальным файлам и сетевым ресурсам. Апплет может также просмотреть содержание каталога. Требуется, чтобы апплет был загружен от публично читаемого сетевого ресурса. Последствия те же самые как описано для уязвимости 4.

  7. Обход ограничений StandardSecurityManager (обход ограничений доступа)

    Класс com.ms.security.StandardSecurityManager может быть распостранен на любой апплет. Защищенные статические поля, содержащие ограничения доступа (deniedDefinitionPackages, deniedAccessPackages) могут быть изменены или освобождены. Таким образом, любой апплет может обойти эти ограничения. Уязвимость связанна с изменениями параметров системного реестра, так что этот недостаток, вероятно, не воздействует на заданные по умолчанию системы.

  8. com.ms.vm.loader.CabCracker (Любой апплет может читать локальный .cab архив)

    Метод load() CabCracker класса используется для загрузки архивов с жесткого диска. Метод делает проверку защиты, и затем спрашивает подтверждение у пользователя, затем вызывает load0(), есть испытание прошло успешно. Однако метод load0() объявлен как public, так что любой апплет может вызвать его непосредственно, таким образом, пропуская проверку защиты. Уязвимость позволяет любому апплету обращаться к локальным архивным файлам.

  9. Проблемы с HTML-объектом, передаваемом Java-апплету через JavaScript.

    Javascript код может пропустить ссылки HTML объектов к апплету. Апплет может применять к ним методы, используемые некоторыми проприетарными интерфейсами MS. Некоторые из них разрушат браузер из-за неправильного доступа памяти.

  10. Тэг HTML <applet> может использоваться, чтобы обойти ограничения Java класса

    Тэг <applet> может использоваться, чтобы приписывать значение объектам, конструкторы которых являются частными. Например,<applet code=java.lang.Class> присвоит значение объекту Class. Уязвимость может использоваться для разрешения браузера и возможно для перезаписи памяти с последующим выполнением произвольного кода.

Ссылки: Technical information about unpatched MS Java vulnerabilities