Хакер #305. Многошаговые SQL-инъекции
Джоуко Пиннонен раскрыл некоторые детали обнаруженных им уязвимостей в Microsoft Java. Microsoft была уведомлена о проблеме еще в августе этого года, но с того момента смогла устранить только 4 из 10 обнаруженных уязвимостей в патче в
Сентябре этого года. Вот эти подробное описание этих уязвимостей:
Ошибка в разборе 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.
Переполнение стека в загрузчике класса (DoS атака)
Переполнение происходит, когда загружается класс с очень длинным именем. Проблема связанна с Class.forName() и ClassLoader.loadClass(). В результате работа браузера аварийно завершится. Скорее всего, уязвимость не может использоваться для выполнения кода.
Раскрытие местонахождения файла (Раскрытие текущей директории и имени пользователя)
Из-за недостаточной проверки, любой Java апплет может узнать текущий каталог процесса Internet
Explorer при помощи File(".").getAbsolutePath(). Обычно в многопользовательской системе в пути содержится имя пользователя. Локальный доступ к файлу, как предполагается, будет отклонен от
недоверенного апплета. Информация, найденная этим способом, может использоваться совместно с другой уязвимостью.
Доступ к памяти INativeService (чтение памяти с возможностью записи и последующим
выполнением)
Любой апплет может получить копию com.ms.awt.peer.INativeServices, вызывая SystemX.getNativeServices(). Эти методы могут быть косвенно вызваны через методы java lang.reflect.*. Методы INativeServices используют адреса памяти и т.д. как параметры, не проверяя их. Можно просто разрушить память браузера, передавая поддельные параметры. Также можно читать пространство памяти процесса через метод pGetFontEnumeratedFamily() и отыскивать чувствительную информацию типа cookies и адресов посещенных сайтов. В частности, уязвимость может использоваться, чтобы узнать точный путь к каталогам кэша IE. Можно также выполнить определенные codebase нападения, например, запуская другой апплет, содержащий file: codebase (см. уязвимость 6), который может просмотреть содержание жестких дисков и прочитать любой файл. Это может использоваться, например, для чтения cookies, паролей, и другой чувствительной информации, а также для выполнения произвольного кода.
Доступ к буферу обмена INativeService (любой апплет может читать и изменять буфер обмена)
Методы ClipBoardGetText() и ClipBoardSetText() класса INativeServices могут использоваться, чтобы обратиться и изменять содержание буфера обмена. Методы доступны любым
апплетам. Буфер обмена может очевидно содержать очень чувствительную информацию. Методы нужно
вызвать косвенно через пакет java lang.reflect.*. Методы ClipBoardGetText() и
ClipBoardSetText() класса INativeServices могут использоваться, чтобы читать и изменять содержание буфера обмена. Буфер обмена может очевидно содержать очень чувствительную информацию. Методы нужно вызывать косвенно через пакет java lang.reflect.*.
file:// codebase когда используются общие ресурсы (любой апплет может получить доступ на чтение)
Кодовая страница в тэге апплета может быть установлена в "file://%00", который позволит апплету получить доступ для чтения ко всем локальным файлам и сетевым ресурсам. Апплет может также просмотреть содержание каталога. Требуется, чтобы апплет был загружен от публично читаемого сетевого ресурса. Последствия те же самые,
что и в уязвимости 4.
Обход ограничений StandardSecurityManager (обход ограничений доступа)
Класс com.ms.security.StandardSecurityManager может быть распространен
на любой апплет. Защищенные статические поля, содержащие ограничения доступа (deniedDefinitionPackages, deniedAccessPackages) могут быть изменены или освобождены. Таким образом, любой апплет может обойти эти ограничения. Уязвимость связанна с изменениями параметров системного реестра, так что этот недостаток, вероятно, не воздействует на заданные по умолчанию системы.
com.ms.vm.loader.CabCracker (Любой апплет может читать локальный .cab архив)
Метод load() CabCracker класса используется для загрузки архивов с жесткого диска. Метод
проверяет защиту и затем спрашивает подтверждение у пользователя, затем вызывает load0(), есть испытание прошло успешно. Однако метод load0() объявлен как public, так что любой апплет может вызвать его непосредственно, таким образом, пропуская проверку защиты. Уязвимость позволяет любому апплету обращаться к локальным архивным файлам.
Проблемы с HTML-объектом, передаваемом Java-апплету через JavaScript.
Javascript код может пропустить ссылки HTML объектов к апплету. Апплет может применять к ним методы, используемые некоторыми проприетарными интерфейсами MS. Некоторые из них разрушат браузер из-за неправильного доступа памяти.
Тэг HTML <applet> может использоваться, чтобы обойти ограничения Java класса
Тэг <applet> может использоваться, чтобы приписывать значение объектам, конструкторы которых являются частными. Например,<applet code=java.lang.Class> присвоит значение объекту Class. Уязвимость может использоваться для разрешения браузера и возможно для перезаписи памяти с последующим выполнением произвольного кода.