Границы
моего языка означают границы моего мира.
Л.
Карнап, Л. Витгенштейн. Логическая семантика.
"То,
что интересует меня - это некая живая тема темноты внутри
человека"
© Х.Мураками
|
Кошмар
разработок в стиле "code and fix"("пишем
и правим"), заключается в том что с
течением времени исправление ошибок
обходится все дороже и дороже.
Энтропии
программного продукта приводит к тому,
что КПД программного продукта стремится
к нулю.
Если вам
надо построить собачью будку,
то вы сами в состоянии сколотить
несколько досок, чтобы получить
удовлетворительное подобие желаемого. Если
же вы решите построить небоскреб, то
прежний способ не подойдет - небоскреб
рухнет, прежде чем вы соорудите его хотя
бы наполовину.
Описание
этих уязвимостей:
Переполнение
стека в загрузчике класса (DoS атака)
Переполнение
происходит, когда загружается класс с
очень длинным
именем. Проблема связанна с Class.forName() и
ClassLoader.loadClass(). В результате работа
браузера аварийно
завершится. Скорее всего, уязвимость не
может использоваться для выполнения кода.
Раскрытие
местонахождения файла (Раскрытие текущей
директории и имени пользователя)
Из-за недостаточной проверки,
любой Java апплет может
узнать текущий каталог процесса Internet
Explorer при помощи File(".").getAbsolutePath(). Обычно в многопользовательской
системе в пути содержится имя
пользователя. Локальный доступ к файлу,
как предполагается,
будет отклонен от недоверенного апплета.
Информация, найденная этим способом,
может использоваться совместно с другой
уязвимостью.
Ошибка
в разборе URL (кража куки)
Java код неправильно
анализирует URL, содержащий
двоеточие, которое указывает на номер
порта. Например URL http://www.evilsite.com:80@www.cia.org/ciaapplet.html
загрузит страницу с сайта www.cia.org ,
но из-за ошибки в
механизме Java, загрузит апплет с сайта
evilsite.com. Уязвимость может использоваться
для доступа к куки сайта www.cia.org, если тэг аплета на
www.cia.org
содержит ключевое
слово MAYSCRIPT (через netscape.javascript.*).
Нападение требует, чтобы Java аплет
существовал на web-странице
на www.cia.org.
Доступ к памяти INativeService (чтение памяти
с возможностью записи и последующим
выполнением)
Любой апплет может получить
копию com.ms.awt.peer.INativeServices, вызывая SystemX.getNativeServices().
Эти методы могут быть
косвенно вызваны через методы java lang.reflect.*.
Методы
INativeServices используют адреса памяти и т.д. как параметры, не проверяя их. Можно просто разрушить память браузера,
передавая поддельные параметры. Также можно читать пространство памяти
процесса через метод pGetFontEnumeratedFamily() и
отыскивать чувствительную информацию
типа cookies и адресов посещенных сайтов. В
частности, уязвимость может
использоваться, чтобы узнать
точный путь к каталогам кэша IE. Можно
также выполнить определенные codebase
нападения, например, запуская другой
апплет, содержащий file: codebase, который может
просмотреть содержание жестких дисков и
прочитать любой файл. Это может
использоваться, например,
для чтения 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. Уязвимость может
использоваться для разрешения
браузера и возможно для
перезаписи памяти с последующим
выполнением произвольного
кода.
|