корректирующий выпуск с устранением критической (), которая в конфигурации по умолчанию может привести к удалённому выполнению кода злоумышленника с правами root. Проблема проявляется только при включении поддержки TLS и эксплуатируется через передачу специально оформленного клиентского сертификата или модифицированного значения в SNI. Уязвимость компанией Qualys.
Проблема в обработчике экранирования спецсимволов в строке ( из string.c) и вызвана тем, что символ ‘\’ в конце строки интерпретируется перед нулевым символом (‘\0’) и экранирует его. При экранировании последовательность ‘\’ и следующий далее нулевой код конца строки обрабатывается как один символ и указатель сдвигается на данные за пределами строки, которые обрабатываются как её продолжение.
Код, вызывающий string_interpret_escape(), выделяет буфер под стоку, руководствуясь фактическим размером, и выставленный указатель оказывается в области вне границ буфера. Соответственно, при попытке обработки входной строки возникает ситуация чтения данных из области вне границ выделенного буфера, а попытка записи разэкранированной строки может привести к записи за пределы буфера.
В конфигурации по умолчанию уязвимость может быть эксплуатирована через передачу специально оформленных данных в SNI при установке защищённого соединения к серверу. Проблема также может быть эксаплуатирована через модификацию значений peerdn в конфигурациях, настроенных для аутентификации по сертификату клиента, или при импорте сертификатов. Атака через SNI и peerdn возможна начиная с выпуска , в котором функция string_unprinting() была применена для разэкранирования содержимого peerdn и SNI.
Для атаки через SNI подготовлен прототип эксплоита, работающий на архитектурах i386 и amd64 в Linux-системах с Glibc. В эксплоите используется наложение данных на область кучи, приводящее к перезаписи памяти, в которой хранится имя файла лога. Имя файла заменяется на «/../../../../../../../../etc/passwd». Далее перезаписывается переменная с адресом отправителя, который первым сохраняется в лог, что позволяет добавить нового пользователя в систему.
Обновления пакетов с устранением уязвимости выпущено дистрибутивами , , , և . RHEL и CentOS проблеме , так как Exim не входит в их штатный репозиторий пакетов (в обновление , но пока в публичный репозиторий). В коде Exim проблема устраняется однострочным , отключающем экранирующее действие обратного слэша, если он находится в конце строки.
В качестве обходного пути для блокирования уязвимости можно отключить поддержку TLS или добавить в
секцию ACL «acl_smtp_mail»:
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}}
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}}
Աղբյուր: opennet.ru
