В январе 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 и токены сессий - доступ к смежным сервисам без повторной аутентификации
- Правило пересылки на контролируемый ящик - пассивный сбор всей входящей почты без повторной эксплуатации
Kill chain кампании укладывается в шесть шагов: spear phishing с XSS-эксплойтом в теле письма -> выполнение JavaScript implant в контексте браузера жертвы -> credential harvesting и email exfiltration -> создание скрытого правила пересылки (persistence) -> SQLi для дампа базы данных Roundcube -> RCE для получения shell на сервере (если нужен lateral movement).
Kill chain: от XSS-письма до shell на сервере
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-рендеринг отключён
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:| Платформа | CVE | CVSS | Тип | Статус при эксплуатации |
|---|---|---|---|---|
| Roundcube | CVE-2020-35730 | 6.1 (MEDIUM) | XSS, CWE-79 | N-day, патч с 2020 |
| Roundcube | CVE-2023-43770 | 6.1 (MEDIUM) | XSS, CWE-79 | N-day, патч с 2023 |
| MDaemon | CVE-2024-11182 | 5.3 (MEDIUM, CVSS 4.0) | XSS, CWE-79 | Zero-day |
| Zimbra | CVE-2025-66376 | 7.2 (HIGH) | Stored XSS через CSS @import, CWE-79 | N-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
Шесть операций за одно срабатывание 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 / Roundish | BeEF / стандартный XSS toolkit |
|---|---|---|
| Persistence | Mail 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 | Контекст кампании |
|---|---|---|---|
| Reconnaissance | Vulnerability Scanning | T1595.002 | Сканирование Roundcube-инстансов |
| Reconnaissance | Phishing for Information | T1598 | Спир-фишинг через Signal для идентификации целей |
| Resource Development | Domains | T1583.001 | Регистрация C2-доменов: zhblz.com, fountainrate.com |
| Resource Development | Server | T1583.004 | VPS у GLOBALAXS, 23VNet, Belcloud, M247 |
| Resource Development | Web Services | T1583.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)
- Создание 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%';
Чеклист защиты 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. Если он ответит - у вас та же проблема, что была у ДМСУ.
Последнее редактирование: