В плагине Elementor Website Builder для WordPress обнаружена опасная уязвимость межсайтовой подделки запросов, или CSRF. Ей присвоена высокая степень опасности и оценка 8,8 из 10 по шкале CVSS. На момент публикации идентификатор CVE ещё не был назначен. Для атаки не нужна учётная запись на выбранном сайте: достаточно убедить авторизованного пользователя WordPress открыть специально составленную ссылку.

Ошибка затрагивает только Elementor 4.3.0 и 4.3.1. Сам конструктор работает более чем на 10 миллионах сайтов, а две уязвимые версии, согласно статистике , успели установить более чем на 2 миллионах ресурсов. Выпуски до 4.3.0 этому конкретному дефекту не подвержены, поскольку в них ещё нет проблемного прокси-компонента Editor Events.
Опасность зависит от полномочий человека, открывшего ссылку. Patchstack описала механику так: «Одна ссылка, открытая авторизованным пользователем WordPress, заставляет этого пользователя выполнить любое действие REST API, которое разрешено его учётной записи». Если ссылку нажмёт подписчик или редактор, запрос унаследует их ограниченные права. Если это сделает администратор, его браузер сможет создать ещё одну административную учётную запись, уже подконтрольную злоумышленнику. На стандартной установке WordPress этого хватает для полного захвата сайта.
Для доставки запроса не требуются JavaScript, отправка HTML-формы или отдельная страница злоумышленника. Обычную ссылку можно поместить в письмо, сообщение чата либо комментарий. Единственное существенное условие: жертва должна оставаться авторизованной на уязвимом сайте и открыть URL в браузере, где действуют её cookie. Внешне ссылка при этом может выглядеть как адрес самого сайта, что заметно упрощает социальную инженерию.
Причина находится в модуле Editor Events. Он ошибочно отключает CSRF-защиту для REST API-запросов WordPress с cookie-аутентификацией, если в URI где-либо встречается буквальная строка elementor/v1/events/. Проверяется весь URI вместе со строкой запроса. Поэтому составитель ссылки может добавить безобидный с виду параметр с нужным текстом и добиться исключения из проверки для постороннего REST-запроса.
Patchstack сформулировала проблему так: «Поскольку URI запроса включает строку запроса, а её записывает тот, кто составляет ссылку, любой REST-запрос может сам вывести себя из-под этой защиты, добавив безобидный на вид параметр». Ошибка не ограничена интерфейсами Elementor. Обход распространяется на всю поверхность REST API сайта: системные маршруты WordPress, конечные точки Elementor и маршруты каждого установленного плагина. Реальные последствия определяются тем, какие операции доступны открывшему ссылку пользователю.
Показательный сценарий использует стандартный маршрут /wp/v2/users. Запрос к получает параметры _method=POST, username=csrfadmin, email=csrfadmin%40example.test, password=..., roles%5B%5D=administrator и x=elementor/v1/events/. Первый параметр заставляет WordPress обработать обращение как POST-запрос; следующие задают имя csrfadmin, адрес csrfadmin@example.test, пароль и роль администратора. Последний параметр содержит строку-триггер, из-за которой пропускается ожидаемая CSRF-проверка.
Если такой URL откроет действующий администратор, WordPress может создать пользователя csrfadmin с административными правами. Запрос фактически отправляет браузер жертвы, поэтому сервер видит её действующие cookie и выполняет операцию с её полномочиями. Затем злоумышленник входит под новой учётной записью, получает доступ к настройкам, плагинам, темам и пользовательским данным, а при обычной конфигурации WordPress может закрепиться на сервере через установку или изменение исполняемого кода.
Уязвимость обнаружил и сообщил исследователь, работающий под псевдонимом Saggre. Технический разбор подготовила специализирующаяся на безопасности WordPress компания Patchstack. В сведениях о выпуске исправления присутствует отдельная фраза «3.2 выпущена ранее на этой неделе». Она выглядит обрезанной: по контексту речь могла идти о версии 4.3.2, однако буквально указано именно 3.2, а точная дата релиза не приведена.
Сайты на Elementor 4.3.0 и 4.3.1 следует обновить до последней доступной исправленной версии без задержки, после чего проверить список администраторов и журналы REST API на подозрительные обращения. Особого внимания требуют неизвестные учётные записи, включая пользователя с неожиданно выданной ролью administrator. Старые выпуски ниже 4.3.0 не содержат прокси Editor Events и не уязвимы для этого обхода, но оставаться на устаревшей ветке рискованно из-за других возможных ошибок безопасности.[/final]

