Разработчики почтового сервера Exim выпустили экстренное обновление версии 4.99.1, устраняющее опасную уязвимость переполнения буфера в куче (heap buffer overflow). Проблема, получившая идентификатор CVE-2025-67896, затрагивает сборки с поддержкой SQLite и может привести к повреждению памяти и потенциально удаленному выполнению кода (RCE). Кроме того, исследователи обнаружили новый вектор для эксплуатации ранее исправленной уязвимости SQL-инъекции (CVE-2025-26794), который может использоваться как начальное звено для атаки.
Детали уязвимостей
Уязвимость CVE-2025-67896 представляет собой переполнение буфера в куче. Она существует в коде, отвечающем за работу с внутренней базой данных подсказок (Hints DB) на основе SQLite. Эта база данных используется для хранения временной информации, состояния доставки сообщений и сведений об интенсивности отправки. Проблема возникает при обработке записей, связанных с ограничением скорости отправки (ratelimit). Конкретно, код напрямую преобразует данные из базы данных во внутреннюю структуру "dbdata_ratelimit_unique" без должной проверки.
В уязвимой структуре существует фиксированный массив "bloom" размером 40 байт. Однако размер данных, записываемых в этот массив, контролируется полем "bloom_size", значение которого считывается из базы данных без какой-либо валидации. В результате злоумышленник, имеющий возможность модифицировать запись в базе данных, может установить значение "bloom_size" значительно больше 40. Последующий код, использующий это поле для определения границ массива, начнет записывать данные за пределами выделенного буфера, вызывая повреждение кучи.
Для успешной атаки необходимо сочетание нескольких условий. Во-первых, Exim должен быть собран с поддержкой SQLite ("USE_SQLITE=yes"), и эта база данных должна быть активирована в конфигурации ("hints_database = sqlite"). Во-вторых, в конфигурационных списках контроля доступа (ACL) должны использоваться определенные параметры "ratelimit", а именно "unique" или "per_addr" с явным указанием ключа, например "$sender_address". Именно через этот ключ атакующий может внедрить вредоносные (malicious) данные.
Отдельно исследователи обратили внимание на уязвимость CVE-2025-26794, связанную с внедрением SQL-кода. Исправление, выпущенное в феврале в версии Exim 4.98.1, оказалось неполным. Патч не экранировал одиночные кавычки в функции "xtextencode()". Это позволяет злоумышленнику обойти защиту, используя специально сформированные адреса в команде "MAIL FROM". В частности, адрес вида "<"x'//UNION//SELECT//X'<hex_blob>'--"@attacker.com>" может привести к выполнению произвольного SQL-запроса.
Важно отметить, что эта SQL-инъекция создает условия для эксплуатации переполнения буфера. С её помощью атакующий может записать в базу данных специально подготовленную запись с аномально большим значением "bloom_size". Таким образом, две уязвимости образуют опасную цепочку: сначала внедрение SQL позволяет поместить вредоносную нагрузку (payload) в базу, а затем переполнение буфера использует эти данные для повреждения памяти.
По словам исследователя Эндрю Фазано из Национального института стандартов и технологий (NIST), ему удалось продемонстрировать управляемое повреждение кучи, но создать полностью рабочий эксплоит для удаленного выполнения кода не получилось. Тем не менее, теоретическая возможность остается. Основным препятствием для полной эксплуатации является необходимость обхода современных защит, таких как рандомизация адресного пространства (ASLR).
Уязвимые версии Exim - это 4.99 и 4.98.2. Проблема затрагивает ряд популярных дистрибутивов, включая Debian 13, Ubuntu 25.10, openSUSE, Arch Linux, Fedora и FreeBSD, где эти версии используются по умолчанию или доступны в репозиториях. Дистрибутивы на основе RHEL, такие как CentOS или Rocky Linux, не подвержены уязвимости, поскольку Exim не входит в их основные репозитории.
Администраторам настоятельно рекомендуется как можно скорее обновить Exim до версии 4.99.1. В качестве временной меры можно отключить использование SQLite в качестве базы данных подсказок или пересмотреть конфигурации ACL, убрав параметры "unique" и "per_addr" с явными ключами на основе данных от отправителя. Также следует проверить вывод команды "exim -bV". Наличие строки "Hints DB: Using sqlite3" в сочетании с уязвимыми параметрами "ratelimit" указывает на подверженность атаке.
Данный инцидент подчеркивает важность тщательной проверки входных данных, особенно при взаимодействии с такими компонентами, как базы данных. Даже частичное исправление уязвимости может оставить лазейку для новых векторов атаки, что и произошло с CVE-2025-26794. Координация между исследователями безопасности и разработчиками, как в данном случае, остается ключевым фактором для своевременного устранения угроз.
Ссылки
- https://www.cve.org/CVERecord?id=CVE-2025-67896
- https://www.cve.org/CVERecord?id=CVE-2025-26794
- https://security-tracker.debian.org/tracker/CVE-2025-67896
- https://www.exim.org/static/doc/security/EXIM-Security-2025-12-09.1/report.txt
- https://exim.org/static/doc/security/