Специалисты Horizon3.ai 7 октября выложили в открытый доступ рабочий эксплойт для уязвимости CVE-2026-102489 в Zammad, открытой системе обработки заявок и техподдержки. Код сперва добывает идентификаторы сессий у всех, кто подключён к сервису, затем захватывает учётную запись администратора и выполняет произвольные команды на сервере от имени системного пользователя zammad. Уязвимость относят к критическому уровню опасности, и её уже использовали в реальной атаке на инфраструктуру нидерландского Института раскрытия уязвимостей (DIVD) в сентябре.
Уязвимость CVE-2026-102489
Атака начинается с WebSocket-подключения, через которое Zammad держит постоянный канал связи с браузерами сотрудников. Приложение хранит сведения обо всех подключённых клиентах в общей структуре, и туда попадают заголовки запросов вместе с сессионными cookie. Достаточно отправить специально сформированное событие, чтобы система обратилась к базовому обработчику, у которого нет нужного метода. Вместо аккуратного сообщения об ошибке сервер возвращает отправителю внутреннее состояние объекта. Так утекают cookie всех, кто в этот момент держит соединение открытым.
Авторы эксплойта прямо оговаривают условие: на момент эксплуатации к WebSocket должен быть подключён хотя бы один авторизованный пользователь. Без живого соединения утечка не сработает. Зато при удачном стечении обстоятельств в ответе оказываются и сессионные идентификаторы администраторов.
Дальше атакующему остаётся подменить свою сессию на чужую. Через штатный механизм установки пакетов он записывает собственные файлы в каталог приложения. В опубликованном PoC (proof-of-concept, демонстрационный код, подтверждающий эксплуатацию) подменяется шаблон письма для сброса пароля. Шаблон отрисовывается на стороне сервера, поэтому запрос на сброс пароля для любого пользователя запускает встроенный в него код на Ruby. Уязвимость раскрытия информации превращается в выполнение команд. После срабатывания эксплойт удаляет установленный пакет, чтобы сократить число заметных следов.
История вокруг этой уязвимости началась раньше публикации кода. Взлом DIVD вскрылся 21 сентября, а подозрительную активность в инфраструктуре зафиксировали на следующий день. Первичный доступ организация связала с двумя уязвимостями нулевого дня. Первая из них и стала предметом публикации Horizon3.ai. Вторая, CVE-2026-102490, повышает привилегии от пользователя zammad до root и остаётся без исправления. Именно поэтому исследователи не раскрывают её детали.
DIVD описала произошедшее как атаку с участием автономных ИИ-агентов, опираясь на артефакты и скрипты, оставленные злоумышленниками. Расследование продолжается, связи с известной группировкой пока не установлено. Сегментация сети и действия группы реагирования ограничили продвижение по инфраструктуре. При этом без последствий не обошлось: под удар попали данные волонтёров, включая адреса электронной почты и, вероятно, контактные сведения.
Уязвимая цепочка работает в версиях Zammad от 6.3.0 до 6.5.4. В сборках с 7.0.0 по 7.1.3 ошибка присутствует, но при условиях, с которыми столкнулся DIVD, не эксплуатируется. Вторая уязвимость затрагивает диапазон от 1.5.0 до 7.1.0-alpha. Число установок Zammad в мире измеряется тысячами, и среди них много служб поддержки в госсекторе и компаниях среднего размера, где утечка переписки и доступ к внутренним данным обходятся дорого.
Пока исправление для второй уязвимости не появилось, защита сводится к нескольким шагам. Прежде всего администраторам стоит обновить Zammad до версии вне уязвимого диапазона, как только разработчики подтвердят, что ошибка закрыта. Полезно ограничить прямой доступ к сервису из интернета, поставив его за VPN (virtual private network, защищённое туннельное подключение) или за сегмент сети с фильтрацией трафика. Затем надо проверить журналы ошибок на предмет утёкших сессионных cookie: DIVD выпустила для этого отдельный скрипт поиска индикаторов компрометации. Если следы утечки найдутся, активные сессии придётся отозвать, а пароли администраторов сменить. Отдельно стоит убедиться, что права на установку пакетов есть только у тех учётных записей, которым они действительно нужны.
Опасность этой связки в том, что баг раскрытия информации сам по себе выглядит умеренной проблемой. Ошибка в обработке события не даёт доступа к файлам и не позволяет выполнить команду напрямую. Однако в Zammad возможности администратора устроены так, что запись файлов в каталог приложения и отрисовка шаблонов на сервере превращают угон сессии в полный контроль над сервером. Промежуточное звено здесь одно: живое подключение привилегированного пользователя. Крупные службы поддержки почти всегда держат такие соединения открытыми - операторы работают в веб-интерфейсе постоянно. Значит, окно для атаки существует почти всё рабочее время.
Публикация рабочего кода меняет расклад для тех, кто ещё не закрыл уязвимость. Раньше эксплуатировать её могли только те, кто разобрался в механике утечки самостоятельно. Теперь готовый инструмент с понятным набором параметров доступен любому. Учитывая, что вторую уязвимость в цепочке ещё не исправили, полный путь от внешнего запроса до root остаётся открытым. Наблюдение за журналами и отзыв сессий дают лишь время, а не защиту.
Ссылки
- https://github.com/horizon3ai/CVE-2026-102489
- https://horizon3.ai/attack-research/disclosures/cve-2026-102489-zammad-session-leak-rce/