Статьи

Как chrome-extension: // позволяет снимать отпечатки пальцев с использованием JavaScript

tldr;  
Иногда веб-страницы могут взаимодействовать с аддонами Chrome, и это может быть опасно, об этом позже. Между тем, разминка — трюк для обнаружения установленных вами аддонов.

Хотя все мы привыкли использовать схемы URI http / https 
, в современных веб-приложениях иногда используются другие схемы, в том числе:

Сложные вопросы


На протяжении многих лет всегда возникали вопросы о том, как документы из этих схем должны быть изолированы друг от друга (воспринимайте это как политику одинакового происхождения 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: // . Каждое расширение имеет глобальный уникальный идентификатор. Например, 
chrome-extension: //oadboiipflhobonjjffjbfekfjcgkhco/help.html — это URL-
адрес страницы 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