ESET представила хороший отчёт по операции RoundPress, где ребята, предположительно из APT28, с наглой уверенностью ковыряют почтовые веб-серверы через XSS-уязвимости. Цель - стара как мир: утащить конфиденциальные данные из ящиков интересных личностей.
Основные моменты:
- Вектор атаки: Целевое фишинговое письмо. Открываешь в веб-интерфейсе - получаешь инъекцию зловредного JavaScript.
- Мишени: В 2023-м лупили только по Roundcube. В 2024-м аппетиты выросли: Horde, MDaemon, Zimbra тоже под прицелом.
- Горяченькое: Для MDaemon хакеры использовали уязвимость нулевого дня (0-day XSS). ESET зарепортили ее 1 ноября 2024, и ее прикрыли в версии 24.5.1 (CVE-2024-11182).
- География: В основном госсектор и оборонка в Восточной Европе (особенно Украина). Но также засветились цели в Африке, остальной Европе и Южной Америке.
- Инструментарий: Семейство JavaScript-зловредов SpyPress (.HORDE, .MDAEMON, .ROUNDCUBE, .ZIMBRA). Умеют тырить учетки, контакты, письма. SpyPress.MDAEMON даже двухфакторку обходит.
Как это работает: Цепочка компрометации
- Начальный доступ: Жертве прилетает письмо, выглядящее как новостная рассылка или что-то безобидное. Например, украинской цели - письмо от kyivinfo24@ukr[.]net с темой "СБУ схопила банкіра..." с выдержками из Kyiv Post. Болгарской - от office@terembg[.]com про Путина и Трампа со ссылками на News.bg.
В HTML-коде письма спрятан XSS-эксплойт. Если юзер открывает письмо в уязвимом веб-интерфейсе почты, скрипт выполняется в контексте его сессии. - Разбор эксплойтов:
- Roundcube (CVE-2023-43770): Использовали баг в rcube_string_replacer.php. При обработке URL для создания гиперссылок текст ссылки (то, что между квадратными скобками) недостаточно санитайзился. Это позволяло вставлять <script>...</script> прямо в страницу.
Пример эксплойта: [ссылка]<script> вредоносный_код </script>[текст] - MDaemon (0-day, CVE-2024-11182): Тут все хитрее. Уязвимость в рендеринге HTML в письмах. Эксплойт использует специально созданный элемент <img> в сочетании с багом в HTML-парсере MDaemon. Вставка закрывающего тега </noembed> внутрь атрибута title элемента <p> обманывала парсер, заставляя его рендерить следующий за ним тег <img> с вредоносным кодом в onerror.
Фрагмент эксплойта: <p title="... </noembed> ..."><img src=x onerror=eval(atob('...'))> - Zimbra (CVE-2024-27443 / ZBUG-3730): Уязвимость в обработке атрибута cif (calendar intended for) в календарных приглашениях. Значение этого атрибута бралось из заголовка письма X-Zimbra-Calendar-Intended-For и без должной санитайзации вставлялось на HTML-страницу.
Эксплойт в заголовке: X-Zimbra-Calendar-Intended-For: Zimbra Calendar<img/alt=''/src='Zimbra-Calendar'/onerror="window['eval'](window['atob'](frames[0].document.getElementById('a-cashed-skinLayout2')['innerText']))">
Скрипт читает base64-кодированный JS из скрытого div (с display:none) в теле приглашения и выполняет его. - Horde (неизвестный эксплойт, предположительно старый): Попытка использовать onerror в теге <img> с некорректным src=x. ESET предполагает, что Sednit тут либо допустили ошибку, либо целились в очень древние, непатченные версии, так как в актуальных версиях (даже в Horde Webmail 1.0 от 2007 года) on* атрибуты фильтровались.
Пример: <img src=x onerror=window.parent.eval(atob('...'))>
- Roundcube (CVE-2023-43770): Использовали баг в rcube_string_replacer.php. При обработке URL для создания гиперссылок текст ссылки (то, что между квадратными скобками) недостаточно санитайзился. Это позволяло вставлять <script>...</script> прямо в страницу.
JavaScript-нагрузки (семейство SpyPress)
Все четыре варианта (SpyPress.HORDE, .MDAEMON, .ROUNDCUBE, .ZIMBRA) имеют общие черты:
- Обфускация: Имена переменных и функций заменены на рандомные строки. Строки (URL, команды) зашифрованы и расшифровываются по мере использования.
- Нет персистентности/обновлений: Весь код в письме, выполняется при просмотре. Исключение – Sieve-правила в Roundcube.
- C&C: Общение через HTTP POST-запросы на зашитые адреса. Данные кодируются в Base64.
- SpyPress.HORDE:
- Воровство учетных данных: создает невидимые поля horde_user, horde_pass (width/opacity 0%), чтобы браузер/менеджер паролей их заполнил.
- SpyPress.MDAEMON (самый навороченный):
- Воровство учетных данных (аналогично Horde, поля User, Password).
- Эксфильтрация контактов и истории входов.
- Эксфильтрация писем (обходил папки, качал исходники писем, вел список скачанного).
- Обход 2FA:
- Кража секрета 2FA: Получал секрет (эквивалент QR-кода) для регистрации аккаунта в приложении-аутентификаторе. Требовался пароль, который уже был украден.
- Создание пароля приложения (App Password): Генерировал пароль приложения, который позволяет подключаться к ящику через почтовый клиент без 2FA-кода, даже если 2FA активна. MDaemon, похоже, не требовал 2FA для генерации App Password.
- SpyPress.ROUNDCUBE:
- Воровство учетных данных:
- Аналогично Horde (поля _user, _pass).
- Принудительный выход: создавал iframe, который разлогинивал жертву (/?_task=logout&_token=<CSRF_token>), заставляя заново вводить данные на подлинной форме входа, но с перехватчиком на кнопке submit. CSRF-токен брался из rcmail.env.request_token.
- Эксфильтрация адресной книги и страницы "О программе" (версия Roundcube, плагины).
- Эксфильтрация писем (раз в 2 часа, не более 150 писем за сессию, чтобы не шуметь).
- Создание Sieve-правил: Некоторые образцы создавали правило для пересылки копий всех входящих писем на ящик атакующих (например, srezoska@skiff[.]com). Это уже какая-никакая персистентность.
- Воровство учетных данных:
- SpyPress.ZIMBRA:
- Воровство учетных данных (аналогично Horde, поля username, password).
- Эксфильтрация контактов (через SOAP-запрос к /service/soap/SearchRequest) и настроек (содержимое глобальной переменной ZmSetting).
- Эксфильтрация писем (раз в 4 часа, первые 80 писем из каждой папки через SOAP-запрос, затем исходники через /service/home/~/?auth=co&view=text&id=<email_ID>).
Что в итоге?
Стабильно все. Веб-почтовики типа Roundcube и Zimbra – горячие цели для шпионских групп уже не первый год. Многие организации забивают на своевременные обновления, а уязвимости, которые можно триггернуть удаленно простым письмом, – это просто подарок для атакующих.