Уязвимость, допускающая подстановку JavaScript-кода через WordPress-плагин OptinMonster

В WordPress-дополнении OptinMonster, имеющем более миллиона активных установок и применяемом для организации вывода всплывающих уведомлений и предложений, выявлена уязвимость (CVE-2021-39341), позволяющая разместить свой JavaScript-код на сайте, использующем указанное дополнение. Уязвимость устранена в выпуске 2.6.5. Для блокирования доступа через захваченные ключи после установки обновления разработчики OptinMonster аннулировали все ранее созданные ключи доступа к API и добавили ограничения по использованию ключей WordPress-сайтов для изменения кампаний OptinMonster.

Проблема вызвана наличием REST-API /wp-json/omapp/v1/support, доступ к которому был возможен без аутентификации – запрос выполнялся без дополнительных проверок при наличии в заголовке Referer строки “https://wp.app.optinmonster.test” и при установке типа HTTP-запроса в “OPTIONS” (переопределяется при помощи HTTP-заголовка “X-HTTP-Method-Override”). Среди данных, возвращаемых при обращении к рассматриваемому REST-API, присутствовал ключ доступа, позволяющий отправлять запросы к любым обработчикам REST-API.

При помощи полученного ключа атакующий мог внести изменения в любые всплывающие блоки, показываемые при помощи OptinMonster, в том числе организовать выполнение своего JavaScript-кода. Получив возможность выполнить свой JavaScript-код в контексте сайта атакующий мог перенаправить пользователей на свой сайт или организовать подстановку привилегированной учётной записи в web-интерфейс при выполнении подставленного JavaScript-кода администратором сайта. Имея доступ в web-интерфейс атакующий мог добиться выполнения своего PHP-кода на сервере.

Release. Ссылка here.