В WordPress нашли брешь, отдающую сайт хакерам без единого подтверждения
Одна ссылка в руках атакующего может заставить WordPress установить тему без нажатия кнопки, если её откроет уже авторизованный администратор. WordPress 17 сентября выпустил версию 7.1.1, которая закрывает ошибку в ядре CMS. Команда pwn.ai показала, что при сочетании с отдельной уязвимостью в теме цепочка Click2Shell доходит до выполнения PHP-кода на сервере.
Специалисты описали основную ошибку как принудительную установку темы из официального каталога WordPress.org. Сама по себе уязвимость не позволяет загрузить произвольный ZIP-архив. Атакующий выбирает существующую тему, после чего WordPress скачивает её штатным способом. pwn.ai оценивает этот этап в 7,1 балла по CVSS 3.1, а полную цепочку до RCE — в 9,3 балла.
Проблема возникает из-за того, что сервер и браузер по-разному разбирают один и тот же параметр theme. API каталога WordPress нормализует значение и получает обычное имя темы, а JavaScript в панели администратора сохраняет исходные символы и помещает строку в jQuery-селектор. Специальные символы позволяют изменить селектор так, чтобы штатный код сам нажал настоящую кнопку Install.
Администратору не приходится подтверждать установку. Активная сессия уже содержит право install_themes и защитный nonce, поэтому браузер жертвы передаёт WordPress всё необходимое от имени пользователя. Атакующему не нужна учётная запись на сайте, но требуется, чтобы администратор был авторизован и открыл подготовленную ссылку или страницу с такой ссылкой.
Установленная тема остаётся неактивной, поэтому внешний вид сайта не меняется и заметного сигнала для владельца может не появиться. Однако WordPress при предварительном просмотре через Customizer способен загрузить PHP-код ещё не активированной темы. Именно этот механизм превращает скрытую установку из отдельной проблемы в основу для дальнейшей цепочки.
Для демонстрации pwn.ai использовала Mobile Repair Zone 2.5.4. В теме работал AJAX-обработчик, который принимал адрес пакета плагина, скачивал архив, распаковывал его и подключал PHP-файл без проверки nonce и необходимых прав. После принудительной установки темы Customizer загружал её код, а второй запрос позволял выполнить выбранный атакующим PHP под учётной записью веб-сервера.
Полная цепочка даёт возможности, характерные для захвата WordPress: чтение wp-config.php и учётных данных базы, доступ к данным плагинов и WooCommerce, изменение пользователей и контента, чтение секретов PHP-процесса и правку файлов приложения. pwn.ai подчёркивает, что такие последствия показаны в тестовой демонстрации, а не описывают подтверждённую кампанию атак.
Разработчики WordPress исправили сам источник проблемы в JavaScript установщика тем. Код теперь ограничивает поиск карточкой div.theme и экранирует полученное из URL имя темы через escapeSelector(). В результате кавычки, комбинаторы и другие управляющие символы перестают менять структуру CSS-селектора и больше не могут провести его к кнопке установки.
WordPress 7.1.1 включает 11 исправлений безопасности помимо обычных исправлений ядра и редактора блоков. Проект рекомендует обновить сайты немедленно, а для поддерживаемых старых веток выпустил отдельные версии с исправлениями вплоть до линии 4.7. На сайтах с автоматическими фоновыми обновлениями установка должна запускаться автоматически, но версию стоит проверить вручную.
Для Click2Shell на момент публикации не назначен CVE, а WordPress пока не опубликовал собственную итоговую оценку серьёзности. pwn.ai сообщила об ошибке 22 августа, полную цепочку передала 1 сентября, а технические детали раскрыла 18 сентября после выхода исправления. В открытых источниках публичных данных об использовании Click2Shell в реальных атаках пока нет.
Новая цепочка продолжает серию находок в ядре WordPress. В августе pwn.ai уже показала XSS2Shell, где ошибка на странице входа при дополнительных условиях тоже приводила к запуску PHP-кода. Click2Shell использует другой механизм, а для атаки требуется авторизованный администратор, который откроет подготовленный ресурс во время активной сессии на сайте.
Click2Shell не связан с июльской цепочкой wp2shell, хотя обе проблемы находились в ядре WordPress и могли закончиться выполнением кода. В случае wp2shell злоумышленники захватывали необновлённые сайты без учётной записи и действий администратора. Для Click2Shell на 18 сентября такой активности пока не подтверждено публично.
Отдельного обходного решения WordPress и pwn.ai не предложили. Владельцам сайтов рекомендуют установить WordPress 7.1.1 либо соответствующий выпуск для используемой ветки и убедиться, что обновление действительно применилось. Такой шаг закрывает ошибку в ядре независимо от установленной темы и разрывает продемонстрированную цепочку на первом этапе.