- PVSM.RU - https://www.pvsm.ru -
В конце февраля 2012 года разработчики Google Chrome существенно обновили черновую документацию по созданию расширений. В частности была предложена новая версия файла для описания внутренних ресурсов расширений — manifest version 2. И главной его особенностью стало ужесточение политики безопасности контента, по умолчанию.

Намедни же состоялся стабильный релиз долгожданного Google Chrome 18, и с этого момента разработчики расширений могут начинать внедрение произошедших изменений, ну а пока…
Chrome Extensions, они же Apps, Приложения и Расширения — файлы *.CRX, это по сути простые ZIP-совместимые архивные контейнеры, внутри которых находятся типичные ресурсы веб-приложения: HTML и JS, картинки, иконки, а так же файлы всё это описывающие — manifest.json.
Для лучшего понимания нарушенной политики безопасности контента (Content Security Policy) в отношении расширений Google Chrome, приведу простой пример с вызовом картинки.
Вот к такому адресу обращается браузер, чтобы отобразить иконку установленного Chrome Angry Birds.
Разложим на составные части:
Узнать ID любого установленного расширения можно через настройки Google Chrome:
Settings → Extensions → Developer mode
Или же на странице расширения из адресной строки:
https:/chrome.google.com/webstore/detail/aknpkdffaafgjchaibgeefbgmgeghloj
На худой конец можно зайти в папку профиля Google Chrome, например:
%LOCALAPPDATA%GoogleChromeUser DataDefaultExtensions
там то и лежат все расширения, распакованные, и с ID в качестве имени директории.
И так, мы узнали каким образом расширение на подконтрольной себе странице вызывает иконку.
<img src="chrome-extension://aknpkdffaafgjchaibgeefbgmgeghloj/128.png" />
А теперь вопрос, что если вставить этот HTML-код в обычную страницу самого обычного сайта в интернете? Если в вашем гуглохроме установлен Angry Birds, то
[img] к сожалению, хабрапарсер не дал мне осуществить инлайн вылет птички :). Но надеюсь все всё поняли…
Далее на сцену вступает JavaScript — при помощи события onLoad скрипт проверяет картинку на «загруженность», таким образом и выявляется наличие у пользователя того или иного расширения, приложения, или даже темы оформления Google Chrome.
Пример с иконкой я использовал здесь для наглядности, на самом деле всё гораздо проще — у каждого расширения есть /manifest.json, успешную загрузку которого и нужно проверять скриптом.
С помощью заранее собранной базы ID расширений, скрипт методом брутфорса проверяет внутренние ресурсы на возможность загрузки извне.
Во время массового детектирования происходят тысячи запросов, но как уже говорилось ранее, запросы идут через локальный псевдо-протокол, и никакого сетевого трафика при этом не генерируется (тем не менее, на слабом компьютере лаги не исключены).
Существует две демонстрации, одна более красивая, другая более правильная:
Правда. Игрульке не жить. Как я упомянул в начале статьи, всё это дело исправляется в новой версии манифеста.
Но зачем тогда всё это? Я нарочно не сказал «долго не жить», или «жить не долго». Потому как сменить версию манифеста у всех расширений — это вам не через Google Update патч закатать.
Во первых, стабильный Google Chrome 18 для которого рекомендуется этот манифест, только-только вышел. И мало кто кинется сразу фиксить свои расширения, боясь навредить мифической обратной совместимости и интеграции.
Во вторых простая лень, ведь и так всё работает, какие к чёрту политики?
И в третьих, напомнить нашим уважаемым разработчикам о положении дел. Ведь детектирование — самый невинный пример того, на что способен зловредный сайт с доступными наружу функциями расширения, примеров достаточно.
"manifest_version": 2
Изменение/добавление этой строчки в файле manifest.json переключит Content Security Policy [4] в режим «whitelisting».

Это означает, что никакие ресурсы расширения больше не смогут быть вызваны внешними страницами, и что необходимо задать дополнительные правила для тех ресурсов, которые необходимо разрешить.
{
...
"web_accessible_resources": [
"habra.png"
],
...
}
Гордые Огнелисы хоть и сами не без грешка (имелся идентичный баг), но пока-что могут смело попугать демками своих Хроменьких друзей ещё как минимум до лета, а того и больше :)
Автор: abrwalk
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/paranojya/4437
Ссылки в тексте:
[1] Chrome Web Store Detector: http://www.browserleaks.com/chrome
[2] Chrome Addons Enumeration: http://koto.github.com/blog-kotowicz-net-examples/chrome-addons/enumerate.html
[3] github: https://github.com/koto/blog-kotowicz-net-examples/tree/master/chrome-addons
[4] Content Security Policy: http://code.google.com/chrome/extensions/trunk/contentSecurityPolicy.html
Нажмите здесь для печати.