Один клик по подготовленной ссылке может привести к выполнению PHP-кода на WordPress-сервере, если администратор в этот момент авторизован в панели управления. Исследователи из pwn.ai опубликовали proof-of-concept, демонстрирующий полную цепочку от обычного URL до запуска кода.

Уязвимость состоит из двух компонентов. В ядре WordPress параметр названия темы обрабатывается двумя разными способами. API каталога WordPress.org очищает значение и превращает его в идентификатор, а JavaScript в админ-панели сохраняет спецсимволы и подставляет строку в селектор без экранирования. Это позволяет подготовленной строке изменить логику селектора так, чтобы WordPress сам нажал кнопку установки темы.

Атакующему не нужны nonce или права install_themes. Браузер авторизованного администратора предоставляет необходимые разрешения. Учетные записи с правами Author и Editor такую атаку запустить не могут.

Установленная тема остается неактивной, поэтому внешний вид сайта не меняется. Проблема срабатывает при предварительном просмотре в WordPress Customizer. Этот инструмент загружает functions.php еще не активированной темы, позволяя её коду выполниться до того, как владелец переключит оформление.

В демонстрационной теме Mobile Repair Zone 2.5.4 нашелся AJAX-обработчик без проверки nonce и прав доступа. Он принимал адрес архива плагина, скачивал его, распаковывал и подключал выбранный PHP-файл. После установки темы и загрузки через Customizer атакующий получал возможность выполнить собственный PHP под учетной записью веб-сервера.

Полная цепочка не работает автономно. Администратор должен быть авторизован и открыть специально подготовленный адрес, например из фишингового письма. Другой вариант использует уже существующую XSS-уязвимость, которая заставит браузер администратора отправить запрос автоматически. О реальной эксплуатации Click2Shell в атаках пока не известно.

WordPress закрыла исходную ошибку 17 сентября в версии 7.1.1. Разработчики начали экранировать идентификатор темы через $.escapeSelector() и ограничили селектор реальными div.theme. Исправления перенесли в поддерживаемые старые версии. Для сайтов, где немедленное обновление невозможно, константа DISALLOW_FILE_MODS препятствует установке новых тем и плагинов.

Полный технический разбор содержит рабочий PoC и показывает переход от установки темы к выполнению серверного кода. На момент публикации отдельного CVE для основной ошибки еще не было. WordPress сообщила, что идентификатор будет присвоен.

Месяцем раньше pwn.ai обнаружила в WordPress цепочку XSS2Shell. Авторизованный администратор снова становился ключевым звеном, но начальная точка входа находилась в обработке данных на странице авторизации.

В июле выявилась еще более автономная цепочка wp2shell. Сочетание двух ошибок в ядре позволяло атаковать без учетной записи и без клика администратора. Разработчики задействовали принудительные автоматические обновления.

Опасные цепочки продолжают находить и в расширениях. В сентябре две критические RCE обнаружили в The Events Calendar, затронувшие сотни тысяч установок. В отличие от Click2Shell, обе ошибки находились в самом плагине и не требовали авторизованного администратора.