Специалист компании Google Джейк Арчибальд (Jake Archibald) обнаружил критическую уязвимость, представляющую угрозу для ряда современных браузеров. Проблема получила название Wavethrough и идентификатор (CVE-2018-8235). Используя ее, вредоносные сайты могут похищать информацию с других ресурсов, на которых пользователь залогинен в том же браузере. Для осуществления атаки достаточно просто встроить в веб-страницу вредоносный видео- или аудиофайл, используя теги < video > и < audio >.
Корень проблемы Wavethrough лежит в области использования технологии Cross-origin resource sharing (CORS, «совместное использование ресурсов между разными источниками»). CORS позволяет предоставить веб-странице доступ к ресурсам другого домена.
Арчибальд объясняет, что использование вредоносных service worker’ов позволяет подгружать мультимедийный контент, обозначенный тегами < video > и < audio >, из удаленного источника, а использование параметра range позволит загрузить лишь какую-то конкретную часть файла. Это было придумано специально для удобства загрузки больших медиафайлов или для случаев, когда скачивание файла остановили, а затем продолжили.
В нормальных обстоятельствах подобное поведение пресекает CORS. Браузеры давно запрещают сайтам использовать cross-origin запросы, обращенные к другим доменам, без явного на то разрешения. Однако эти ограничения не распространяются на медиаконтент, размещенный в удаленном источнике. То есть возможно встроить на сайт аудио- или видеофайл с другого домена. В итоге, при определенных условиях, атакующие могут использовать no-cors запросы, которые многие сайты (включая Facebook, Gmail и BBC) пропустят без проблем.
«Это означает, если вы откроете мой proof-of-concept сайт в браузере Edge, я смогу прочесть ваши письма или ленту Facebook, без вашего ведома, — объясняет эксперт. — Баг появился, когда в браузерах реализовали имплементации range-запросов для медиаэлементов, на которые не распространялся стандарт. Эти range-запросы оказались по-настоящему полезны, поэтому браузеры использовали их, копируя поведение друг друга, но никто так и не интегрировал это в стандарт».
В итог атака будет выглядеть следующим образом. Злоумышленник размещает на своем сайте медиаконтент, который при проигрывании загружается с этого сервера лишь частично. Затем сайт просит браузер извлечь оставшуюся часть файла из другого источника, принуждая его выполнить cross-origin запрос. И запрос, который должен быть запрещен, обрабатывается, и атакующий получает возможность похитить пользовательские данные.
Перед проблемой Wavethrough уязвимы не все браузеры, только Mozilla Firefox и Microsoft Edge. Chrome и Safari вне опасности, и Арчибальд полагает, что в Chrome проблема Wavethrough была устранена еще в 2015 году, по воле случая. Тогда разработчики исправляли другую уязвимость, связанную с параметром range и мультимедийным контентом.
При этом в своем блоге специалист во всех подробностях рассказал о проблемах, с которыми ему пришлось столкнуться во время попыток уведомить о баге разработчиков браузеров. Дело в том, что во время обнаружения Wavethrough Firefox 59 еще был в бета-версии, но уязвимость даже не попала в стабильный релиз Firefox 59, так как была оперативно устранена представителями Mozilla. Однако с сотрудниками Microsoft все сложилось совсем иначе.
Арчибальд сообщил разработчикам о проблеме 1 марта 2018 года через баг-трекер Edge, а также направил сообщение об уязвимости на адрес secure@microsoft.com. В тот же день специалист получил ответ на это письмо, в котором специалисты по безопасности писали, что у них нет доступа к баг-трекеру Edge и просили скопировать детали проблемы, прислав их по почте. Исследователь переслал специалистам все необходимые подробности, но тогда ему ответили, что без исходных кодов расследование провести не получится. Хотя для этого было достаточно воспользоваться функицией «view source» в браузере, Арчибальд не стал спорить и отправил специалистам Microsoft нужные исходники.
После этого сотрудники Microsoft замолчали на 20 дней, и исследователю пришлось связаться со знакомыми разработчиками Edge, чтобы получить подтверждение того, что проблему признали серьезной и ее исправлением займутся.
Так как за обнаружение бага Арчибальду полагалось денежное вознаграждение по программе bug bounty, он поинтересовался, можно ли сразу перевести эти деньги на благотворительность. Две недели спустя специалисту ответили, что это невозможно, хотя в официальной документации компании говорится обратное.
Время шло, однако патчей для Edge по-прежнему не было. 12 апреля 2018 года Арчибальд открыто посетовал в своем Twitter, что с командой Edge очень трудно вести дела. Эта критика привлекла внимание инженеров Microsoft, которые признали, что реакцию компании действительно нельзя назвать оптимальной.
В итоге патч для Edge был выпущен лишь на прошлой неделе, 12 июня 2018 года, и вошел в состав июньского «вторника обновлений».
Proof-of-concept видео атаки можно увидеть ниже. Также исследователь создал специальный сайт, на котором пользователи уязвимых версий Mozilla FireFox и Microsoft Edge могут посмотреть на демонстрацию работы бага своими глазами.