Подробности уязвимостей в MS Java

12.11.2002 | 15:27
Сообщаются некоторые детали обнаруженных уязвимостей в Microsoft Java. Компания Microsoft была уведомлена о проблеме еще в августе этого года, но с того момента она смогла устранить только 4 из 10 обнаруженных уязвимостей.

Ниже приводится подробное описание этих уязвимостей:

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 могут использоваться, чтобы читать и изменять содержание буфера обмена. Методы доступны любым апплетам.

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. Уязвимость может использоваться для разрешения браузера и возможно для перезаписи памяти с последующим выполнением произвольного кода.
безопасность, информация, защита информации, статьи, библиотека, аудит, администрирование, реагирование на инциденты, криптография, уязвимость
По материалам http://www.securitylab.ru
Лента новостей: FacebookLiveJournalЯндекс

Комментарии (0)
Оставьте комментарий:CaptchaОбновить проверочный код