Изображение носит иллюстративный характер
Ошибка затрагивает только Elementor 4.3.0 и 4.3.1. Сам конструктор работает более чем на 10 миллионах сайтов, а две уязвимые версии, согласно статистике , успели установить более чем на 2 миллионах ресурсов. Выпуски до 4.3.0 этому конкретному дефекту не подвержены, поскольку в них ещё нет проблемного прокси-компонента Editor Events.
Опасность зависит от полномочий человека, открывшего ссылку. Patchstack описала механику так: «Одна ссылка, открытая авторизованным пользователем WordPress, заставляет этого пользователя выполнить любое действие REST API, которое разрешено его учётной записи». Если ссылку нажмёт подписчик или редактор, запрос унаследует их ограниченные права. Если это сделает администратор, его браузер сможет создать ещё одну административную учётную запись, уже подконтрольную злоумышленнику. На стандартной установке WordPress этого хватает для полного захвата сайта.
Для доставки запроса не требуются JavaScript, отправка HTML-формы или отдельная страница злоумышленника. Обычную ссылку можно поместить в письмо, сообщение чата либо комментарий. Единственное существенное условие: жертва должна оставаться авторизованной на уязвимом сайте и открыть URL в браузере, где действуют её cookie. Внешне ссылка при этом может выглядеть как адрес самого сайта, что заметно упрощает социальную инженерию.
Причина находится в модуле Editor Events. Он ошибочно отключает CSRF-защиту для REST API-запросов WordPress с cookie-аутентификацией, если в URI где-либо встречается буквальная строка elementor/v1/events/. Проверяется весь URI вместе со строкой запроса. Поэтому составитель ссылки может добавить безобидный с виду параметр с нужным текстом и добиться исключения из проверки для постороннего REST-запроса.
Patchstack сформулировала проблему так: «Поскольку URI запроса включает строку запроса, а её записывает тот, кто составляет ссылку, любой REST-запрос может сам вывести себя из-под этой защиты, добавив безобидный на вид параметр». Ошибка не ограничена интерфейсами Elementor. Обход распространяется на всю поверхность REST API сайта: системные маршруты WordPress, конечные точки Elementor и маршруты каждого установленного плагина. Реальные последствия определяются тем, какие операции доступны открывшему ссылку пользователю.
Показательный сценарий использует стандартный маршрут /wp/v2/users. Запрос к получает параметры _method=POST, username=csrfadmin, email=csrfadmin%40example.test, password=..., roles%5B%5D=administrator и x=elementor/v1/events/. Первый параметр заставляет WordPress обработать обращение как POST-запрос; следующие задают имя csrfadmin, адрес csrfadmin@example.test, пароль и роль администратора. Последний параметр содержит строку-триггер, из-за которой пропускается ожидаемая CSRF-проверка.
Если такой URL откроет действующий администратор, WordPress может создать пользователя csrfadmin с административными правами. Запрос фактически отправляет браузер жертвы, поэтому сервер видит её действующие cookie и выполняет операцию с её полномочиями. Затем злоумышленник входит под новой учётной записью, получает доступ к настройкам, плагинам, темам и пользовательским данным, а при обычной конфигурации WordPress может закрепиться на сервере через установку или изменение исполняемого кода.
Уязвимость обнаружил и сообщил исследователь, работающий под псевдонимом Saggre. Технический разбор подготовила специализирующаяся на безопасности WordPress компания Patchstack. В сведениях о выпуске исправления присутствует отдельная фраза «3.2 выпущена ранее на этой неделе». Она выглядит обрезанной: по контексту речь могла идти о версии 4.3.2, однако буквально указано именно 3.2, а точная дата релиза не приведена.
Сайты на Elementor 4.3.0 и 4.3.1 следует обновить до последней доступной исправленной версии без задержки, после чего проверить список администраторов и журналы REST API на подозрительные обращения. Особого внимания требуют неизвестные учётные записи, включая пользователя с неожиданно выданной ролью administrator. Старые выпуски ниже 4.3.0 не содержат прокси Editor Events и не уязвимы для этого обхода, но оставаться на устаревшей ветке рискованно из-за других возможных ошибок безопасности.[/final]