Уязвимость 0.0.0.0 Day
7 августа Oligo Security опубликовали исследование об уязвимости во всех современных браузерах, которую назвали 0.0.0.0 Day. Информация об уязвимости была передана разработчикам браузеров в начале апреля. Рекомендую оригинальную статью к прочтению, особенно про первые зафиксированные в 2006 году атаки скриптов на веб-страницах на домашние роутеры.
Злоумышленник может выполнять запросы со страниц публичных frontend-приложений (через js или html-элементы) к сетевым службам / приложениям на устройстве пользователя (используя адрес 0.0.0.0 вместо localhost/127.0.0.1). Ранее считалось, что это запрещено. Уязвимость затрагивает все основные браузеры Chromium, Chrome, Safari, Firefox при работе в ОС Linux и macOS.
Почему так произошло?
В Chrome за контроль сетевых запросов frontend-приложения отвечает механизм PNA (Private Network Access), который на основании IP-адреса определял его тип (local, private, public). Например адреса, соответствующие 127.0.0.0/8, ::1/128 считались local. Проблема заключалась в том, что в PNA не было правила для 0.0.0.0, следовательно, адрес считался public и запросы разрешались. В других браузерах - схожая проблема в реализации функций выполнения сетевых запросов.
Что может сделать злоумышленник?
Скрипт может, перебирая различные порты на localhost понять, какие службы/ПО выполняются на устройстве пользователя. В случае наличия уязвимых служб или доступного без авторизации API - выполнить атаку или запрос к такому API. Исследователи описывают реально зафиксированные атаки на ПО Ray и Selenium Grid, приводящие к удаленному выполнению кода.
Когда исправят?
🔹Google планирует вносить исправления поэтапно с версии 128 до применения у всех пользователей к версии 133 (сейчас актуальная версия 127).
🔹Apple внесла исправления в код WebKit / Safari, исправления будут доставлены в одном из следующих апдейтов.
🔹Firefox ограничился исправлением спецификации Fetch, срок реализации неизвестен.
Теперь запросы на локальные и частные IP-адреса запрещены окончательно?
Нет. После полного внедрения PNA+CORS в случае, если запрос предназначен для private-адреса Chrome будет выполнять предварительный запрос OPTIONS (аналогично механизму CORS). Если целевой сервис ответит, что разрешает запросы для private (заголовок Access-Control-Allow-Private-Network: true), то Chrome выполнит сам запрос.
Почему говорят, что уязвимости 18 лет?
18 лет назад Google Chrome еще не существовал. 18 лет назад был создан первый репорт в баг-трекере Mozilla, когда пользователь обнаружил, что вредоносные js-скрипты на страницах атакуют домашний роутер по адресу 192.168.0.1. После этого были предприняты первые меры по блокировке запросов на внутренние адреса.
Что происходит сейчас?
С 1 августа фиксируется значительный рост📈 запросов со страниц на адрес 0.0.0.0. По оценке Google запросы осуществлялись со 100 тысяч публичных сайтов. Т.к. исправления выйдут не скоро, злоумышленники могут это использовать и внедрять вредоносные скрипты на скомпрометированные сайты или в JavaScript-библиотеки для распространения вредоносного кода через зависимости.
@FrontSecOps
Post #19
496

