Click2Shell — это цепочка уязвимостей в WordPress, которая может привести к удаленному выполнению кода (RCE). Для успешной атаки злоумышленнику необходимо, чтобы авторизованный администратор открыл специально подготовленную ссылку.
1️⃣ Шаг первый: XSS
В ядре WordPress существует уязвимый участок кода:
self.view.collection.once( 'query:success', function() {
$( 'div[data-slug="' + slug + '"]' ).trigger( 'click' );
});Этот код позволяет злоумышленнику инициировать установку произвольной темы. Важно, что тема устанавливается без активации и остается неактивной.
Параметр slug контролируется злоумышленником. Он получается из аргумента theme в запросе /wp-admin/theme-install.php?theme=THEME_SLUG.
Атакующий формирует ссылку вида:
/wp-admin/theme-install.php?theme=something_theme"]>>>*/*Вставленная кавычка закрывает селектор атрибута. Дочерние комбинаторы переходят к возвращаемой карточке темы. Завершающий CSS-комментарий нейтрализует фрагмент селектора, который добавляет WordPress.
Затем злоумышленник передает эту ссылку администратору. После перехода по ссылке администратором селектор вместо выбора только карточки темы переходит к элементам управления действиями, включая настоящую кнопку «Установить». В результате срабатывает JavaScript-код WordPress, и тема устанавливается автоматически.
2️⃣ Шаг второй: установка произвольной темы
Важно, чтобы WordPress мог загрузить functions.php темы во время подготовки предварительного просмотра. Это дает коду темы возможность регистрировать хуки и обработчики, даже если база данных все еще идентифицирует другую тему как активную.
Далее нужно выбрать тему, имеющую уязвимость, которую можно поэксплуатировать, например через хуки. Чтобы код темы выполнился, злоумышленнику нужно заставить админа активировать или запустить предпросмотр установленной темы, например через CSRF, фишинг или другую XSS-уязвимость. В обнаруженных эксплойтах фигурирует тема Mobile Repair Zone 2.5.4.
Пример RCE можно наблюдать на скриншоте.
👀 Лаба
В лабораторной эмуляции есть небольшие сложности. Активная версия Mobile Repair Zone на сегодняшний момент 2.5.5.
поэтому скачиваем:
wget https://downloads.wordpress.org/theme/mobile-repair-zone.2.5.4.zipредактируем файл functions.php, так как даже в 2.5.4 есть защита от SSRF-атак, которая помешает сделать локальный запрос.
Меняем:
function mobile_repair_zone_plugin_download($url, $path) {
$response = wp_safe_remote_get( $url );на:
function mobile_repair_zone_plugin_download($url, $path) {
$response = wp_remote_get ( $url );Загружаем плагин руками через webui или через консоль. Далее можно поднимать локальный HTTP и загружать zip-файл с shell-кодом.
✅ Как защищаться:
1. Обновление ядра WordPress.
2. Проверка недавно загруженных тем.
3. Проверка директорий на предмет появления подозрительных файлов.
4. Правила на IDS/WAF, блокирующие запросы с нетипичным slug-значением [^a-zA-Z0-9_-]+
