Здравствуйте, дорогие друзья.
Guardio Labs обнаружила уязвимость в браузере Microsoft Edge, получившую обозначение CVE-2024–21388. Этот недостаток мог позволить злоумышленнику использовать частный API, изначально предназначенный для маркетинговых целей, для скрытой установки дополнительных расширений браузера с широкими правами доступа без ведома пользователя. Сразу после обнаружения мы полностью раскрыли проблему корпорации Майкрософт, что привело к ее разрешению в феврале 2024 года.
В этом обзоре мы расскажем о нашем процессе обнаружения, продемонстрируем уязвимость с помощью простого кода для проверки концепции (POC) и рассмотрим более широкие последствия для безопасности. Резолюция CVE-2024–21388 подчеркивает сохраняющуюся проблему обеспечения баланса между опытом пользователей и кибербезопасностью. Это служит напоминанием о том, что усовершенствования, направленные на улучшение функциональности браузера, должны тщательно взвешиваться с учетом потенциальной возможности создания уязвимостей, которыми можно воспользоваться, подчеркивая важность совместных усилий по обеспечению безопасности и упреждающего управления уязвимостями.
Защита интерфейса расширения браузера
В Guardio мы делаем все возможное для повышения безопасности просмотра веб-страниц, и одним из наших ключевых продуктов является расширение для браузера, которое повышает безопасность пользователей настольных браузеров. Наш опыт в этой области побудил нас углубиться в изучение того, как браузерные расширения взаимодействуют с браузерами, с целью выявления и устранения уязвимостей до того, как они попадут не в те руки.
После нашего предыдущего открытия в браузере Opera, где мы нашли способ выйти из среды браузера и запустить код на уровне операционной системы с помощью простого расширения, наше внимание переключилось на браузер Microsoft Edge — инструмент, которым многие из нас пользуются ежедневно. Здесь мы обнаружили уязвимость, которая, несмотря на свою простоту, может иметь серьезные последствия, если ее использовать.
Короче говоря, эта уязвимость позволяла любому пользователю, у которого был способ запускать JavaScript на страницах bing.com или microsoft.com, устанавливать любые расширения из магазина дополнений Edge без согласия пользователя или его участия. Это проблема “несанкционированного доступа”, которая была классифицирована Центром реагирования Microsoft Security Response Center (MSRC) как умеренная по степени серьезности.
Мы полностью раскрыли эту проблему корпорации Майкрософт, как только обнаружили ее в ноябре 2023 года, и после устранения и развертывания в рамках обновления безопасности, выпущенного в начале февраля 2024 года, ей также был присвоен код CVE-2024–21388.
Информация о настройках Chromium
Чтобы полностью разобраться в уязвимости и ее происхождении, мы начнем с изучения основы инфраструктуры проекта Chromium и того, как Microsoft использовала ее для своего фирменного браузера Edge.
С апреля 2021 года Microsoft Edge использует движок Chromium с открытым исходным кодом. Архитектура Chromium, известная своей возможностью настройки, позволила Microsoft адаптировать и ребрендировать этот проект с открытым исходным кодом для Edge. Этот процесс, хотя и был инновационным, также привел к появлению новых потенциальных угроз безопасности в виде изменения проприетарного кода и добавления функциональности в проект с открытым исходным кодом.
Подходящим примером того, как работает настройка Chromium, является интернет-магазин Chrome Web Store. Несмотря на то, что он обладает всеми функциями простой веб—страницы, как и любая другая, он также специально предоставил доступ к некоторым мощным API-интерфейсам, позволяющим установить новое расширение для вашего браузера - возможность, доступная только для фирменного интернет-магазина поставщика:
Конфигурация для этих уникальных возможностей в основном находится в файле _api_features.json-файл, разработанный в рамках проекта Chromium с открытым исходным кодом. В этих файлах описывается распределение разрешений и API-интерфейсов, зависящих от поставщика, для различных контекстов.
Итак, если мы хотим узнать, как веб-сайт Chrome Webstore управляет расширениями и устанавливает их, то стоит заглянуть сюда. Там мы обнаружили бы, что этот контекст получает специальный доступ к chrome.management API, позволяющий ему удалять и отключать расширения, а также к chrome.webstorePrivate API, скрытому API, явно созданному для веб-магазина, который позволяет устанавливать расширения.
Наверняка есть и другие способы настройки вашего браузера на базе Chromium. Один из таких способов описан в нашем исследовании MyFlaw, где пользовательский API позволяет веб-сайту Mayflower Opera загружать и запускать файлы в вашей операционной системе, минуя безопасную среду браузера.
Таким образом, это действительно отличное место для поиска возможных объектов атаки в браузере Edge…
Погружение в Edge
Исследуя браузер Edge, мы решили сосредоточиться на файлах конфигурации и другом настраиваемом коде, которые находятся в файле resources.pak в каталоге “Program Files” Edge. Это файл, содержащий все соответствующие ресурсы браузера, включая объявление специальных разрешений, а также API, зависящие от поставщика.
С помощью инструмента chrome-pak-customizer с открытым исходным кодом, мы получили доступ к этим архивным файлам и, сравнив эти файлы с их аналогами в базовой версии Chromium, определили новые пользовательские API и определили, какие веб-сайты получили к ним доступ. Хотя основное внимание уделялось поиску логических проблем в безопасности API, поиск уязвимостей в коде в таких областях также является обычной практикой.
В конце концов, мы наткнулись на частный API маркетинговой страницы edge:
Этот частный API доступен со списка веб-сайтов, принадлежащих Microsoft, как показано выше. Анализируя сам API, можно сделать вывод, что он предназначен для интеграции и активации многочисленных маркетинговых возможностей браузера Edge в рамках веб-страницы.
Как видно из приведенного выше изображения, одним из таких примеров является возможность открытия вкладки copilot непосредственно по ссылке на веб-странице, а также других приложений и возможностей браузера. Но что действительно привлекло наше внимание, так это странно звучащий метод под названием "Установить тему".
Скрытый API, который внедряется в расширение
Как легко догадаться, этот метод устанавливает тему из “Магазина дополнений Microsoft”. Все, что для этого требуется, - это идентификатор темы и файл манифеста темы. Темы просто меняют внешний вид браузера, но стоит отметить, что за кулисами тема на самом деле является своего рода расширением браузера. Обычное расширение намного мощнее, и, помимо всех его полезных преимуществ, им постоянно злоупотребляют для кражи информации, учетных данных, крипто-кошельков и многого другого, и все это под видом других безобидных инструментов, таких как простая палитра цветов…
Вместо простой установки темы, может ли этот API предоставить инициатору возможность установить расширение? Почему бы просто не попробовать это? Изменив themeId на любой extensionId из магазина дополнений, и вуаля! Похоже, что он даже не будет пытаться проверить введенный здесь идентификатор на соответствие типу расширения, и мы получили простой метод JavaScript, который устанавливает любое расширение, которое мы пожелаем!
В качестве дополнительного бонуса, поскольку установка этого расширения выполняется не совсем так, как было изначально задумано, не потребуется никакого взаимодействия или согласия со стороны пользователя!
Тем не менее, это частный API. Только привилегированные и избранные веб—сайты могут интегрировать его и вызывать - как описано в приведенном выше определении API. И эти веб-сайты полностью защищены от подобного использования - или нет?…
Использование путем внедрения фрагментов JavaScript
Чтобы вызвать этот метод и установить расширение, необходимо выполнить этот код из контекста привилегированного веб-сайта. Скажем, из bing.com.
Одной из печально известных уязвимостей является XSS — уязвимость для межсайтового скриптинга в одном из привилегированных доменов. Безусловно, XSS сама по себе представляет собой серьезную уязвимость, и ее нелегко обнаружить в таких престижных доменах. Однако его влияние на безопасность невелико по сравнению с тем, что возможно в сочетании с использованием этого API. Последнее предоставит злоумышленнику средство для выхода из веб-контекста, используя XSS на уровне шпионского ПО в виде расширения, которое отслеживает каждое ваше действие в браузере и завладевает вашими учетными записями и деньгами.
Другой возможностью является использование расширения с минимальными привилегиями, которое можно легко создать и добавить в хранилище дополнений под видом универсального средства повышения производительности. Все, что нужно сделать расширению, это добавить или заменить один из скриптов, скажем, в bing.com и заставить его вызывать вышеуказанный API:
Exploit POC — Простое, но мощное расширение
Чтобы расширение могло вызывать этот API из правильного контекста, можно использовать манипуляции с WebRequest или просто напрямую внедрить этот скрипт в контекст bing.com с возможностью ContentScripting. Последнее - довольно простое разрешение, которым пользуются почти все расширения, и которым проще всего злоупотреблять.
Итак, расширение просто откроет веб-сайт bing.com (или дождется поиска чего-либо) и введет в его контекст простой скрипт. Который выполняет одну простую вещь — вызывает частный API.
Файл contentScript.js с расширением stage-1 запустит последовательность внедрения, используя метод createElement. Это позволит динамически ввести новый тег встроенного скрипта, находящийся под нашим контролем, в реальный контекст bing.com. Используя этот метод, мы действительно можем внедрить скрипт в нужный контекст, минуя менее привилегированный контекст скрипта содержимого расширения, с которого мы начинали.
Затем этот скрипт вызовет частный API по адресу chrome.edgeMarketingPagePrivate.Install, что приведет к запуску Bing новой автоматической установки расширения!
И манифест расширения также очень прост:
Запустив это расширение в браузере Edge и перейдя по ссылке bing.com, мы автоматически установим выбранное нами расширение. В следующем ролике в качестве примера мы выбираем установку блокировщика рекламы с открытым исходным кодом uBlock:
Отказ от ответственности — uBlock является законным расширением и не связан с нашими исследованиями или описанием эксплойта. Ссылка на него приведена исключительно в иллюстративных целях.
Стойкость злоумышленников и другие последствия
Хотя использование этой уязвимости может показаться нецелевым, злоумышленники могут использовать ее во вред себе. Рассмотрите, казалось бы, безобидные расширения для блокировки рекламы или другие бесплатные инструменты повышения производительности, доступные в магазинах дополнений, которые требуют минимальных разрешений. Наши результаты показывают, что простое изменение конфигурации может позволить этим безобидным расширениям устанавливать другие с более высокими привилегиями без ведома пользователя.
Злоумышленникам относительно легко обманом заставить пользователей установить расширение, которое кажется безобидным, не осознавая, что оно служит первым шагом в более сложной атаке. Эта уязвимость может быть использована для облегчения установки дополнительных расширений, потенциально с целью получения денежной выгоды.
Также возникают опасения по поводу действительно вредоносных расширений. Хотя такие расширения запрещены в официальном магазине дополнений, известно, что злоумышленники обходят эти ограничения, используя методы обфускации, динамическую загрузку кода и убедительные легенды прикрытия. Хотя эти вредоносные расширения в конечном итоге обнаруживаются и удаляются, их кратковременное пребывание в хранилище может быть опасным. Представьте себе последствия, если бы злоумышленники уже распространили миллионы расширений stage-1, что позволило бы им незаметно установить вредоносное расширение на множество устройств с помощью одной команды, как только оно стало доступно в магазине.
Сроки раскрытия и текущее состояние
Корпорация Майкрософт оперативно отреагировала на наше раскрытие, быстро восстановив проблему со своей стороны и установив дизайн исправления и целевой выпуск. В целом, с момента первоначального раскрытия до выпуска исправления безопасности в версии 121.0.2277.98 прошло менее 3 месяцев.
Проблема была устранена путем тщательной проверки того, какой идентификатор расширения и его тип представлены в этом API. Таким образом, теперь он может устанавливать только темы, как ожидалось. Тем не менее, важно отметить, что поток нашего POC, описанный выше, все еще существует — расширение по-прежнему может манипулировать кодом javascript для этих выбранных доменов, таким образом, получая доступ к привилегированному контексту для вызова этого частного API (и других).
Заключительные замечания
После внедрения этого исправления нам в настоящее время неизвестно о каких-либо оставшихся уязвимостях, которые могут быть использованы с этой точки зрения. Однако важно подчеркнуть, что взаимодействие между расширениями, привилегированными веб-сайтами и частными API-интерфейсами представляет собой серьезную проблему безопасности в рамках платформы Chromium. Здесь, в Guardio, это уже второй случай за последние месяцы, когда мы выявляем серьезные уязвимости, связанные именно с этой проблемой.
Недостаточно полагаться только на доменные разрешения для доступа к мощным частным API. Потенциальная компрометация домена или поддомена представляет реальную угрозу, о чем свидетельствует масштабная кампания по захвату поддоменов, о которой мы недавно узнали, затронувшая более 10 000 доменов.
Проблема распространяется на расширения, предназначенные для внедрения кода в веб-сайты. Простой, но эффективной мерой противодействия может быть ограничение доступа таких расширений к определенным доменам, аналогично политике Chrome для своего интернет-магазина. Разрешение внедрения кода в таких доменах, как microsoft.com, bing.com и msn.com, хотя и является основным вариантом использования расширений, по своей сути сопряжено с риском и требует осторожного обращения.
Такая ситуация подчеркивает критический баланс между удобством и безопасностью для пользователей. Улучшение взаимодействия с пользователями не должно подрывать протоколы безопасности. Разработчики и операторы платформы должны уделять особое внимание безопасности на протяжении всего цикла разработки, внедряя меры по предотвращению использования. Даже кажущиеся незначительными уязвимости представляют собой значительный риск, и плохие парни всегда найдут наихудшие способы их использования.