Статья APT28 эксплуатация Roundcube: разбор kill chain, OPSEC-провал и уроки для Red Team

Вскрытый серверный модуль на чёрном антистатическом коврике: обгоревшая дорожка платы у чипа почтового контроллера под жёстким конусом света. Рядом сломанный USB-донгл.


В январе 2026 года исследователи Hunt.io нашли на сервере 203.161.50.145 открытый каталог с полным инструментарием APT28 для атак на Roundcube webmail - 61 файл, 36 поддиректорий, 52 МБ. Bash-история оператора, XSS-пейлоады, Flask-based C2, Go-имплант для GNU/Linux. Не абстрактный TTP-маппинг из чужого отчёта, а snapshot того, как государственная APT-группировка строит и развёртывает webmail-атаку. И одновременно - каталог OPSEC-ошибок, которые на Red Team операции стоят атрибуции.

Бизнес-логика атаки: зачем APT28 бьёт в webmail​

Webmail-серверы для APT28 - не цель, а канал доступа к коммуникациям конкретных людей в госструктурах. Одна скомпрометированная почта даёт:
  • Переписку с вложениями - оперативные документы, сканы приказов, внутренние распоряжения
  • Адресную книгу - граф связей внутри организации и с внешними контрагентами
  • Cookie и токены сессий - доступ к смежным сервисам без повторной аутентификации
  • Правило пересылки на контролируемый ящик - пассивный сбор всей входящей почты без повторной эксплуатации
По данным ESET (Operation RoundPress), основные цели - правительственные структуры Украины, оборонные компании Болгарии и Румынии, производящие вооружение советского образца для поставок в Украину. APT28 (Fancy Bear / Sednit / Forest Blizzard / STRONTIUM) атрибутирована ГРУ ГШ РФ - воинская часть 26165. Активна с 2004 года, ответственна за компрометацию DNC (2016), TV5Monde (2015), WADA и десятки других операций.

Kill chain кампании укладывается в шесть шагов: spear phishing с XSS-эксплойтом в теле письма -> выполнение JavaScript implant в контексте браузера жертвы -> credential harvesting и email exfiltration -> создание скрытого правила пересылки (persistence) -> SQLi для дампа базы данных Roundcube -> RCE для получения shell на сервере (если нужен lateral movement).

Kill chain: от XSS-письма до shell на сервере​

1784487734596.webp

CVE-2020-35730 и CVE-2023-43770 - XSS как initial access​

