Срочно обновляйте сайты WordPress. Отраженная XSS без прав получила опасную цепочку RCE

6535
Срочно обновляйте сайты WordPress. Отраженная XSS без прав получила опасную цепочку RCE

Атакующему достаточно подготовить страницу, дождаться авторизованного администратора и использовать штатные механизмы CMS против владельца сайта.

image

Обычная страница входа в WordPress оказалась способна превратить одну неудачную авторизацию в выполнение JavaScript на сайте, а при удачном стечении обстоятельств для атакующего привести к запуску PHP-кода на сервере. Разработчики WordPress закрыли уязвимость в версии 7.0.3 и рекомендуют администраторам обновить сайты как можно скорее.

Уязвимость получила идентификатор CVE-2026-64638 и оценку 8,9 балла по шкале CVSS. Проблема относится к отражённым XSS и находится непосредственно в форме входа WordPress. Для запуска вредоносного JavaScript атакующему не нужна учётная запись на целевом сайте. Исследователи pwn.ai показали и более опасную цепочку под названием XSS2Shell, которая при дополнительных условиях позволяет добраться до выполнения PHP-кода на сервере.

Ошибка возникла из-за того, что разные механизмы WordPress по-разному разбирали одну и ту же строку. При неудачной попытке входа система выводит введённое имя пользователя в сообщении об ошибке. Перед выводом строка проходит через несколько фильтров, включая PHP-функцию strip_tags() и механизм WordPress KSES.

Исследователи обнаружили, что строка с пробелом сразу после символа «<» может пройти первый фильтр как обычный текст. Следующий парсер воспринимает ту же конструкцию уже как допустимый HTML. В результате атакующий получает возможность добавить собственные элементы в DOM страницы входа, хотя напрямую вставить тег script нельзя.

Дальше срабатывает неожиданная особенность самого WordPress. На странице входа загружается скрипт user-profile.js, который обычно отвечает за элементы профиля пользователя и восстановление пароля. Добавленные атакующим HTML-элементы заставляют штатный JavaScript WordPress самостоятельно отправить запрос по выбранному адресу. Через REST API и поддержку JSONP исследователи смогли превратить такой запрос в выполнение JavaScript в контексте атакуемого сайта.

Сам по себе XSS ещё не означает полный захват сервера. Для перехода к выполнению PHP-кода исследователям понадобился администратор WordPress, который уже вошёл в систему и открыл страницу, контролируемую атакующим. В демонстрации достаточно одного обычного клика.

Затем вредоносная страница использует штатный механизм WordPress Application Passwords и заставляет браузер администратора подтвердить выдачу отдельного пароля для API. Атакующий получает такой ключ доступа, публикует через REST API страницу со своим JavaScript, а затем использует активную административную сессию для получения nonce и загрузки ZIP-архива с плагином. PHP-файл внутри загруженного плагина можно вызвать напрямую, даже не активируя сам плагин.

WordPress подчёркивает, что превращение XSS в удалённое выполнение кода зависит от нескольких условий, которые атакующий не может гарантировать заранее. Жертва должна иметь активную административную сессию и взаимодействовать с подготовленной страницей. Поэтому CVE-2026-64638 нельзя считать полностью автономной pre-auth RCE, хотя исходная XSS действительно не требует авторизации.

Уязвимость обнаружила система pwn.ai, использующая несколько ИИ-агентов и открытые модели. В качестве отправной точки разработчики дали системе исследование техники Same Origin Method Execution 2022 года. По данным pwn.ai, на поиск и построение полной цепочки ушло почти четыре дня. Уязвимость воспроизвели 26 июля, 27 июля сообщили команде WordPress, а 6 августа разработчики выпустили исправление.

Исследователи отдельно проверили XSS на двух реальных установках WordPress 7.0.2 без предварительной авторизации. Полную цепочку до выполнения PHP-кода команда воспроизводила уже в собственной тестовой среде и не пыталась захватывать сторонние серверы. По состоянию на 7 августа сведений об эксплуатации CVE-2026-64638 в реальных атаках нет.

Исправление вошло в WordPress 7.0.3. Команда проекта также переносит патч в старые ветки, которые ещё получают исправления безопасности, вплоть до WordPress 4.7. Владельцам сайтов с автоматическими фоновыми обновлениями патч должен устанавливаться автоматически, однако WordPress рекомендует проверить версию вручную и не откладывать обновление.