Группа ученых из университетов Австралии, Израиля и США представила side-channel атаку, которая позволяет восстановить данные из Google Chrome и браузеров на базе Chromium, защищенные функцией Site Isolation.
Атака получила название Spook.js (или SpookJS), что является прямой отсылкой к процессорным уязвимостям Meltdown и Spectre, обнаруженным в 2018 году. Хотя тогда обе атаки были продемонстрированы лишь как концепт, они доказали, что в дизайне современных процессоров существует множество недостатков. В итоге Intel и AMD взяли на себя обязательство изменить будущие конструкции своих ЦП, сделав их более безопасными, а поставщики ПО усилили защиту своих приложений, чтобы усложнить или вовсе предотвратить эксплуатацию подобных багов.
Одной из первых защитные меры реализовала компания Google, добавив в Chrome новую функцию под названием Site Isolation. Эта функция разделяет JavaScript-код для каждого домена, предотвращая похожие на Spectre атаки посредством JavaScript, а также кражу информации из других открытых вкладок пользователя.
Однако теперь ученые сообщили, что текущая версия Site Isolation неэффективна. Хотя благодаря изоляции сайтов происходит отделение доменов друг от друга (например, example.com от attacker.com), поддомены при этом не изолируются (например, attacker.example.com от login.example.com). Spook.js эксплуатирует именно этот недостаток в дизайне Site Isolation. Причем исследователи считают, что в Google знают о проблеме, но не могут ничего с ней поделать, поскольку разделение кода JavaScript на уровне поддоменов нанесет ущерб работе 13,4% всех сайтов в интернете.
В итоге экспертам удалось создать JavaScript-инструмент Spook.js, который позволяет проводить side-channel атаки, подобные Spectre, на Chrome и браузеры на базе Chromium, работающие на процессорах Intel, AMD и Apple M1. Инструмент извлекает данные с тех же поддоменов, где расположен атакованный сайт, то есть сработает лишь в том случае, если злоумышленнику удастся внедрить Spook.js на целевой ресурс.
При этом исследователи особенно подчеркнули, что многие сайты позволяют пользователям создавать собственные поддомены и запускать код JavaScript, например Tumblr, GitHub, Bitbucket и многие другие. К тому же сайты могут быть попросту взломаны специально для проведения атаки.
В своем докладе эксперты демонстрируют успешную компрометацию Tumblr и Bitbucket, но также признают, что не на всех сайтах, поддерживающих создание поддоменов, есть данные, которые вообще стоит похищать. Например, интерес в этом отношении представляет Google: в этом случае ученые создали сайт в Google Sites, куда загрузили Spook.js для создания вредоносной страницы. В итоге они получили возможность восстанавливать изображения, загруженные в личную учетную запись Google Workspace или Google Photo жертвы.
Также исследователи упаковали Spook.js в расширение для Chrome, которое загрузили в браузер. Поскольку весь код выполнялся в одном процессе, Spook.js получил возможность извлекать данные других расширений, которые во время эксперимента представляли собой пароли, автоматически заполняемые расширением LastPass в браузере жертвы. Из всех атак эту эксперты сочли наиболее серьезной, поскольку пользователи, как правило, устанавливают большое количество расширений, многие из которых имеют доступ ко всем данным, и в итоге все это «видит» Spook.js.
Эксперты уже уведомили о проблеме все компании, чьи продукты они тестировали (в том числе Intel, AMD, Google, Tumblr, LastPass и Atlassian). В Google к выводам исследователей отнеслись со всей серьезностью и минувшим летом объявили, что теперь Site Isolation будет работать и на уровне расширений, отделяя их JavaScript-код друг от друга.
К сожалению, эксперты отмечают, что это не помогает защититься от других вариаций атаки Spook.js.
«Веб-разработчикам стоит немедленно отделить ненадежный, предоставляемый пользователем код JavaScript от всего остального контента на сайте, размещая весь предоставляемый пользователем код JavaScript в домене с другим eTLD+1, — говорят авторы Spook.js. — Таким образом, строгая изоляция не позволит объединять в одном процессе код, предоставленный злоумышленником, с потенциально конфиденциальными данными, делая их недоступными даже для Spook.js, поскольку он не способен выйти за пределы процесса».