Раскрыты (http://seclists.org/fulldisclosure/2016/Mar/32) подробности критической уязвимости (CVE-2016-1531) в почтовом сервере Exim (https://www.exim.org), позволяющей непривилегированному локальному пользователю системы выполнить код с правами root. Проблема устранена в выпусках 4.84.2, 4.85.2, 4.86.2, 4.87 RC5 (https://lists.exim.org/lurker/message/20160302.195554.d8f9b6...) и 4.82.2 (https://lists.exim.org/lurker/message/20160304.155033.bdee79...).
Проблеме подвержены установки, в которых для exim собран с поддержкой Perl и поддерживает конфигурационную переменную perl_startup. Для проверки можно запустить "exim -bV -v | grep i Perl". Обычно perl_startup используется для подключения антивирусов, фильтров, серых списков и систем фильтрации спама. Отсутствие активной настройки perl_startup в файле конфигурации не избавляет от проблемы, если локальный пользователь может запустить свой экземпляр exim со своим файлом конфигурации.
Причиной возникновения уязвимости является отсутствие чистки переменных окружения перед загрузкой скрипта на языке Perl, определённого в параметре perl_startup. Для совершения атаки локальному злоумышленнику достаточно обратиться к sendmail-обвязке /usr/sbin/sendmail.exim, которая ссылается на процесс /usr/sbin/exim, выполняемый с флагом set-uid root. Если в обычных условиях sendmail-обвязка сбрасывает привилегии root, то при запуске с опцией "-ps" имеется возможность выполнить perl-скрипт, указанный в настройках perl_startup, на этапе до сброса привилегий.
Для подстановки своих команд при выполнении указанного в настройках perl-скрипта может применяться переменная окружения PERL5OPT, через которую можно передать опции выполнения интерпретатора perl. Например, указав опцию "-d" интерпретатор перейдёт в интерактивный отладочный режим, в котором можно выполнить произвольный код. Таким образом эксплоит сводится к запуску команды 'PERL5OPT="-d/dev/null" /usr/sbin/sendmail.exim -ps', после чего можно запустить любую системную утилиту с правами root. Например, для запуска команды id в отладочном интерфейсе можно ввести 'p system("id")'.Уязвимость проявляется (https://security-tracker.debian.org/tracker/CVE-2016-1531) в Debian, Ubuntu (https://people.canonical.com/~ubuntu-security/cve/2016/CVE-2...) SUSE (https://bugzilla.novell.com/show_bug.cgi?id=CVE-2016-1531), openSUSE (http://lists.opensuse.org/opensuse-security-announce/2016-03...), FreeBSD (http://www.vuxml.org/freebsd/7d09b9ee-e0ba-11e5-abc4-6fb07af...) и Fedora. RHEL проблеме не подвержен (https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2016-1531). Для защиты от возникновения подобных проблем в будущем в новые версии Exim принят (https://lists.exim.org/lurker/message/20160302.195554.d8f9b6...) код для фильтрации переменных окружения, который требует внесения изменений в конфигурацию в случае передачи параметров к внешним компонентам через переменные окружения (например, таким способом передаются параметры LDAP). По умолчанию теперь все переменные окружения очищаются, а разрешённые переменные должны быть явно определены в директивах "keep_environment" и "add_environment".
URL: http://seclists.org/fulldisclosure/2016/Mar/32
Новость: http://www.opennet.me/opennews/art.shtml?num=44039
Урок для дебиан, чтоб не пихал насильно этого монстра в минимально устанавливаемую систему.. Всегда выпиливаю его.
Не понять мне логики, ssh, который важен для администрирования системы значит вынесен в меню выбора пакетов, и по умолчанию система ставится без него, если не пометить, а эту хрень exim без спроса ставим.
По умолчанию разве не эта версия ставится https://packages.debian.org/ru/jessie/exim4-daemon-light ?
> По умолчанию разве не эта версия ставится https://packages.debian.org/ru/jessie/exim4-daemon-light
> ?+1
$ /usr/sbin/exim -bV -v | grep -ci Perl
0
$ dpkg -S /usr/sbin/exim
exim4-daemon-light: /usr/sbin/exim
$ head -1 /etc/issue.net
Debian GNU/Linux 7
> Не понять мне логикиЗачем тебе ssh если у тебя сети нет? А без локального MTA не работает cron
Без сети netinstall дебианский бессмысленный, а зачем крону мта? кричать о выводе исполняемых команд? В общем не пробовал, не знаю, т.к ставлю ssmtpd. ну хотя бы меню выбора что-ль сделали бы.
>А без локального MTA не работает cronВот тебе , батенька, и юникс-вэй.
>>А без локального MTA не работает croncron рекомендует exim4 | postfix | mail-transport-agent
Не обязательно его иметь. Ну и заменить 2мя другими можно.
openSMTP тоже сойдет!
>>>А без локального MTA не работает cron
> cron рекомендует exim4 | postfix | mail-transport-agent
> Не обязательно его иметь. Ну и заменить 2мя другими можно.Не совсем двумя:
$ aptitude search mail-transport-agent
v mail-transport-agent -
$ aptitude show mail-transport-agent
Нет в наличии или подходящей версии для mail-transport-agent
Пакет: mail-transport-agent
Состояние: не реальный пакет
Предоставляется: citadel-mta, courier-mta, esmtp-run, exim4-daemon-heavy, exim4-daemon-light,
lsb-invalid-mta, masqmail, msmtp-mta, nullmailer, postfix,
qmail-run, sendmail-bin, ssmtp, xmail
Работает. Ему просто нужно об этом сказать.
> Урок для дебиан, чтоб не пихал насильно этого монстра в минимально устанавливаемую системуТак и не пихают, я только вчера debootstrap'ом проверял с flavor=minimal, нет там никакого exim.
Вопрос знатокам: какие привилегированные действия выполняет exim, что ему требуется иметь set-uid root? и нельзя ли его этого флага лишить, чтобы принципиально избавиться от проявления подобных уязвимостей в будущем (хотя, в этом случае их нельзя будет обнаружить)?
Может на привилегированный (до 1000) порт вешается?
> Может на привилегированный (до 1000) порт вешается?Правильно, незачем пользоваться современными инструментами типа CAPABILITIES, лучше админить как будто 1993 год на дворе.
Пишет в локальные почтовые ящики всех пользователей в системе, например.
> Вопрос знатокам: какие привилегированные действия выполняет exim, что ему требуется иметь
> set-uid root? и нельзя ли его этого флага лишить, чтобы принципиальноИ тут, внезапно, вступает хор счастливых полmзователей postfix с арией об разделении прав.
В коридоре слышен топот ног -- к празднованию спешат присоединиться фанаты qmail.
>И тут, внезапно, вступает хор счастливых полmзователей postfix с арией об разделении прав.Так пишешь, как будто это плохо.
>>И тут, внезапно, вступает хор счастливых полmзователей postfix с арией об разделении прав.
> Так пишешь, как будто это плохо.Это плохо.
>> Вопрос знатокам: какие привилегированные действия выполняет exim, что ему требуется иметь
>> set-uid root? и нельзя ли его этого флага лишить, чтобы принципиально
> И тут, внезапно, вступает хор счастливых полmзователей postfix с арией об разделении
> прав.
> В коридоре слышен топот ног -- к празднованию спешат присоединиться
> фанаты qmail.Ыыы, запахло холиваром..)))
не доводилось копаться в кишках exim (1 из 3 mta второго поколения на *nix) - он что архитектypнo не модульный ?
>> И тут, внезапно, вступает хор счастливых полmзователей postfix с арией об разделении
>> прав.
> не доводилось копаться в кишках exim (1 из 3 mta второго поколения
> на *nix) - он что архитектypнo не модульный ?Модули есть, а разделения привилегий... не довложили, SUIDов накостылили.
А модулей там чуть больше, чем в systemd, светоче "модульности". Архитектура!
> Модули есть, а разделения привилегий... не довложили, SUIDов накостылили.понятно, нет золотой середины,
я для для базового и быстрого "архитектурного" вправления мозгов отправляю "курить" qmail-start.c> А модулей там чуть больше, чем в systemd, светоче "модульности". Архитектура!
..
> он что архитектypнo не модульный ?примено да, большой монолит в виде одного бинарника со всеми функиями.
> Вопрос знатокам: какие привилегированные действия выполняет exim, что ему требуется иметь
> set-uid root? и нельзя ли его этого флага лишить, чтобы принципиально
> избавиться от проявления подобных уязвимостей в будущем (хотя, в этом случае
> их нельзя будет обнаружить)?Такие же, какие выполняет nginx и др. подобные программы.
да кто ж nginx из-под рута запускать будет? для каждого демона нынче отдельного пользователя создают, а пользовательские скрипты и вовсе от имени пользователей выполняют, которые суть арендаторы хостингов.
Ну, строго говоря, _запускают_ его именно под рутом из-за 80-го порта. Правда, после открытия порта привилегии можно дропнуть, что он и делает. Впрочем, экзим тоже, вроде как, под рутом почти не работает. Но suid-root использует для /usr/bin/exim4 даже в варианте exim4-daemon-light, ровно в силу своей монолитности.
Внезапно:root 826 0.0 0.0 90876 3004 ? Ss Mar10 0:00 nginx: master process /usr/sbin/nginx
www-data 2589 0.0 0.0 91588 3660 ? S Mar10 1:42 nginx: worker process
www-data 2591 0.0 0.0 91588 3664 ? S Mar10 2:00 nginx: worker processDebian-exim 14059 0.0 0.0 108612 1812 ? Ss 2014 0:33 /usr/sbin/exim4 -bd -q30m
> Внезапно:Да бросьте, Поручик! Тут этого никто не оценит! (С) :-)
> Да бросьте, Поручик! Тут этого никто не оценит! (С) :-)Это не Поручик, это целый Капитан!
> Ну, строго говоря, _запускают_ его именно под рутом из-за 80-го порта. Правда,
> после открытия порта привилегии можно дропнуть, что он и делает. Впрочем,
> экзим тоже, вроде как, под рутом почти не работает. Но suid-root
> использует для /usr/bin/exim4 даже в варианте exim4-daemon-light, ровно в силу своей
> монолитности.Exinm оставляет stored uid = 0, он не всё дропает, в ps не все видно.
> Вопрос знатокам: какие привилегированные действия выполняет exim,
> что ему требуется иметь set-uid root? и нельзя ли его этого флага лишитьНе специалист (тут бы хорошо solardiz или ldv@ позвать), но вообще-то suid root обычно плохой признак. Чем такое можно мотивировать в случае сервиса, который запускается от рута -- решительно не понимаю: ну оставь ты один процесс под рутом, а остальных работяг раскидай по индивидуально пониженным привилегиям, минимально необходимым им для собственно дела (minimum privilege + privilege separation).
Если вдруг им надо делать что-то, будучи запущенными именно от пользователя (показать почтовую очередь, если простым смертным она недоступна напрямую и нет соответствующего API к процессу с достаточными правами) -- ну sgid.
Впрочем, что exim в принципе решето, известно давно, увы.
>> и нельзя ли его этого флага лишить
> Не специалист (тут бы хорошо solardiz или ldv@ позвать), но вообще-то suidЛет мии даггаггоу зет фоур юу фром май харт. https://duckduckgo.com/?q=why+exim+suid
solardiz заслуженно гордится тем, что не поставляет SUID-рутов в своём опенволе вообще, и тем, что в опенволе нет и экзима, в частности.
С ldv чуть сложнее, что конкретно про экзим он говорил, я не нашёл, но он числится в "принимавших участие в данной и/или предыдущих сборках пакета" http://sisyphus.ru/ru/srpm/exim , и, насколько я помню, gvy гордился выбором postfix-а дефолтным МТА Альта -- после и при всех экзима пpоколах.
> root обычно плохой признак. Чем такое можно мотивировать в случае
> сервиса, который запускается от рута -- решительно не пoнимаю: ну оставьИспользуют они его: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-...
Да, криво и недостаточно, и, да, получают гpаблями. Кроме запуска сервиса у МТА (анонимы, юникс-насление! фaс!) есть других юзе-кесовых коде-пасов.
> http://www.exim.org/exim-html-current/doc/html/spec_html/ch-...Благодарю.
> Кроме запуска сервиса у МТА [...] есть других юзе-кесовых коде-пасов.
Про условный mailq специально ведь упомянул.
>> Кроме запуска сервиса у МТА [...] есть других юзе-кесовых коде-пасов.
> Про условный mailq специально ведь упомянул.Там второй пункт не про mailq, а про "встроенный" LDA: лок.юзер vasya пишет лок.пользователю petya, пуская под своими правами типа-sendmail, тот, exim на самом деле, становится root-ом, переключается в uid:petya и кладёт послание в /var/mail/petya ==внутри одного процесса (вот здесь мало юниксвея и разделения прав а-ля postfix), без сокетов, без постановки в очередь и отправки демону (и без самого демона) на localhost. Да, если чуть напрячься просто доставка в mbox не требует root-а, можно, как тут говорили, и sgid:mail-lda обойтись. Поэтому они там ещё ~/.forward "того" (petya) пользователя поминают и [обещанный юних-наследованной традицией] запуск пайпов-подпроцессов под этим самым получателем (прочем эти же подпроцессы и с переходом ч-з root происходят и при доставке из очереди ~~ runq //BTW, ты не его с mailq перепутал?).
Perl со сложно-сочинёнными конфигурациями здесь только в качестве зияющего подтверждения, что в "суперкомбайне" со встроенным языком никто не потрудился "посчитать" все выходы. Их оказалось существенно больше, чем в post- и q- не обременённых суперкомбайнированием. Впору рекомендовать [если и .., то] ставить exim-ы только "внутири", прикрывая postfix-ами, как :/ "сами знаете кого".
> Не специалистПосле этих слов следовало бы остановиться. Далее идут высказывания, явно путающие запуск под рутом и работу под рутом. И к реальной работе Эксима отношения не имеющие. Ну не пишите вы про продукт, не читавши его документации!
>> Не специалист
> После этих слов следовало бы остановиться....и задуматься -- а не понимает ли отрекомендовавшийся так тему лучше иных "специалистов", раз уж осознаёт свою ограниченность...
> Далее идут высказывания, явно путающие запуск под рутом и работу под рутом.
Нет.
> И к реальной работе Эксима отношения не имеющие.
Ну так ткните пальцем в противоречие и поясните -- Митрофанов вот не постеснялся ответить конструктивно и сэкономить время на поиск нужной ссылки. Всё ж просто :)
> Ну не пишите вы про продукт, не читавши его документации!
---
The Exim binary is normally setuid to root, which means that it gains root privilege (runs as root) when it starts execution.
--- http://www.exim.org/exim-html-current/doc/html/spec_html/ch-...Зачем ему *gains* root? (и нет, я читал два следующих пункта -- совершенно не убедило)
PS: сами-то хоть понимаете разницу между "требуется euid 0" и "suid root" применительно к штатному общесистемному MTA?
PPS: я прекрасно понимаю, что можно понижать привилегии, но оставить ляп в процессе, который их сохраняет -- вплоть до того же самого remote root; здесь вопрос на культуру проектирования with security in mind, как в тех краях выражаются, или без таковой.
> Зачем ему *gains* root? (и нет, я читал два следующих пункта --
> совершенно не убедило)Убогость архитектуры. Надо сделать несколько привилегированных операций (например, положить в очередь, доступ к которой должен быть строго контролируем), и, соответственно, проще получить суперпользователя, а потом выполнить эти действия (от разных пользователей), чем разнести все по отдельным бинарникам, с продуманной системой прав. Back to the 80s.
Я, чгря, уже довольно давно не интересовался потрохами МТА и вообще линуксячьим администрированием, и традиционно использую postfix, но теперь буду знать точно, за что не любить exim.
Ну, от человека, который использует postfix ничего другого ожидать и не приходится.
> Ну, от человека, который использует postfix ничего другого ожидать и не приходится.Зная Лёшу лично, а "этого кота впервые видя" -- поухмыляюсь над такими оценками. :)
Снизойдёте ли к доводам?
По умолчанию в Дебиане ставится exim-daemon-light, а собран с Перлом, и таким образом пока уязвим - только exim-daemon-heavy, которого надо переставлять вручную, если требуются продвинутые возможности. Так что подавляющее большинство установок не пострадает, а у остальных должны быть достаточно квалифицированные админы. И вообще посторонних пользователей в серверах с heavy не должно быть. К тому же, я не уверен, в чью сторону тут правильно кидать камни - в разработчиков Эксима или Перла.Рут ему требуется для переключения на других пользователей. В конфиге можно прописать, под каким пользователем выполняется каждый этап обработки в разных случаях, и это могут быть разные пользователи. Для этого демон в нужные моменты делает себе exec(), а затем переключается на нужного для следующей операции пользователя. Только потом начиная работать с данными поступившими извне. С Перлом они упустили одну ситуацию, где этот принцип нарушается. Ну и плюс при первоначальном старте нужно открыть "низкие" порты на прослушку, для этого тоже нужен рут.
Если вы настоите себе конфиг так, чтобы вся обработка везде шла строго под одним и тем же пользователем, то suid можно убрать. Запускаем всё равно под root, он открывает порты, переключается на пользователя, и дальше работает так. Как-то давно делал себе такую конфигурацию, работало, правда было много ручной возни, не приносящей пользы, так что отказался.
> в разработчиков Эксима или Перла.Знаете, как подох sendmail? Он подох, когда бо́льшая часть логики обработки почты оказалась в конфигурации. И страдал, кстати, от тех же родовых проблем. "Ой, йоп, опять не доглядели!.."
> Рут ему требуется для переключения на других пользователей. В конфиге можно прописать,
> под каким пользователем выполняется каждый этап обработки в разных случаях, и
> это могут быть разные пользователи.Спасибо за обстоятельную лекцию. А теперь посмотрите, как это сделано в нормальных МТА, авторы которых сразу подумали за безопасность в процесс обработки почты. Хинт: ни одного suid root там нет, а задачи, которым требуется переключение привилегий, сразу запускаются процессом-дирижером с требуемыми привилегиями.
> Если вы настоите себе конфиг так, чтобы вся обработка везде шла строго
> под одним и тем же пользователем, то suid можно убрать. Запускаем
> всё равно под root, он открывает порты, переключается на пользователя, и
> дальше работает так. Как-то давно делал себе такую конфигурацию, работало, правда
> было много ручной возни, не приносящей пользы, так что отказался.В добрый путь, как говорится ;)
> Он подох, когда бо́льшая часть логики обработки почты оказалась в конфигурации.Вас послушать, так он мёртвым родился и мёртвым почту передавал лет тридцать.
> А теперь посмотрите, как это сделано в нормальных
> МТА, авторы которых сразу подумали за безопасность в процесс обработки почты.Странно, ни одного нормального MTA, кроме Exim не видел. Ну как бы они есть, какие-то, даже что-то чуть-чуть умеют, но нормальными их назвать язык не поворачивается. Но для локалхоста да, сойдут.
> Но для локалхоста да, сойдут.Забавно, а по каким критериям сравнивали?
Дебиан. Стабильность. Энтерпрайз.
Бывает.
А если бы кретины из debian выбирали нормальные пакеты для дефолтной установки, Postfix например, то такого треша не было бы.
чёрт с ним, с exim'ом! вы посмотрите какую наркоманию они развели для его настройки!
> чёрт с ним, с exim'ом! вы посмотрите какую наркоманию ониА Вы, извините, эксперт? В наркомании? Да, расскажите нам подробнее.
К счастью, "наркомания" элементарно отключается - достаточно создать свой /etc/exim4/exim4.conf .
Причем - одним файлом, а не винегрет из полсотни инклудов по три строчки каждый.
А Bind то тут при чем?
При чем тут всякое дерьмо, типа postfix? Вопросы к тупому сборщику пакетов, который додумался perl включить по-умолчанию. Да и вообще, за тот трэш, который дебиановцы натворили с конфигом экзима, им надо в голову гвоздь забить.
Всякое дерьмо это exim. Предьявы не к сборщику пакетов, а к архитекторам экзима которые сделали его таким убогим и несекьюрным. До этого они оправдывали убогость экзима качеством кода и тестированием, типа мы такие хорошие разработчики, хорошо пишем и тестируем, потому, несмотря на кривую архитектуру, будет всё хорошо. Естественно, с убогой архитектурой хорошо быть не может.Ну и, конечно, предьявы к кретинам которые умудрились этот кусок дерьма сделать дефолтным MTA в дистрибутиве большинство пользователей которого виндузоподобные дурачки и сами не в состянии оценить качество предлагаемых дефолтных пакетов.
> Ну и, конечно, предьявы к кретинам которые умудрились этот кусок дерьма сделать
> дефолтным MTA в дистрибутиве большинство пользователей которого виндузоподобные дурачки
> и сами не в состянии оценить качество предлагаемых дефолтных пакетов.Спасибо - от лица всех пользователей D. С восхищением следим за Вашим беспримерным Путём по переоценке, переучёту и непременно изменению всех дефолтов в Вашей федорочке. Олманоподобные Светила Мысли озаряют нашу занюханую вен^H^H^H дебианщину светом нетленным Далёкой Звездить, Вы поведёте нас^C NO MODEM
> ... в дистрибутиве большинство пользователей которого виндузоподобные дурачкиИ снова вопрос: какой дистр является кошерным с твоей точки зрения? Вываливай, гуру.
Gentoo, конечно.
> Gentoo, конечно.LFS не катит, не?
не катит
>> Postfix например- и чем же он лучше? Тем что у него очередная уязвимость пришлась не на весеннее обострение?
>>> Postfix например
> - и чем же он лучше?Для неизвращённого пользователя -- вообще-то всем. Проблемы хабов со сложной маршрутизацией волнуют мало кого.
> Тем что у него очередная уязвимость пришлась не на весеннее обострение?
Ссылочку не напомните?
Exim не готов для подакшена, пусть дальше в песочнице играют.
что более лучше готово?
В песочнице хоронить? Фу...
"Шо, опять?!" (ц)
Самый надежный, да? :)---------
Exim’s security record has been fairly clean, with only a handful of serious security problems diagnosed over the years.
https://en.wikipedia.org/wiki/Exim
> Exim’s security record has been fairly clean, with only a handful of
> serious security problems diagnosed over the years.
> en.wikipediaТиповое викивраньё, за которое надо бить линейкой по доступу: серийный remote root -- это не просто "serious".
О чем ты родной, какой серийный, когда?
> О чем ты родной, какой серийный, когда?Хоть http://www.opennet.me/cgi-bin/opennet/ks.cgi?mask=exim почитайте, раз всё пропустили.
Просто надо иметь ввиду, что уже несколько из них специфичны только для debian и не проявляются на том же RHEL.
Да что ж такое, никаких радостей! Третий год все дыры мимо...
Все одмины как люди - с дырами, фисят, правят, обновляют, имитируют БД.
И только я, заплесеневший мамонт, на протухшем демьяне.$ exim -bV -v
Exim version 4.72 #1 built 13-Jul-2014 21:26:25$ cat /etc/debian_version
6.0.10
У меня для тебя плохие новости - "эксим настолько древний, что в нём даже уязвимости находить перестали" - отнюдь не главная твоя проблема.
У меня для тебя новость - exim это SMTP сервер.
Не проспался после выходных? Бывает.
а как же sendmail?
гулять - так гулять!
Я когда работал с exim в продакшене, запускал его через sudo -u mail со снятыми setuid битами. Это была версия 4.69 и я не парился об обновлениях. Надо только дать капу cap_net_bind_service на бинарник exim и конфиг доработать под пользователя mail без изменения uid в процессе работы. В такой конфе exim у не куда выпрыгивать в повышение привелегий.