Переводы строк в библиотеке net-imap для Ruby позволяют внедрить произвольные команды IMAP

vulnerability

Библиотека net-imap, входящая в состав языка программирования Ruby, формирует команды для почтовых серверов без проверки управляющих символов. Поэтому нарушитель может подставить в запрос собственную команду и выполнить её на чужом ящике. Уязвимость получила идентификатор CVE-2026-42257, её описание внесено в банк данных угроз безопасности информации под номером BDU:2026-15061. Оценки по методике CVSS, общей системе оценки уязвимостей, достигают 9,8 по версии 3.1 и 9,3 по версии 4.0. Оба значения соответствуют критическому уровню опасности.

Детали уязвимости

net-imap - клиентская библиотека, то есть набор готовых функций для подключения к почтовому ящику по протоколу IMAP, протоколу доступа к сообщениям электронной почты. Внутри него каждая команда завершается парой управляющих символов: возврат каретки и перевод строки, вместе они обозначаются как CRLF. Эти символы отделяют одну инструкцию от другой, поэтому сервер выполняет их по очереди. Библиотека обязана экранировать такие символы, если они встречаются в пользовательских данных, однако этого не делает. Из-за этого любая строка, попавшая в аргумент команды, способна разорвать её на части.

На практике атака выглядит так. Приложение передаёт в библиотеку имя почтовой папки, тему письма или поисковый запрос. Если внутри строки окажутся символы CRLF, то всё, что идёт после них, сервер воспримет как новую команду. Так работают внедрение команд (CWE-77) и внедрение CRLF (CWE-93), классы ошибок, при которых данные смешиваются с управляющими инструкциями. Злоумышленнику не нужны учётные данные, и участие пользователя тоже не требуется: базовый вектор уязвимости описывает удалённую эксплуатацию без привилегий и без взаимодействия с человеком. Успешная атака даёт полный контроль над конфиденциальностью, целостностью и доступностью почтового ящика в границах одной сессии.

Получив возможность дописывать команды, нарушитель способен читать и удалять письма, перенаправлять их, менять флаги и настройки ящика, а также отправлять сообщения от имени владельца. Речь идёт именно о командах почтового протокола, а не о выполнении произвольного кода на компьютере. Однако прав, которые даёт почтовый ящик, обычно достаточно для развития атаки: в переписке лежат документы, ссылки для восстановления паролей и внутренние контакты. Источником опасных данных может стать внешний сервис, чьи ответы приложение подставляет в команды.

Библиотеку используют почтовые клиенты, скрипты автоматической обработки писем, системы уведомлений и модули интеграции с корпоративными сервисами. Такой код обычно работает с правами обычного пользователя и видит ящик целиком. Поэтому одна ошибка в разборе строк открывает весь почтовый архив, а не отдельное сообщение. Протокол IMAP применяют для доступа к ящикам на сервере, и клиент отправляет туда команды обычным текстом. Текстовая природа протокола как раз и делает внедрение через управляющие символы возможным.

net-imap распространяется вместе с Ruby и входит в состав многих сборок операционных систем. Среди уязвимых платформ значатся выпуски Ubuntu с длительным сроком поддержки, включая самые свежие, несколько поколений Debian, Red Hat Enterprise Linux, Red Hat Hardened Images и РЕД ОС. Российская система РЕД ОС включена в единый реестр отечественного программного обеспечения, поэтому проблема касается в том числе организаций госсектора. Кроме того, библиотека нередко попадает в проекты как зависимость второго уровня, о которой разработчики не знают. Проверить её наличие можно в описании зависимостей приложения и в списке пакетов операционной системы.

Исправления вышли в версиях 0.4.24, 0.5.14 и 0.6.4. Они закрывают три ветки, где присутствовала ошибка: до 0.4.24, с 0.5.0 до 0.5.14 и с 0.6.0 до 0.6.4. Разработчикам стоит обновить библиотеку в проектах и заново собрать приложения, которые работают с почтой. Системным администраторам нужно дождаться пакетов от поставщика дистрибутива и установить их. Для РЕД ОС обновления лежат в репозиториях, для Ubuntu, Debian и Red Hat действуют собственные трекеры безопасности. Проверять стоит не только сам Ruby, но и приложения на нём, поскольку обновление языка не меняет код программ.

Пока пакеты не установлены, снизить риск помогает ограничение круга серверов, ответы которых попадают в команды, и отказ от подстановки внешних данных без проверки. Стоит также пересмотреть, какие именно внешние источники влияют на содержимое почтовых запросов. Полностью закрывает проблему только новая версия библиотеки.

Ошибки этого класса возникают регулярно, поскольку обработку управляющих символов часто считают второстепенной задачей. Клиентские библиотеки работают с почтой от имени пользователя, поэтому ошибка в разборе строк оборачивается потерей переписки. Внедрение команд через CRLF известно давно, однако в высокоуровневых языках оно возвращается снова и снова. Ответственность за проверку данных разработчики переносят между библиотекой и приложением, и на этой границе ошибки остаются незамеченными. Администраторам теперь приходится синхронизировать обновления сразу по нескольким веткам и следить за выпусками дистрибутивов.

Ссылки

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