WordPress исправил уязвимость Click2Shell, из-за которой специально подготовленная ссылка могла заставить сайт установить и открыть для предпросмотра выбранную атакующим тему из официального каталога WordPress.org. Для этого злоумышленнику не требовалась собственная учетная запись на сайте: достаточно было, чтобы ссылку открыл администратор и при необходимости вошел в WordPress.
Сама ошибка в ядре не давала удаленного выполнения кода и получила от WordPress оценку 5,3 балла из 10 по CVSS. Исследователи pwn.ai показали, как превратить ее в полноценный захват сайта, добавив вторую уязвимость в устанавливаемой теме. В продемонстрированной цепочке после одного перехода атакующий мог добиться выполнения своего PHP-кода на сервере.
Исправление вышло 17 сентября в WordPress 7.1.1 вместе еще с десятью патчами безопасности. WordPress рекомендует владельцам сайтов обновиться немедленно.
Click2Shell нашли Паулос Йибело и команда pwn.ai. Ошибка находилась в механизме установки и предварительного просмотра тем через административную панель.
Адрес страницы установки темы содержит ее идентификатор. WordPress передавал это значение каталогу WordPress.org, а затем использовал исходную строку в JavaScript-коде административной панели.
Проблема заключалась в том, что сервер и браузер обрабатывали эту строку по-разному. API каталога приводил ее к обычному идентификатору существующей темы. JavaScript в браузере администратора сохранял дополнительные символы и использовал значение внутри селектора jQuery — конструкции, которая ищет нужный элемент на странице.
Исследователи подобрали строку, способную изменить этот селектор. В результате скрипт WordPress выбирал уже не просто карточку нужной темы, а ее элемент управления установкой и программно вызывал на нем нажатие.
Получалось довольно необычно: администратор открывал ссылку, а собственный код WordPress фактически нажимал кнопку установки за него. Защитные механизмы при этом не требовалось ломать. Браузер администратора уже имел действующую сессию, необходимые права и защитный токен для установки темы.
Если пользователь еще не вошел в административную панель, WordPress показывал обычную страницу авторизации. После успешного входа дополнительное нажатие кнопки «Установить» уже не требовалось. Именно такое поведение описано в официальном бюллетене безопасности.
У Click2Shell есть ограничение. Ошибка в ядре не позволяет передать WordPress собственный архив с вредоносной темой.
Атакующий может заставить сайт установить существующую тему из официального каталога WordPress.org. После первого этапа она записывается на сервер, но остается неактивной. Рабочая тема сайта не переключается, поэтому его публичная часть продолжает выглядеть как раньше.
Самой установки для захвата сервера недостаточно. Исследователям понадобилась еще одна уязвимость — уже в коде сторонней темы.
Следующий этап связан с тем, как WordPress показывает пользователю оформление сайта перед его активацией.
Во время предпросмотра WordPress может загрузить PHP-код установленной темы, включая ее functions.php, даже если на сайте продолжает работать другая тема. Это нормальная часть механизма предпросмотра: движку нужно выполнить код оформления, чтобы показать результат администратору.
Исследователи поняли, что установленная, но неактивная тема из-за этого может стать второй ступенью атаки.
Для демонстрации они использовали Mobile Repair Zone версии 2.5.4, которая находилась в официальном каталоге WordPress.org. В ее PHP-коде был AJAX-обработчик, предназначенный для установки и активации плагинов.
Проверки в нем оказались недостаточными. Обработчик не проверял одноразовый защитный токен запроса и не убеждался, что текущему пользователю разрешено устанавливать плагины. При этом из запроса можно было передать адрес пакета плагина.
Сервер загружал архив по этому адресу, распаковывал его в каталог плагинов и подключал указанный PHP-файл.
Так две отдельные ошибки превращались в одну цепочку. Click2Shell устанавливал настоящую тему из WordPress.org. Предпросмотр заставлял WordPress загрузить ее PHP-код. Уязвимый обработчик внутри темы после этого позволял скачать выбранный атакующим пакет и выполнить находящийся в нем PHP.
pwn.ai собрала демонстрацию, в которой весь процесс запускался после одного посещения подготовленной злоумышленником страницы.
Администратор с действующей сессией переходил по ссылке. WordPress устанавливал Mobile Repair Zone, не активируя ее. Следующий запрос открывал контекст предпросмотра, из-за чего загружался PHP-код темы. Затем запрос к уязвимому обработчику передавал адрес пакета с PHP-кодом.
Атакующему не требовалась своя учетная запись WordPress и не нужно было знать пароль администратора.
При этом участие жертвы все же необходимо. В официальной оценке уязвимости указано User Interaction: Required: администратор должен открыть подготовленную ссылку и, если он еще не авторизован, войти в систему.
Исследователи отдельно сообщили, что обнаружили похожие проблемы более чем в 40 сторонних темах WordPress. SecurityWeek отмечает, что код таких тем также потенциально можно было использовать до их активации. Публичного перечня всех найденных пакетов pwn.ai не привела.
Одна из неприятных особенностей цепочки — установленная атакующим тема не становилась основной.
Пользователи продолжали видеть прежнее оформление сайта. Это отличает установку от обычной смены темы, которую владелец заметил бы сразу.
Официальное описание WordPress уточняет другую сторону процесса: администратор после перехода может увидеть предпросмотр установленной темы. При этом публичный сайт остается без изменений.
На диске сервера тем временем уже появляется новый каталог с файлами темы. При успешном продолжении цепочки туда добавляется и пакет плагина, через который выполняется PHP-код.
Это делает проверку неактивных тем важной и после обновления: если сайт долго работал на уязвимой версии, неизвестный пакет в каталоге тем может требовать отдельного расследования.
WordPress 7.1.1 вышел 17 сентября. В релиз вошли 11 исправлений безопасности, включая Click2Shell, несколько ошибок межсайтового выполнения сценариев, проблемы с проверкой прав и обход каталогов в REST API.
Для Click2Shell разработчики изменили обработку идентификатора темы, из-за которой атакующий мог вмешаться в работу селектора и перенаправить программное нажатие на кнопку установки.
Патч выпущен не только для актуальной ветки. Официальный бюллетень Click2Shell перечисляет исправленные версии 7.1.1, 7.0.5, 6.9.8, 6.8.9 и обновления всех затронутых веток вплоть до WordPress 4.8.31. Ветка 4.7 в бюллетене именно этой уязвимости не указана среди затронутых.
pwn.ai оценила опасность своей полной цепочки заметно выше, чем WordPress оценил ошибку в ядре. Здесь речь идет о двух разных вещах. WordPress рассматривает саму возможность принудительно установить и открыть для предпросмотра тему. Официальная оценка этой проблемы — Moderate, CVSS 5,3. У нее высокая сложность атаки, не нужны права атакующего, требуется действие пользователя, а основное прямое последствие связано с нарушением целостности системы. Идентификатора CVE у проблемы на 22 сентября еще нет.
pwn.ai оценивает уже составную атаку, где к ошибке WordPress Core добавляется отдельная уязвимость темы и появляется выполнение произвольного PHP. Исследователи относят такую цепочку к критическому уровню.
В демонстрации использовалась Mobile Repair Zone 2.5.4. Сейчас WordPress.org предлагает версию 2.5.5, опубликованную 9 сентября.
Публичная информация о выпуске 2.5.5 не позволяет надежно утверждать, что именно в нем устранен использованный исследователями уязвимый обработчик. Поэтому владельцам сайтов, где эта тема установлена или была установлена ранее, безопаснее не ограничиваться проверкой номера версии, а обновить WordPress Core и проверить ненужные темы и плагины.
Главный патч находится именно в ядре: обновленный WordPress больше не позволяет использовать описанную подстановку в селектор для принудительной установки темы.
Исследователи сообщили об основной ошибке WordPress 22 августа. В тот же день разработчики воспроизвели проблему на WordPress 7.1.0. Полную цепочку с Mobile Repair Zone 2.5.4 pwn.ai передала команде WordPress 1 сентября.
Патч вышел 17 сентября, а полный технический разбор исследователи опубликовали днем позже. Вместе с описанием стали доступны детали, достаточные для воспроизведения первого этапа и всей цепочки в тестовой среде.
SecurityWeek 22 сентября также сообщил о публикации демонстрационного кода. Подтвержденных случаев использования Click2Shell в реальных атаках к моменту публикации обнаружено не было.
Вопросы и ответы
Что такое Click2Shell?
Click2Shell — название цепочки атаки, построенной вокруг уязвимости WordPress Core. Подготовленная ссылка могла заставить WordPress установить и открыть для предпросмотра выбранную атакующим тему из официального каталога без отдельного нажатия кнопки установки.
Можно ли было выполнить код через одну ссылку?
Исследователи продемонстрировали такую цепочку. Для нее требовались сразу несколько условий: действие администратора, уязвимая версия WordPress и дополнительная ошибка в устанавливаемой теме. Ошибка ядра сама по себе произвольный PHP-код не выполняет.
Администратор обязательно должен быть уже авторизован?
Нет. Официальный бюллетень указывает, что пользователь может открыть подготовленную ссылку и затем войти в WordPress, если система попросит авторизацию. После входа дополнительно нажимать «Установить» не требуется.
Нужна ли атакующему учетная запись WordPress?
Нет. В официальной оценке для атакующего указано Privileges Required: None. Необходимые полномочия предоставляет сессия администратора, который открывает подготовленную ссылку.
Можно ли было установить произвольную вредоносную тему?
Нет. Click2Shell позволяет выбрать существующую тему из каталога WordPress.org. Выполнение чужого PHP в демонстрации стало возможным благодаря отдельной уязвимости в установленной теме.
Какая тема использовалась в демонстрации?
pwn.ai использовала Mobile Repair Zone 2.5.4. Ее обработчик установки плагинов не выполнял необходимые проверки и позволял загрузить пакет по переданному адресу. Сейчас в каталоге WordPress.org доступна версия 2.5.5.
Click2Shell имеет CVE?
На 22 сентября 2026 года нет. В официальном бюллетене WordPress указано No known CVE.
Какая версия WordPress закрывает уязвимость?
В актуальной ветке — WordPress 7.1.1. Патчи также вышли для старых затронутых веток: 7.0.5, 6.9.8, 6.8.9 и далее вплоть до 4.8.31.
Click2Shell уже используют в атаках?
Публичных подтверждений эксплуатации в реальных атаках на 22 сентября нет. При этом технический разбор и демонстрация атаки уже опубликованы.
Есть новость? Станьте автором.
Мы сотрудничаем с независимыми исследователями и специалистами по кибербезопасности. Отправьте нам новость или предложите статью на рассмотрение редакции.