Точка входа - спир-фишинговое письмо. В кампании, описанной CERT-UA (предположительно advisory CERT-UA#6562, май 2023), использовалась тема "Новини України" от ukraine_news@meta.ua с контентом-приманкой из издания NV. Внутри HTML-тела - эксплойт для CVE-2020-35730.

По данным NVD, CVE-2020-35730 - XSS в Roundcube Webmail до версий 1.2.13, 1.3.16 и 1.4.10 (CWE-79), включена в CISA KEV как активно эксплуатируемая. Атакующий отправляет plain text email с JavaScript в link reference element, который некорректно обрабатывается функцией linkref_addindex в rcube_string_replacer.php. CVSS 6.1 (MEDIUM), вектор CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N. Для срабатывания пользователю достаточно открыть письмо в web-интерфейсе. Кликать никуда не нужно.

Предусловия:
  • Работает если: Roundcube ниже 1.2.13 / 1.3.16 / 1.4.10, пользователь просматривает письмо в Roundcube Webmail, письмо не отфильтровано спам-фильтром
  • Не работает если: настроен Content Security Policy с script-src 'self', Roundcube обновлён, HTML-рендеринг отключён
По данным CERT-UA (предположительно advisory CERT-UA#6562), целевая инфраструктура использовала Roundcube 1.4.1. Патч для CVE-2020-35730 был доступен с декабря 2020 года - за два с половиной года до успешной атаки. По классификации OWASP это Vulnerable and Outdated Components (A06:2021). Конфигурация без CSP-заголовков и с открытым webmail на устаревшей версии - Security Misconfiguration (A05:2021). Два с половиной года на установку патча. Не успели.

CISA добавила CVE-2020-35730 в каталог KEV 22 июня 2023. CISA SSVC Decision: Attend. EPSS-score 0.3282, percentile 0.9817 (Top 5%).

В 2024 году APT28 перешла на более свежую XSS - CVE-2023-43770 (CVSS 6.1, CWE-79, включена в CISA KEV, SSVC Decision: Attend), затрагивающую Roundcube до 1.4.14, 1.5.x до 1.5.4 и 1.6.x до 1.6.3. Механика та же: crafted links в text/plain email через rcube_string_replacer.php. EPSS 0.5848, percentile 0.99 - один из самых высоких показателей для XSS в webmail.

CVE-2021-44026 - SQLi для эксфильтрации базы данных​

После XSS-выполнения подгружается скрипт q.js, эксплуатирующий CVE-2021-44026 - SQL-инъекцию через параметры search и search_params, включённую в CISA KEV. CVSS 9.8 (CRITICAL), CWE-89. Затрагивает Roundcube до 1.3.17 и 1.4.x до 1.4.12.

Вектор CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. CISA SSVC Decision: Act - патчить немедленно, Technical Impact: total, Automatable: yes. EPSS 0.4275 (Top 5%).

Через SQLi выгружается содержимое БД Roundcube: учётные записи, кэшированные сообщения, настройки. По OWASP - Injection (A03:2021). Связка XSS 6.1 + SQLi 9.8 - и вот у тебя уже не "средняя" уязвимость, а полный дамп почтовой базы.

CVE-2020-12641 - RCE через shell metacharacters​

Третий скрипт - c.js - содержит эксплойт для CVE-2020-12641: удалённое выполнение кода через shell metacharacters в im_convert_path или im_identify_path (обработка изображений в rcube_image.php). CVSS 9.8 (CRITICAL), CWE-78 (OS Command Injection). Затрагивает Roundcube Webmail до 1.4.4. EPSS 0.8446 - Top 1%.

Тут происходит переход от client-side JavaScript в браузере к server-side shell на почтовом сервере. CISA SSVC: Act - патчить немедленно. Добавлен в KEV 22 июня 2023 с дедлайном устранения 13 июля 2023.

Для Nuclei доступен готовый темплейт проверки: http/cves/2020/CVE-2020-12641.yaml.
Bash:
# проверка собственного Roundcube на CVE-2020-12641
nuclei -t http/cves/2020/CVE-2020-12641.yaml -u https://mail.example.com

Расширение на MDaemon и Zimbra​

По данным ESET, в 2024 году Operation RoundPress расширилась за пределы Roundcube:

ПлатформаCVECVSSТипСтатус при эксплуатации
RoundcubeCVE-2020-357306.1 (MEDIUM)XSS, CWE-79N-day, патч с 2020
RoundcubeCVE-2023-437706.1 (MEDIUM)XSS, CWE-79N-day, патч с 2023
MDaemonCVE-2024-111825.3 (MEDIUM, CVSS 4.0)XSS, CWE-79Zero-day
ZimbraCVE-2025-663767.2 (HIGH)Stored XSS через CSS @import, CWE-79N-day

CVE-2024-11182 - единственный zero-day в связке. ESET обнаружила его 1 ноября 2024, патч вышел 14 ноября в MDaemon 24.5.1. По NVD, атакующий отправляет HTML-письмо с JavaScript в теге img. По данным ESET, конкретная механика обхода парсера - использование тега noembed внутри атрибута title элемента p для рендеринга img с вредоносным onerror. CISA SSVC: Act.

CVE-2025-66376 в Zimbra (Zimbra Collaboration 10 до 10.0.18 и 10.1 до 10.1.13) - stored XSS через CSS @import директивы в HTML-письме. CVSS 7.2 (HIGH). По данным SecPod (Operation GhostMail), эксплойт срабатывает при просмотре письма в Classic UI Zimbra без действий пользователя.

Анатомия JavaScript implant: SpyPress и Roundish toolkit​

1784487782497.webp

Шесть операций за одно срабатывание XSS​

По данным Hunt.io (Operation Roundish) и ESET (Operation RoundPress), JavaScript implant выполняет до шести операций за одну XSS-инъекцию. Разберём каждую.

Credential harvesting - инъекция скрытых полей username/password с visibility:hidden и autocomplete=on. При любом клике пользователя перехватываются значения, автозаполненные менеджером паролей браузера. Техника специфична - в стандартных XSS-фреймворках я такого не встречал.

Mail forwarding - скрипт addRedirectMailBox.js создаёт правило пересылки на контролируемый адрес. Ранее - на Skiff (закрыт после поглощения Notion, февраль 2024), затем - на ProtonMail (advenwolf@proton.me). Это persistence без бэкдора: даже после патчинга XSS входящие письма продолжают пересылаться. Изящно.

Email exfiltration - выгрузка писем через Roundcube API viewsource с base64-кодированием и HTTP POST на C2.

Address book theft - полный дамп контактов для построения графа связей и подготовки дальнейших spear phishing кампаний.

2FA extraction - модуль keyTwoAuth.js извлекает TOTP-секреты и создаёт application passwords для обхода MFA. Задокументировано ESET для SpyPress.MDAEMON. Вот почему TOTP - не серебряная пуля.

CSS side-channel - модуль CSS-инъекции реализует атаку на основе CSS-селекторов для пошагового извлечения CSRF-токенов. Техника основана на опубликованных исследованиях @cgvwzq и ранее не атрибутировалась APT28 в публичных отчётах.

Trade-off: SpyPress vs стандартные XSS-тулкиты

КритерийSpyPress / RoundishBeEF / стандартный XSS toolkit
PersistenceMail forwarding rule, живёт после патчаТолько в рамках сессии браузера
ДетектируемостьМинимальная: JS в email, нет файлов на дискеСредняя: beacon, WebSocket-соединения
Зависимость от UIОткрытие письма в webmailВизит на контролируемую страницу
2FA bypassИзвлечение TOTP-секретов, app passwordsНет нативной поддержки
Lateral movementЧерез украденные credentialsОграничен контекстом браузера
Когда эффективноTargeted espionage, долгосрочный сборRed Team demo, массовые assessment
Когда неэффективноMass scanning (XSS per-target)Нужен server-side доступ

На реальном проекте выбор между BeEF и кастомным implant'ом зависит от задачи. Для демонстрации XSS заказчику - BeEF хватит. Для длительного доступа к переписке - подход APT28 с mail forwarding rule объективно лучше: он переживает патчинг уязвимости.

OPSEC-провал APT28: разбор ошибок оператора​

Что было на открытом сервере​

Сервер 203.161.50.145 (порт 8889) содержал, по данным Hunt.io:

Bash history оператора - команды curl mail.dmsu.gov.ua (разведка Roundcube Государственной миграционной службы Украины), SSH к пивот-серверу на Oracle Cloud - 130.61.233.105, Франкфурт, активен с декабря 2022.

Директория senderRB/ - специально создана для кампании против ДМСУ.

Go-имплант httd - Linux-бинарник с persistence через cron (ежеминутный запуск от root), systemd service и обход SELinux.

archive.tar - 1070 файлов, полный исходный код Next.js приложения blog.pentagonteam.com (эксфильтрированные данные жертвы), включая .env.local с Telegram bot token, четырьмя Telegram chat ID, AWS VPC IP (172.31.42.211) и Sentry credentials.

PDF-артефакт - файл Adob_Scan_15_ian._2025.pdf с румынскими датами (ian. = ianuarie).

Разбор ошибок с точки зрения Red Team оператора​

Открытый directory listing на staging-сервере. Web-сервер на порту 8889 без аутентификации. Отладочный инстанс, который забыли закрыть. На Red Team операциях аналог - оставить Cobalt Strike teamserver с открытым 50050 портом без iptables rules. Бывает. Но не должно.

Bash history не очищена. Оператор не использовал HISTFILE=/dev/null или set +o history. Для Red Team это первое действие при подключении к любому серверу инфраструктуры. Первое. До всего остального.

Эксфильтрированные данные рядом с тулкитом. Данные жертвы на одном сервере с C2-инструментарием. Принцип разделения (staging, C2, exfil - разные хосты) нарушен. На практике я видел, как команды из-за спешки складывают всё на один VPS. Итог всегда один - если сервер находят, находят всё сразу.

Долгоживущая инфраструктура. SSH к Oracle Cloud серверу, активному с 2022 года, создаёт устойчивые IoC для threat intelligence. Группировка исторически переиспользует инфраструктуру: по данным Qianxin и Recorded Future [требует проверки конкретных отчётов], инфраструктура Roundcube-кампании 2023 года предположительно пересекалась с инфраструктурой кампании по CVE-2023-23397 (Microsoft Outlook Elevation of Privilege, CWE-294, NTLM Relay, CVSS 9.8).

Детекшн: MITRE ATT&CK и Sigma-правила​

Маппинг ключевых техник​

ТактикаТехникаIDКонтекст кампании
ReconnaissanceVulnerability ScanningT1595.002Сканирование Roundcube-инстансов
ReconnaissancePhishing for InformationT1598Спир-фишинг через Signal для идентификации целей
Resource DevelopmentDomainsT1583.001Регистрация C2-доменов: zhblz.com, fountainrate.com
Resource DevelopmentServerT1583.004VPS у GLOBALAXS, 23VNet, Belcloud, M247
Resource DevelopmentWeb ServicesT1583.006Использование Icedrive и Koofr для C2

Что мониторить на стороне защиты​

Из SigmaHQ применимы два правила:
  • net_dns_external_service_interaction_domains.yml - DNS-запросы к внешним сервисам (T1595.002)
  • proc_creation_win_susp_open_html_file_from_download_folder.yml - открытие HTML из папки загрузок (T1598)
Специфично для webmail-атак - и это стоит добавить в мониторинг, если у вас Roundcube:
  • Создание mail forwarding rules на внешние адреса (ProtonMail, Tutanota) - проверять через прямой запрос к БД Roundcube
  • Аномальные HTTP POST от Roundcube к внешним IP с base64 в теле
  • DNS-запросы с почтового сервера к нетипичным доменам
  • Изменения im_convert_path / im_identify_path в конфигурации Roundcube
SQL:
-- проверка подозрительных правил пересылки в БД Roundcube
SELECT user_id, name, action FROM filters
WHERE action LIKE '%redirect%' OR action LIKE '%forward%';
Если этот запрос вернул что-то с proton.me или tutanota - у вас проблема.

Чеклист защиты Roundcube-инфраструктуры​

Чеклист для передачи сисадмину или включения в отчёт по аудиту:
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

Кампании APT28 против webmail - не история про zero-day и гениальную разработку. Из всей цепочки CVE только одна была zero-day (CVE-2024-11182 в MDaemon). Остальные - N-day уязвимости с патчами, доступными от полугода до трёх лет. CVE-2020-12641 с EPSS 0.8446 (Top 1%) была пропатчена за три года до эксплуатации. По данным IBM X-Force, среднее время между публикацией CVE и устранением в организации - 29 месяцев. APT28 стабильно бьёт в этот зазор.

Для пентестера урок двойной. Если тестируете инфраструктуру с Roundcube/Zimbra/Horde - проверка версии и наличия CSP должна быть в первых пяти шагах recon. XSS с CVSS 6.1 в связке с SQLi 9.8 и RCE 9.8 даёт полный контроль: от чтения переписки до shell на сервере. А OPSEC-провал APT28 с открытым каталогом - напоминание, что даже операторы с государственным бюджетом забывают HISTFILE=/dev/null и оставляют directory listing на staging-серверах. Дисциплина инфраструктуры деградирует при масштабировании операций, и это касается Red Team в той же мере. Одноразовая инфраструктура, разделение C2 и exfil, очистка артефактов - не паранойя, а операционная гигиена. Без неё атрибуция - вопрос времени.

Запустите nuclei -t http/cves/2020/CVE-2020-12641.yaml на своём Roundcube. Если он ответит - у вас та же проблема, что была у ДМСУ.
 
Последнее редактирование:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab