Особенность реализации работы расширений в Google Chrome позволяет [3] определить какие расширения установлены у пользователя, из-за того что веб-браузер позволяет любой веб-странице выполнять запрос document.createElement(), в качестве аргумента для которого может выступать уникальный идентификатор расширения. Все эти идентификаторы можно загрузить из каталога расширений Google Chrome. Таким образом веб-сайт, путем проверки идентификаторов по списку, может увидеть все расширения, которые использует пользователь.
Демонстрацию работающего кода можно посмотреть здесь [4]. Демонстрационная страница не покажет все установленные расширения, потому что автор кода добавил проверку только на некоторые самые популярные расширения, однако полный их список можно без труда загрузить с данной страницы [5].
Следующий код демонстрирует реализацию этой уязвимости:
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());
Данная уязвимость приводит к тому, что заинтересованные веб сайты могут следить за пользователем, генерируя [6] достаточно уникальный идентификатор пользователя с учётом установленных расширений, даже если пользователь стирает все идентификационные cookie после работы с этим сайтом. Зная, какие расширения установлены, можно также организовать на них целенаправленную атаку.
Ссылки:
[1] http://htfl.ru/cat-news-google-chrome
[2] http://htfl.ru/cat-news-uyazvimosti-po
[3] /out.php?link=http://blog.kotowicz.net/2012/02/intro-to-chrome-addons-hacking.html
[4] /out.php?link=http://koto.github.com/blog-kotowicz-net-examples/chrome-addons/enumerate.html
[5] /out.php?link=https://chrome.google.com/webstore/category/extensions
[6] /out.php?link=http://panopticlick.eff.org/