Иногда веб-страницы могут взаимодействовать с аддонами Chrome, и это может быть опасно, об этом позже. Между тем, разминка — трюк для обнаружения установленных вами аддонов.
Хотя все мы привыкли использовать схемы URI http / https
, в современных веб-приложениях иногда используются другие схемы, в том числе:
- JavaScript: URI, обходящие фильтры XSS в течение многих лет
- данные: URI, которые являются распространенным источником новых уязвимостей XSS
- view-source: это может быть использовано для атак с изменением пользовательского интерфейса
- файл: который читает ваши локальные файлы
Сложные вопросы
На протяжении многих лет всегда возникали вопросы о том, как документы из этих схем должны быть изолированы друг от друга (воспринимайте это как политику одинакового происхождения 2-го порядка). Типичные вопросы включают в себя:
- Может ли XMLHttpRequest из http: // документа загрузить файл: // URL? И наоборот?
- Может ли документ из https: // загрузить скрипт из http: // ? Должны ли мы отображать предупреждение SSL тогда?
- Может ли http: // document иметь iframe с view-source: src?
- Может ли data: URI получить доступ к DOM вызывающего http: // документа?
- Может file: // URL получить доступ к file: // из верхнего каталога (это не так очевидно )
- Как насчет: пусто?
- Как обработать 30-кратное перенаправление на каждую из этих схем?
- Как насчет передачи заголовка Referer по схемам ?
- Могу ли я использовать window.open () в разных схемах? Будет ли работать window.postMessage () ?
- и многое, многое другое
В общем, все эти вопросы сводятся к:
- Как мы должны изолировать схемы друг от друга?
- Какая информация может просочиться между границами схемы?
Каждое отдельное решение, которое было принято поставщиками браузеров (или стандартными органами) в этих случаях, имеет последствия для безопасности. Есть различия в реализации, некоторые из них очень тонкие.
И есть тонкие уязвимости . Позвольте мне привести один пример такой уязвимости.
Встречайте chrome-расширение: //
Аддоны Google Chrome представляют собой упакованные фрагменты приложений HTML (5) + Javascript. Они могут:
- добавить кнопки в интерфейс
- запускать фоновые задачи
- взаимодействовать со страницами, которые вы просматриваете
- …
Все ресурсы расширения загружаются с выделенных
URL-адресов chrome-extension: // . Каждое расширение имеет глобальный уникальный идентификатор. Например,
адрес страницы help.html из
Google Chrome в телефон (вы можете попробовать ее, если у вас включено это расширение).
Расширения
взаимодействуют с веб-страницами, которые вы посещаете, и имеют доступ к их DOM, но контекст выполнения Javascript отделен (они не могут вызывать друг друга код Javascript — и по уважительной причине).
Однако даже в этой модели разделения все еще есть место для сотрудничества <-> страницы. Вредоносные страницы HTTP могут взаимодействовать с аддонами различными способами. Один простой пример — перечисление аддонов.
Поиск ваших аддонов один за другим
С помощью небольшого кода Javascript я легко могу проверить, используете ли вы определенный аддон Chrome. Дайте мне
список самых популярных расширений, и я протестирую их все за миллисекунды. Зачем мне это как атакующий?
- снять отпечатки пальцев с вашего браузера (рекламные сети любят это)
- начать атаку против определенного известного уязвимого аддона (дождитесь следующего поста об этом;))
Смотрите демонстрацию
снятия отпечатков с аддонов Chrome . (
здесь )
Как?
Хитрость очень проста:
var detect = function(base, if_installed, if_not_installed) { var s = document.createElement('script'); s.onerror = if_not_installed; s.onload = if_installed; document.body.appendChild(s); s.src = base + '/manifest.json'; } detect('chrome-extension://' + addon_id_youre_after, function() {alert('boom!');});
Каждый аддон имеет файл manifest.json . На странице http [s]: // вы можете попытаться загрузить кросс-схему скрипта из chrome-extension: // URL, в данном случае — файла манифеста. Вам просто нужно добавить уникальный идентификатор аддона в URL. Если расширение установлено, манифест загрузится и событие onload сработает. Если нет — событие onerror для вас.
Обновление: TIL техники уже была опубликована на @albinowax . Здорово!
Это всего лишь один простой пример пробивки разделительного слоя между аддонами и веб-страницами. Есть еще ближайшие. Оставайтесь в курсе.
Источник: http://blog.kotowicz.net/2012/02/intro-to-chrome-addons-hacking.html