Исследователи из компании SEC Consult опубликовали новую технику спуфинга, вызванную расхождениями в следовании спецификации в различных реализациях протокола SMTP. Предложенная техника атаки позволяет расщепить одно сообщение на несколько разных сообщений при его передаче исходным SMTP-сервером на другой SMTP-сервер, по иному трактующий последовательность для разделения писем, передаваемых через одно соединение. Метод может использоваться для отправки фиктивных писем от имени других отправителей в почтовых сервисах, верифицирующих исходного отправителя.
Проблема вызвана тем, что разные SMTP-серверы по-разному трактуют последовательность окончания данных, что может приводить к разделению одного письма на несколько в рамках одного сеанса к SMTP-серверу. В спецификации для маркировки окончания передачи письма определена последовательность «\r\n.\r\n» (точка, обрамлённая символами возврата каретки и перевода строки). После этой последовательности могут следовать команды для передачи другого письма без разрыва соединения. Одни SMTP-серверы строго следуют предписанию, но другие, для обеспечения совместимости с некоторыми редкими почтовыми клиентами, обрабатывают в качестве разделителя и такие последовательности, как «\n.\n», «\n.\r\n», «\r\n.\n», «\r.\r» и «\r\n\0.\r\n».
Атака сводится к тому, что на первый сервер, который обрабатывает только разделитель «\r\n.\r\n» отправляется письмо, в теле которого присутствует альтернативный разделитель, например, «\r.\r», следом за которым следуют команды отправки второго сообщения. Так как первый сервер строго следует спецификации, он обрабатывает полученную последовательность как одно письмо. Если далее письмо направляется на транзитный сервер или сервер получателя, который дополнительно воспринимает последовательность «\r.\r» как разделитель, оно будет обработано как два отдельно отправленных письма (второе письмо может быть отправлено от имени пользователя, не аутентифицированного через «AUTH LOGIN», но выглядеть как корректное на стороне получателя).
В качестве примеров SMTP-серверов и служб, допускающих альтернативные разделители отмечены Postfix, Sendmail, MS Exchange Online и Cisco Secure Email Gateway, а среди почтовых сервисов не фильтрующих некорректные разделители из писем при обращении к другим серверам, — GMX, iСloud и Microsoft Outlook.
Для блокирования проблемы в Postfix в выпуски 3.8.1, 3.7.6, 3.6.10 и 3.5.20 добавлена настройка «smtpd_forbid_unauth_pipelining«, приводящая к разрыву соединения в случае использования разделителей, не соответствующих требованиям RFC 2920 и RFC 5321. В настоящее время по умолчанию данная настройка отключена, но её планируют активировать по умолчанию в ветке Postfix 3.9, которая ожидается весной 2024 года. В ветке 3.9 также будет включена настройка smtpd_forbid_bare_newline, выводящая ошибку при использовании только символа перевода строки («\n») для разделения строк, что нарушает RFC 5321.
В готовящемся выпуске Sendmail 8.18.0.2 для защиты от атаки в srv_features предложена опция ‘o’, включающая обработку только последовательности «\r\n.\r\n». Отмечается, что отключение поддержки альтернативных разделителей может нарушить работу некоторых редких почтовых клиентов, не полностью соответствующих спецификации SMTP.
Дополнение 1: Сформированы обновления postfix 3.8.4, 3.7.9 и 3.6.13, в которых добавлена отключённая по умолчанию настройка smtpd_forbid_bare_newline, запрещающая использование символа перевода строки («\n») для разделения строк без символа возврата каретки («\r»). Также добавлен параметр smtpd_forbid_bare_newline_exclusions, позволяющий отключить ограничение поддержки «\n» для клиентов локальной сети (разделитель «\n», например, может применяться при обращении через netcat, в факс-машинах и при проверках работоспособности балансировщиками нагрузки).
Дополнение 2: Уязвимости назначены CVE-идентификаторы: CVE-2023-51764 для postfix и CVE-2023-51765 для sendmail.
Дополнение 3: Проблема также затрагивает SMTP-сервер Exim (CVE-2023-51766), который при включении расширения «pipelining» (pipelining_advertise_hosts, pipelining_connect_advertise_hosts) и отключении или не использовании расширения «chunking» (chunking_advertise_hosts) обрабатывает последовательность «\n.\n» в качестве разделителя сообщений.
Источник: https://www.opennet.ru/opennews/art.shtml?num=60329