Chromium — браузер с открытым исходным кодом, лежащий в основе Google Chrome, Microsoft Edge, Opera и других, — содержит неустранённую уязвимость, которую злоумышленники могут использовать для постоянного выполнения JavaScript-кода даже после перезапуска браузера. В результате эту уязвимость можно применять для захвата браузеров пользователей с целью организации атак типа «отказ в обслуживании» (DDoS), запуска майнеров криптовалют и многого другого.
Об уязвимости независимо сообщила исследователь Лира Ребане более трёх лет назад, однако она оставалась неисправленной, по крайней мере, частично. Сообщение об ошибке было опубликовано на этой неделе, но затем снова закрыто после того, как Ребане сообщила в Mastodon, что уязвимость всё ещё не устранена должным образом.
Запись в трекере ошибок, содержащая технические подробности, была доступна достаточно долго, чтобы пользователи успели её заархивировать, и копию легко найти в сети, хотя исходная запись снова переведена в приватный режим.
Уязвимость использует функцию Service Worker и Background Fetch API, которая позволяет веб-сайтам инициировать загрузки в фоновом режиме, например, видео. Эта функция была представлена в 2018 году, и тогда Google заявляла:
«Если пользователь закрывает страницы вашего сайта после шага 1, это не страшно, загрузка продолжится. Поскольку выборка (fetch) хорошо заметна и её легко прервать, нет проблем с конфиденциальностью, связанных с слишком долгими фоновыми задачами синхронизации. Поскольку сервис-воркер не работает постоянно, нет опасений, что он может злоупотреблять системой, например, майнить биткоин в фоновом режиме».
Ребане обнаружила, что ни одно из этих обещаний не соответствует действительности, по крайней мере, не на всех платформах и не во всех браузерах на базе Chromium. Например, в стабильной версии Google Chrome на тот момент, в декабре 2022 года, загрузка была видна в панели загрузок, но в canary-версии, где был представлен новый интерфейс, загрузка выглядела как зависший на 0B сбой, не отображающий источник.
В Microsoft Edge выпадающее меню «Загрузки» появлялось, но в нём ничего не отображалось. В самой последней версии фоновая загрузка становится полностью невидимой и продолжает работать даже после закрытия браузера.
«Обычно срок жизни сервис-воркера ограничен, но PoC [доказательство концепции эксплойта] обходит это ограничение, создавая и отменяя фоновые выборки каждые 20 секунд после активации сервис-воркера», — написала Ребане в своём отчёте об уязвимости. «Если выборка создаётся и отменяется достаточно быстро, она вообще не отображается в интерфейсе браузера, но при этом поддерживает сервис-воркер активным».
Судя по комментариям в записи об ошибке, аспекты, связанные с пользовательским интерфейсом, были исправлены где-то в январе 2023 года. Однако возможность бесконечно поддерживать активность сервис-воркера путём переключения между событиями потребовала бы более глубокого исправления, включая изменение спецификации API для введения жёсткого временного лимита на завершение работы сервис-воркера.
Возможности вредоносного веб-сайта через постоянный сервис-воркер ограничены, но они могут быть серьёзными, включая постоянное отслеживание пользователей, поскольку сервис-воркеры имеют доступ к меткам времени открытия браузера, IP-адресам и информации User-Agent.
Эксплойт также может быть использован для выполнения удалённых JavaScript-полезных нагрузок, которые могут быть задействованы различными способами, включая выполнение потенциальных эксплойтов для будущих ошибок, атаки по побочным каналам или полезные нагрузки WebAssembly, такие как майнеры криптовалют. Также возможно инициировать запросы к другим веб-сайтам, что может быть использовано в сценарии DDoS, если скомпрометированный веб-сайт используется для захвата тысяч браузеров таким образом.
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Lucian Constantin




