Zimbra: пять уязвимостей в учётных записях, включая обход лимита входа и чтение чужих ящиков

Rapid7 опубликовала первую часть разбора Zimbra Collaboration Suite: в ходе оценки найдено более 80 уязвимостей, и пять из них касаются учётных записей. Две ошибки позволяют обходить защиту от подбора пароля, одна даёт отправку писем от чужого имени, ещё одна открывает чужие ящики через EWS, а последняя обходит запрет пересылки через Sieve. Три исправлены в ZCS 10.1.17 и 10.1.20, для двух публичного фикса на момент публикации не было.

Что нашли

Обход лимита входа через GraphQL (CVE-2026-93637)

Zimbra ограничивает число неудачных входов по IP-адресу: ZimbraInvalidLoginFilter считает попытки, а после порога отвечает HTTP 503. Ошибка в том, что путь аутентификации через GraphQL не проходит через SoapEngine и не выставляет атрибут auth.failed, поэтому счётчик по IP не срабатывает. С помощью алиасов GraphQL один запрос к /service/extension/graphql может содержать до 100 вызовов authenticate с разными паролями, и все они остаются в одном HTTP-запросе для Jetty. В отчёте описан перебор 10 000 паролей менее чем за две минуты без блокировки источника.

Отдельная политика блокировки по учётной записи выключена по умолчанию, но если её включить, неудачные GraphQL-операции всё же увеличивают счётчик учётной записи. Публичного исправления на тот момент не было. Уязвимость требует только HTTPS-доступа к Zimbra и не обходит MFA, но резко упрощает перебор слабых и повторно использованных паролей.

Инъекция в фильтр LDAP (CVE-2026-93635)

В доменах с внешней LDAP-аутентификацией по search filter и ленивым автоматическим созданием учётных записей логин подставляется в фильтр без экранирования. Вход вида jdoe*@example.test попадает в LdapUtil.computeDn(), и если шаблон выбирает одну запись каталога, Zimbra проверяет пароль у этого пользователя. Неверный пароль даёт account.AUTH_FAILED, верный проходит LDAP bind и доходит до создания записи, поэтому ответы различаются и логин работает как оракул пароля. Wildcard-логин не совпадает с локальной учётной записью, и блокировке по учётной записи нечего учитывать. Ошибка применима только к описанной конфигурации с внешним LDAP; публичного исправления на момент публикации не было.

Подмена отправителя через SaveDraftRequest (CVE-2026-73571)

SaveDraftRequest имеет ветку делегированной отправки. На уязвимой сборке обычный пользователь может указать в поле From адрес другого локального пользователя: обработчик сопоставляет адрес с почтовым ящиком, берёт его контекст и вызывает обычную отправку, не проверяя право отправки от имени другого пользователя. Письмо уходит через доверенную инфраструктуру Zimbra, поэтому проходит SPF, DKIM и DMARC, а копия появляется в папке «Отправленные» жертвы. Цель должна быть на том же почтовом сервере, но не нужны ни делегирование, ни права администратора, ни действия жертвы. Исправлено в ZCS 10.1.17.

Чтение чужих ящиков через EWS (CVE-2026-10631)

Расширение EWS использует составные идентификаторы вида {ownerUUID}_{folderId}. В FindItem сервер доверяет UUID владельца из запроса и строит контекст авторизации из выбранного ящика, а не из учётной записи, от имени которой выполнен вход. Получается IDOR: обычный пользователь с включённым EWS может читать письма, вложения, черновики, контакты и календарь других локальных аккаунтов без разрешения на общий доступ. Достаточно, чтобы EWS был включён у атакующего: в интеграциях с Outlook его часто включают на уровне класса обслуживания. Целевой пользователь ничего не делает. Исправлено в ZCS 10.1.20.

Обход запрета пересылки через Sieve notify (CVE-2026-50055)

Параметр zimbraFeatureMailForwardingInFiltersEnabled=FALSE должен запрещать серверные правила пересылки. Zimbra отклоняет действие redirect, но пропускает notify, хотя через переменные в уведомление можно подставить заголовки и полный текст письма и отправить их на внешний адрес. Правило сохраняется в аккаунте и продолжает работать после смены пароля и истечения сессии, а в Modern Filters оно не отображается, поэтому владелец аккаунта не видит и не удаляет его через привычный интерфейс. Вложения и исходный MIME не пересылаются. Исправлено в ZCS 10.1.20.

Что делать

Обновиться до последней поддерживаемой сборки ZCS: CVE-2026-73571 закрыт в 10.1.17, CVE-2026-10631 и CVE-2026-50055 - в 10.1.20. Для CVE-2026-93635 и CVE-2026-93637 публичного фикса на момент публикации не было, поэтому нужно установить обновление Zimbra, как только оно выйдет.

Обновление не удаляет уже сохранённые правила фильтрации. Администраторам стоит проверить входящие и исходящие правила на actionNotify и RFC-совместимые notify с внешними адресами, а также просмотреть журналы EWS на операции, где встречаются два разных UUID аккаунтов. Если EWS не нужен, его лучше отключить. После компрометации сессий недостаточно сменить пароль: нужно проверить сохранённые правила, папку «Отправленные» и другие ящики, к которым мог быть доступ.

Ссылки

Комментарии: 0