Проект Exim выпустил экстренное обновление безопасности, устраняющее уязвимость CVE-2026-45185 класса use-after-free, которая приводит к повреждению кучи и потенциально позволяет выполнить произвольный код на почтовом сервере. Уязвимость затрагивает все версии Exim с 4.97 по 4.99.2 включительно, собранные с поддержкой GnuTLS (параметр сборки USE_GNUTLS=yes). Для эксплуатации атакующему достаточно установить TLS-соединение и использовать расширение SMTP CHUNKING (BDAT) — специальная конфигурация сервера не требуется. Исправление доступно в версии 4.99.3, альтернативных мер смягчения не существует, и администраторам необходимо обновиться немедленно.
Механизм уязвимости
Согласно официальному бюллетеню безопасности Exim, уязвимость возникает при обработке тела сообщения, передаваемого через команду BDAT, когда клиент отправляет TLS-уведомление close_notify до завершения передачи данных, а затем посылает финальный байт открытым текстом в том же TCP-соединении. Эта последовательность приводит к тому, что Exim записывает данные в буфер памяти, уже освобождённый при завершении TLS-сессии, что вызывает повреждение кучи (heap corruption).
По данным исследователя Федерико Киршбаума из компании XBOW, обнаружившего уязвимость, при завершении TLS-сессии Exim освобождает буфер передачи, однако вложенный обработчик приёма BDAT продолжает обрабатывать входящие байты и вызывает функцию ungetc(), которая записывает один символ (\n) в уже освобождённую область памяти. Этот однобайтовый записью попадает на метаданные аллокатора, нарушая его внутреннюю структуру, что, предположительно, позволяет атакующему получить дополнительные примитивы для дальнейшей эксплуатации.
Затронутые версии и условия эксплуатации
- Затронутые версии: Exim 4.97 — 4.99.2 включительно
- Условие: сборка с параметром
USE_GNUTLS=yes - Не затронуты: сборки, использующие OpenSSL или другие TLS-библиотеки
- Требования к атакующему: возможность установить TLS-соединение и использовать расширение CHUNKING (BDAT)
- Исправленная версия: Exim 4.99.3
- Статус эксплуатации: данных об активной эксплуатации в реальных атаках на момент публикации нет; уязвимость не внесена в каталог CISA KEV
Почему эта уязвимость особенно опасна
Exim — один из наиболее распространённых агентов передачи почты (MTA) на Unix-подобных системах. Почтовые серверы по своей природе доступны из интернета и принимают входящие соединения от произвольных клиентов, что делает их привлекательной целью. Барьер для эксплуатации CVE-2026-45185 крайне низок: атакующему не нужна аутентификация, не требуется нестандартная конфигурация сервера — достаточно стандартного TLS-соединения с поддержкой BDAT, которая включена по умолчанию в современных версиях Exim.
Отдельного внимания заслуживает то, что уязвимость привязана к конкретной TLS-библиотеке. Многие дистрибутивы Linux предоставляют пакеты Exim, собранные именно с GnuTLS (например, Debian и его производные традиционно используют GnuTLS). Администраторам следует проверить, с какой TLS-библиотекой собран их экземпляр Exim, выполнив команду exim -bV и обратив внимание на строку, указывающую TLS-библиотеку.
Исторический контекст
Это не первый случай обнаружения критических уязвимостей use-after-free в Exim, связанных с обработкой BDAT. В 2017 году была исправлена уязвимость CVE-2017-16943 (CVSS 9.8) в SMTP-демоне, которая, по данным исследователей, позволяла неаутентифицированным атакующим добиться удалённого выполнения кода через специально сформированные команды BDAT. Повторное появление уязвимости того же класса в том же компоненте спустя девять лет указывает на системную сложность безопасной обработки состояний при взаимодействии TLS и потокового приёма данных в кодовой базе Exim.
Рекомендации
- Немедленно обновите Exim до версии 4.99.3. Согласно бюллетеню, обходных мер или временных исправлений конфигурации, устраняющих уязвимость, не существует.
- Определите используемую TLS-библиотеку: выполните
exim -bV | grep TLS. Если в выводе указан GnuTLS — ваш сервер уязвим. - Проведите аудит доступности SMTP-сервера из интернета. Ограничьте доступ к порту 25/465/587 на уровне межсетевого экрана, если это возможно без нарушения работы почтовой инфраструктуры.
- Проверьте журналы на предмет аномальных TLS-сессий с преждевременным завершением в сочетании с командами BDAT — это может указывать на попытки эксплуатации.
- Рассмотрите пересборку с OpenSSL как временную меру, если оперативное обновление до 4.99.3 невозможно — сборки с OpenSSL не подвержены данной уязвимости.
Исправление в версии 4.99.3 обеспечивает корректный сброс стека обработки ввода при получении TLS-уведомления close_notify во время активной передачи BDAT, предотвращая использование устаревших указателей. Учитывая отсутствие альтернативных мер защиты, низкий барьер эксплуатации и публичную доступность технических деталей уязвимости, обновление Exim до версии 4.99.3 следует рассматривать как задачу наивысшего приоритета для всех организаций, использующих этот MTA с GnuTLS.