Проблема вызвана ошибкой в коде, осуществляющем доставку почты на удалённый почтовый сервер (не в коде, обрабатывающем входящие соединения). Атака возможна как на стороне клиента, так и на стороне сервера. На стороне клиента атака возможна в конфигурации OpenSMTPD по умолчанию, в которой OpenSMTPD принимает запросы только на внутреннем сетевом интерфейсе (localhost) и отправляет почтовые сообщения на внешние серверы. Для эксплуатации уязвимости достаточно, чтобы в процессе доставки письма OpenSMTPD установил сеанс с почтовым сервером, подконтрольным атакующему, или чтобы атакующий мог вклиниться в соединение клиента (MITM или перенаправление в ходе атак через DNS или BGP).
Для атаки на стороне сервера необходимо, чтобы OpenSMTPD был настроен на приём внешних сетевых запросов от других почтовых серверов или обслуживал сторонние сервисы, позволяющие отправить запрос на произвольный email (например, формы подтверждения адреса на сайтах). Например, злоумышленник может соединиться с сервером OpenSMTPD и отправить некорректное письмо (несуществующему пользователю), которое приведёт к ответной отправке письма с кодом ошибки (bounce) на сервер атакующего. Злоумышленник может эксплуатировать уязвимость в момент, когда OpenSMTPD подсоединиться для доставки уведомления на сервер атакующего. Внедрённые в ходе атаки shell-команды помещаются в файл, который выполняется с правами root при перезапуске OpenSMTPD, поэтому атакующий для заверения атаки должен дождаться перезапуска OpenSMTPD или инициировать крах OpenSMTPD.
Проблема присутствует в функции mta_io() в коде для разбора многострочного ответа, возвращаемого удалённым сервером после установки соединения (например, «250-ENHANCEDSTATUSCODES» и «250 HELP»). В OpenSMTPD рассчитано, что первая строка включает трёхзначное число и текст, разделённые символом «-«, а вторая строка трёхзначное число и текст, разделённые пробелом. Если во второй строке после трёхзначного числа не следует пробел и текст, указатель, используемый для определения текста, устанавливается на байт, следующий за символом ‘