В мире мобильной безопасности обнаружена очередная серьёзная угроза, на этот раз затрагивающая пользователей, ценящих приватность. Речь идёт о критической уязвимости в браузере DuckDuckGo для Android, которая позволяла злоумышленникам выполнять произвольный вредоносный код на легитимных веб-страницах. Эта проблема, известная как универсальная межсайтовая атака (UXSS), обходила один из фундаментальных принципов безопасности в интернете - политику единого источника (Same-Origin Policy, SOP). Между тем, разработчики уже выпустили патч, и пользователям настоятельно рекомендуется обновить приложение.
Суть проблемы кроется в компоненте под названием AutoConsent, предназначенном для автоматического принятия всплывающих окон с согласием на использование файлов cookie. Этот компонент реализован через специальный механизм взаимодействия JavaScript и Java, так называемый «мост» (AutoconsentAndroid Java bridge). Он автоматически внедряется в код каждой загружаемой страницы. Однако, как выяснил исследователь безопасности Дхирадж Мишра, данный мост имел критический недостаток в проектировании. Он принимал сообщения от любых фреймов на веб-странице, включая скрытые встроенные элементы (iframe) с других доменов, без какой-либо проверки их происхождения или необходимости в токене аутентификации.
Когда мост получал такое сообщение, его обработчик активировал метод "webView.evaluateJavascript(...)". В контексте Android WebView этот метод выполняет предоставленный код JavaScript в контексте главного, верхнеуровневого документа. Следовательно, если злоумышленнику удавалось внедрить на страницу скрытый вредоносный фрейм, этот фрейм мог отправить мосту произвольную команду. Мост, выступая в роли доверенного посредника, некритически выполнял код из недоверенного источника так, будто он исходит от самой легитимной страницы. Таким образом, происходило прямое нарушение политики единого источника, поскольку код из одного домена получал полный контроль над содержимым другого.
Для демонстрации угрозы исследователь предоставил простой пример эксплуатации (Proof of Concept). В его сценарии есть две страницы: основная жертва ("victim.html") и контролируемый атакующим встроенный фрейм ("iframe.html"). Фрейм содержит скрипт, который через уязвимый мост отправляет команду на изменение текста на главной странице. В результате надпись «Victim Page» меняется на «PWNED by iFrame», что наглядно подтверждает возможность обхода базовых механизмов безопасности браузера. Этот пример, однако, иллюстрирует лишь простейший вариант атаки. В реальных условиях злоумышленники могли бы использовать уязвимость для куда более опасных действий.
Универсальная межсайтовая атака считается критической уязвимостью на уровне самого браузера. Её опасность заключается в том, что для эксплуатации не требуется никаких действий со стороны пользователя, таких как клик по ссылке. Атака может быть запущена автоматически при посещении скомпрометированной или специально созданной веб-страницы. Последствия успешной эксплуатации могут быть крайне серьёзными. Злоумышленники получают возможность красть файлы cookie и сессионные токены, что ведёт к перехвату учётных записей. Кроме того, они могут читать или модифицировать конфиденциальные данные, отображаемые на странице, например, номера банковских карт или личные сообщения. Ещё одним риском является инъекция фишинговых форм или другого вредоносного контента в доверенные сайты, что повышает эффективность социальной инженерии.
Данной уязвимости был присвоен высокий рейтинг 8.6 по шкале CVSS, что подчёркивает её значимость. Важно отметить, что проблема была актуальна при настройках браузера по умолчанию, то есть угроза существовала для всех пользователей, не вносивших специальных изменений в конфигурацию. К счастью, процесс ответственного разглашения сработал корректно. Исследователь сообщил о проблеме команде DuckDuckGo через платформу HackerOne, после чего разработчики оперативно выпустили исправление в новых версиях мобильного приложения ("com.duckduckgo.mobile.android").
Этот инцидент служит важным напоминанием для всего сообщества, связанного с информационной безопасностью. Даже продукты, изначально ориентированные на приватность и безопасность, не застрахованы от критических ошибок в коде. Особенно уязвимыми оказываются сложные механизмы взаимодействия между различными компонентами, такие как мосты между веб-контентом и нативным кодом приложения. Разработчикам необходимо уделять повышенное внимание проверке происхождения данных и строгой аутентификации всех сообщений, проходящих через подобные интерфейсы. В свою очередь, для пользователей главный вывод очевиден: регулярное обновление программного обеспечения остаётся одной из самых простых и эффективных мер защиты. Всем, кто использует браузер DuckDuckGo на Android, следует незамедлительно проверить наличие обновлений в Google Play и установить последнюю доступную версию приложения, чтобы устранить данную уязвимость и обеспечить свою безопасность в сети.