БЕЗОПАСНОСТЬ / Новая волна вирусов на Битрикс в 2025 году

Заметка создана: 09 апреля 2025 г.

Взломы, скорее всего, происходят на не обновленных сайтах АСПРО.

Как это выглядит:

  1. Сайт может открываться, но не работает каталог, блог, новости и различные разделы сайта.
  2. Не открывается админка сайта, пишет ошибку: Forbidden You don't have permission to access /bitrix/ on this server:

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

Что делать

  1. Восстановить доступ к админке удалив из папок /bitrix/ и /bitrix/admin/ файлы .htaccess.
  2. В админке перейти в инструмент Прокативная защита - Поиск троянов - Проверка .htacess
  3. Удалить все файлы .htacess и восстановить основные (потом привести основной htaccess к нужному вам виду)
  4. Там же произвести сканирование на поиск вирусов через сканирование файлов.
  5. Проканализировать выдачу и удалить файлы с вирусом. Почистить файл index.php, обычно в его начало вставляется вредоносный код тоже.
  6. Закрыть уязвимости обновив Битрикс и АСПРО до последних версий. Или закрыть уязвимости АСПРО вручную, но Битрикс обновить нужно.
  7. Перезапустите сервер чтобы убить вредоносные процессы.

Как закрыть уязвимости в АСПРО

Взломы происходят через необновленный шаблон АСПРО. В идеале - установить обновление на АСПРО. Если нет такой возможности, то нужно внести правки в четыре уязвимых файла в шаблоне.

1. Файлы:
$arIncludeParams = ($bAjaxMode ? $_POST["AJAX_PARAMS"] : $arParamsTmp);
 $arGlobalFilter = ($bAjaxMode ? unserialize(urldecode($_POST["GLOBAL_FILTER"])) : ($_GET['GLOBAL_FILTER'] ? unserialize(urldecode($_GET['GLOBAL_FILTER'])) : array()));
 $arComponentParams = unserialize(urldecode($arIncludeParams));

Заменить на:

if ($_POST["AJAX_PARAMS"] && !is_array(unserialize(urldecode($_POST["AJAX_PARAMS"]), ["allowed_classes" => false]))) {
 header('HTTP/1.1 403 Forbidden');
 $APPLICATION->SetTitle('Error 403: Forbidden');
 echo 'Error 403: Forbidden_1';
 require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');
 die();
 }
 $arIncludeParams = ($bAjaxMode ? $_POST["AJAX_PARAMS"] : $arParamsTmp);
 $arGlobalFilter = ($bAjaxMode ? unserialize(urldecode($_POST["GLOBAL_FILTER"]), ["allowed_classes" => false]) : ($_GET['GLOBAL_FILTER'] ? unserialize(urldecode($_GET['GLOBAL_FILTER']), ["allowed_classes" => false]) : array()));
 $arComponentParams = unserialize(urldecode($arIncludeParams), ["allowed_classes" => false]);

Этот вариант не ломает отображение табов на главной, в отличии от замены на json_decode.

2. Файлы:
/ajax/show_basket_fly.php
/ajax/show_basket_popup.php
/ajax/reload_basket_fly.php
/bitrix/wizards/aspro/max/site/public/ru/ajax/reload_basket_fly.php
/bitrix/wizards/aspro/max/site/public/ru/ajax/show_basket_fly.php
/bitrix/wizards/aspro/max/site/public/ru/ajax/show_basket_popup.php

В этих файлах заменить

$arParams = unserialize(urldecode($_REQUEST["PARAMS"]));

на

if (!is_array(unserialize(urldecode($_REQUEST["PARAMS"]), ["allowed_classes" => false]))) {
 header('HTTP/1.1 403 Forbidden');
 $APPLICATION->SetTitle('Error 403: Forbidden');
 echo 'Error 403: Forbidden';
 require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');
 die();
 }
 $arParams = unserialize(urldecode($_REQUEST["PARAMS"]), ["allowed_classes" => false]);
3. Файлы:
/bitrix/components/aspro/oneclickbuy.max/script.php (для аспро Максимум)
/bitrix/components/aspro/oneclickbuy.lite/script.php (для аспро Лайтшоп)

В этих файлах заменить

$res = CSaleOrderProps::GetList(array(), array('@CODE' => unserialize($_POST["PROPERTIES"]), 'PERSON_TYPE_ID' =>$personType));

на

$res = CSaleOrderProps::GetList(array(), array('@CODE' => unserialize($_POST["PROPERTIES"], ['allowed_classes' => false]), 'PERSON_TYPE_ID' =>$personType));
4. Для решения АСПРО NEXT:

Аналогично, в местах, где используется функция unserialize, указать в качестве второго аргумента ['allowed_classes' => false] в этих файлах:

/ajax/form.php
/ajax/reload_basket_fly.php
/ajax/show_basket_fly.php
/ajax/show_basket_popup.php
/include/mainpage/comp_catalog_ajax.php
/bitrix/components/aspro/oneclickbuy.next/script.php

Скачать скрипт закрывающий уязвимости на сайтах АСПРО (скрипт обновлен 11.02.2025)

Вы можете скачать скрипт, который автоматически закроет все уязвимости в вашем проекте. Но не забывайте, что это предотвращает взлом, а не лечит от проникших вирусов. После закрытия уязвимостей обязательно нужно очистить сайт от вируса.

Скачать скрипт

Инструкция для скрипта

На вашем сервере должен быть PHP 7.4 или выше и включены модули `zip`, `session` и `file system`.

  1. Скачайте и распакуйте архив.
  2. Разместите файл `fixit.php` в корневой директории сайта.
  3. Откройте браузер и перейдите по адресу http:// yourdomain.com/fixit.php
Настройки

Файл содержит несколько предопределённых констант, которые можно изменить при необходимости:

  • Расширенное сканирование, включая код сторонних разработчиков`: скрипт отсканирует все папки модулей всех разработчиков.
  • Создать .back для измененных файлов`: создаст back файлы в той же директории, где нашел и исправил файл (обязательно включайте!).
  • Создать .zip архив измененных файлов`: создаст в папке upload zip архив с первичными версиями файлов.
  • Удалить скрипт после выполнения`: скрипт самоудалится после выполнения.
Важные замечания
  • Убедитесь, что скрипт выполняется с достаточными правами доступа.
  •  Использование неправильных параметров может повлиять на файловую систему Bitrix.
  •  Перед запуском рекомендуется создать резервную копию данных.
  •  Разработчики рекомендуют с осторожностью использовать скрипт, так как внесенные изменения могут повлиять на работу системы.
Если сайт не работает после работы скрипта

Посмотрите на какой файл ругается и зайдите в папку где он находится и подмените его старым файлом (старый файл будет называться так же, только начинаться будет с подчеркивания и заканчиваться на .php.back). Обычно все такие файлы не участвуют во взломах и можете спокойно пользовтаься старыми их версиями.

Как обезопасить себя на будущее

Если вы закрыли уязвимости описанные выше и обновили Битрикс, сейчас все будет хорошо. Но не значит что в ваших старых шаблонах или в Битриксе не найдут новые дырки. Если есть возможность, купите продление шаблона и обновите его + поддерживайте актуальность по возможности Битрикс и АСПРО. Понимаю что цены на АСПРО сейчас довольно сильно выросли, но как минимум Битрикс обновлять нужно всегда, он стоит совсем не дорого.