Недавно была обнаружена уязвимость что может позволить сопровождающим блокировать списки фильтров для браузерных расширений Adblock Plus, AdBlock и uBlocker для создания фильтров, которые внедряют удаленные скрипты на веб-сайты.
С пользовательской базой, которая перешагнула отметку в 10 миллионов, если бы вредоносные скрипты были внедрены в блокировщики рекламы, это оказало бы значительное влияние Потому что они могут выполнять нежелательные действия, такие как кража файлов cookie, информации о подключении, перенаправления страниц или другое нежелательное поведение.
Для тех кто не знакомы с блокировщиками рекламы, в основном используют списки URL связанные с вредоносной рекламой и поведением.
Как правило, ими управляет небольшая группа людей или даже один человек.
Когда эти списки загружаются с помощью расширения блокировки рекламы, такого как Adblock Plus, это расширение предотвращает подключение браузера к URL-адресам, указанным в списке, и, таким образом, предотвращает подключение к вредоносной рекламе или скриптам.
Параметр фильтра $ rewrite вызывает проблему
Cuando Блокировщик рекламы Плюс 3.2 запущен в 2018 г. добавлена новая опция списка фильтров, называемая $ rewrite.
Этот параметр допустимый к составителю списка заменить веб-запрос, соответствующий регулярному выражению в частности с другим URL.
Юбер Фигьер, кто ввел эту функцию, объяснил, что:
«Начиная с Adblock Plus 3.2 для Chrome, Firefox и Opera (и версий для разработки 3.1.0.2053), новая опция фильтра $ rewrite позволяет вам переписывать URL-адрес ресурса, а не блокировать его.
Когда Adblock Plus назначает URL-адрес запроса фильтру с опцией $ rewrite, он преобразует URL-адрес на основе предоставленного правила и сообщает браузеру, что нужно одновременно загрузить ресурс.
Синтаксис правила $ rewrite указывает строку, которая служит шаблоном для нового URL.
$ n заменяется на n-е совпадение регулярного выражения фильтра. Это тот же синтаксис, что и у функции JavaScript String.prototype.replace ().
Если полученный URL относительный (т.е. у вас нет хоста), происхождение исходного запроса будет использоваться в качестве основы. В любом случае, если новый URL-адрес не совпадает с источником, перезапись будет считаться неудачной, и первоначальный запрос будет принят.
Кроме того, фильтры $ rewrite игнорируются для запросов SCRIPT, SUBDOCUMENT, OBJECT и OBJECT_SUBREQUEST по соображениям безопасности. Эта опция удобна для изменения или удаления параметров запроса ».
Единственным недостатком является то, что строка замены должна быть относительным URL-адресом, что означает, что она не содержит имени хоста и при перезаписи должна принадлежать тому же исходному домену, что и запрос.
Выполнение кода выполняется даже на картах Google
Исследователь безопасности объяснил что:
При определенных условиях неавторизованный злоумышленник, обслуживающий фильтр, может создать правило, которое внедряет удаленный сценарий на определенный сайт.
Для этого просто найдите сайт, который загружает скрипты из любого домена, содержащего открытый редирект и используйте XMLHttpRequest или Fetch скачать скрипты для запуска.
Найти это было несложно, потому что делать это в одиночку просто используйте Google Maps в качестве доказательства концепции.
Исследователь пояснил, что следующие критерии должны быть выполнены так что веб-сервис можно использовать с помощью этого метода:
- Страница должна загрузить строку JS с помощью XMLHttpRequest или Fetch и выполнить код возврата.
- Страница не должна ограничивать источники, из которых она может быть получена с помощью рекомендаций политики безопасности контента, или проверять окончательный URL-адрес запроса перед выполнением загруженного кода.
- Источник полученного кода должен иметь открытое перенаправление на стороне сервера или произвольный пользовательский контент с хоста.
Использование XMLHttpRequest или Fetch для загрузки сценариев и открытия перенаправления - два ключа к решению проблемы.
Чтобы смягчить эту проблему, веб-сайтам рекомендуется использовать заголовок политики безопасности контента и параметр connect-src. для указания белого списка сайтов, с которых можно загружать скрипты.