Security Lab

Доступ к произвольным файлам в Opera 7.0

Дата публикации:06.02.2003
Всего просмотров:1761
Опасность:
Низкая
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Описание: Opera's Javascript console использует три html файла, постоянно находящиеся в инсталляционном каталоге Opera. Наиболее важный из них - "console.html", который содержит всю логику консоли.

Консоль перечисляет необработанные исключения, которые возникли в течение сеанса. Javascript может послать эти исключения, используя инструкцию "throw" и Opera также добавляет собственный способ создания отладочных сообщений с методом "opera.postError".

Чтобы отобразить кликабельный URL должным образом, Opera делает некоторые форматирования на посланном сообщении исключения, чтобы превратить его в сслыку:

newmsg = msg.replace( /</g, "<" ).
═══════replace( />/g, ">" ).
═══════replace( /https?:\/\/\S+/g, create_link ).
═══════replace( /file:\/\/(?:\S|(?:[ ](?=[^\n\r]*\.)))+/g, create_link );
Первые две строки возможно обрабатывают безопасность этой строки, чтобы она не содержала HTML кода. Последние две строки предназначены для преобразования стоки в фактический URL. К сожалению, каждая из этих двух строк позволяет атакующему ввести собственные атрибуты в ссылку. В результате атакующий может получить доступ к file:// protocol, который, может иметь следующие значения:
  1. Читать любой файл на системе пользователя
  2. Читать содержание каталогов на файловой системе пользователя
  3. Читать почтовые сообщения написанные в M2 – почтовой программе Opera.
Первое уязвимое выражение - / http?:\/\/\S +/g –соответствует чему-нибудь начинающемуся с "http://" или https:// и продолжает использовать символы, пока не встретит пробел. Это выражение не проверяет существование кавычек, которые являются разделителями атрибута "href" в окончательной ссылке, и поэтому позволяет добавить дополнительные атрибуты к ссылке.

Второе уязвимое выражение - /file:\/\/(?:\S|(?:[ ](?=[^\n\r]*\.)))+/g - соответствует чему-нибудь начинающемуся с file://, пока не появляется точка. Та же самая ошибка, что и в первом случае – могут использоваться кавычки, чтобы добавить дополнительные атрибуты к ссылке.

Добавление произвольных атрибутов к ссылке позволяет выполнять произвольный код сценария. Атрибут "style" в большинстве элементов, например, может содержать свойства типа "background-image", которые обычно указывают на URL. Этот URL может быть "javascript:[code]", который будет выполнен в контексте консоли (file:// protocol).

Пример:

1. Первое выражение:

open("file://localhost/console.html","","");
opera.postError("http://\"style=\"background-image:url('javascript:alert(loc
ation.href)')\"");
2. Второе выражение:
open("file://localhost/console.html","","");
opera.postError("file://\"
style=\"background-image:url('javascript:alert(location.href)')\".");
Два демонстрационных эксплоита можно найти в ссылках, опубликованных ниже. Первый из них демонстрирует возможность внедрения отладочного сообщения, второй просматривает файловую систему пользователя, используя утилиту типа эксплорера.

Уязвимость обнаружена в Opera 7 NT4, Opera 7 Win98, Opera 7 Win2000, Opera 7 WinXP.

Ссылки: Phantom of the Opera (GM#003-OP)

http://security.greymagic.com/adv/gm003-op/phSimple.asp
http://security.greymagic.com/adv/gm003-op/phExp.asp