Уязвимость загрязнения прототипа в Ember.js была случайно обнаружена ИБ-специалистом Масато Кинугавой во время другого расследования. Он обнаружил ее в одном из доменов, принадлежащих Google и сообщил о ней через программу Google Bug Bounty Program. Изучив уязвимость подробнее, исследователь понял, что ее первопричина кроется в фреймворке Ember.js.
В случае фреймворка загрязнение прототипа позволяет злоумышленникам проводить XSS-атаки и красть информацию пользователя.
По словам Кинугавы, если приложение передает непроверенные входные данные в некоторые функции установки свойств объектов Ember.js, это может привести к загрязнению прототипов. По сути, это означает, что злоумышленник может использовать функцию установки свойства для обхода прототипа объекта и внесения изменений в другие части JS-программы, включая базовый объект, от которого происходят все остальные объекты.
Для того чтобы воспользоваться этой уязвимостью, злоумышленнику понадобится скрипт-гаджет – легитимный фрагмент JS-кода на веб-странице, который при помощи CSS-селекторов считывает содержимое DOM-элементов и затем обрабатывает их таким образом, чтобы запустился вредоносный скрипт.
Подводя итоги, Кинугава порекомендовал разработчикам внимательно изучать то, как происходит обработка параметров URL. По его словам, это должно помочь лучше находить подобные уязвимости.