Подписка на блог

5 заметок с тегом

код

Критическая уязвимость в Exim, позволяющая выполнить код на сервере с правами root

В почтовом сервере Exim выявлена критическая уязвимость (CVE-2019-10149), которая может привести к удалённому выполнению кода на сервере с правами root при обработке специально оформленного запроса. Возможность эксплуатации проблемы отмечена в версиях с 4.87 по 4.91 включительно или при сборке с опцией EXPERIMENTAL_EVENT.

В конфигурации по умолчанию атака может быть совершена без лишних усложнений локальным пользователем, так как применяется ACL «verify = recipient», выполняющий дополнительные проверки для внешних адресов. Совершение удалённой атаки возможно при изменении настроек, например, при работе в роли вторичного MX для другого домена, удалении ACL «verify = recipient» или определённых изменениях в local_part_suffix). Удалённая атака также возможна если злоумышленник сможет удержать соединение с сервером открытым в течение 7 дней (например, отправляя по одному байту в минуту для обхода обрыва по таймауту). При этом не исключается, что для удалённой эксплуатации проблемы существуют и более простые векторы атаки.

Уязвимость вызвана некорректной проверкой адреса получателя в функции deliver_message(), определённой в файле /src/deliver.c. Через манипуляцию с форматированием адреса атакующий может добиться подстановки своих данных в аргументы команды, вызываемой через функцию execv() с правами root. Для эксплуатации не требуется применение сложных техник, используемых при переполнениях буфера или повреждении памяти, достаточно просто подстановки символов.

Проблема связана с применением для преобразования адресов конструкции:

deliver_localpart = expand_string(
         string_sprintf("${local_part:%s}", new->address));
deliver_domain =    expand_string(
         string_sprintf("${domain:%s}", new->address));

Функция expand_string() является переусложнённым комбайном, в том числе распознающим команду «${run{команда аргументы}», приводящую к запуску внешнего обработчика. Таким образом, для атаки в рамках SMTP-сеанса локальному пользователю достаточно передать команду вида ’RCPT TO «username+${run{...}}@localhost»’, где localhost один из хостов из списка local_domains, а username имя существующего локального пользователя.

Если сервер работает в качестве почтового релея достаточно удалённо отправить команду ’RCPT TO «${run{...}}@relaydomain.com»’, где relaydomain.com один из хостов, перечисленных в секции настроек relay_to_domains. Так как по умолчанию в exim не применяется режим сброса привилегий (deliver_drop_privilege = false), переданные через «${run{...}}» команды будут выполнены с правами root.

Примечательно, что уязвимость была устранена в вышедшем в феврале выпуске 4.92 без акцентирования внимания на то, что исправление может привести к проблемам с безопасностью. Нет оснований полагать, что имело место осознанное сокрытие уязвимости разработчиками Exim, так как проблема была устранена в ходе исправления сбоя , возникающего при передаче некорректных адресов, а уязвимость была выявлена компанией Qualys при проведении аудита изменений в Exim.

Исправление для прошлых версий, которые продолжают применяться в дистрибутивах, пока доступно только в виде патча. Корректирующие выпуски для прошлых веток с устранением проблемы запланированы на 11 июня. Обновления пакетов подготовлены для Debian, Ubuntu, openSUSE. Arch Linux и Fedora поставляют версию 4.92, в которой проблема не проявляется. RHEL и CentOS проблеме не подвержены, так как Exim не входит в их штатный репозиторий пакетов (при необходимости ставится из репозитория epel).

Как обновиться?
Для обновления необходимо подключиться к серверу по SSH под пользователем c правами root и последовательно выполнить приведённые ниже команды в терминале. Будьте осторожны — внеплановое обновление несёт определённые риски. Если сомневаетесь — поручите обновление администратору вашего сервера или обратитесь к нашим специалистам в рамках пакета поддержки.

На Centos

Убедитесь, что почтовый сервер установлен:

rpm -qa | grep exim

Результатом будет версия Exim: exim-4.88-3.el7.x86_64
Если версия ниже 4.92, выполните обновление:

yum update exim

Перезапустите почтовый сервер:

service exim restart

На Debian или Ubuntu

Убедитесь, что exim установлен:

dpkg -l | grep exim

Выполните обновление:

apt-get update && apt-get install exim4

Перезапустите почтовый сервер:

service exim4 restart

После обновления в профилактических целях смените все пароли на сервере: root, обычных пользователей, пароли баз данных, почты и др.

Как понять, что сервер взломан?
Проверьте запущенные процессы командой top
На заражённых серверах наблюдается 100%-я нагрузка, создаваемая процессом [kthrotlds] Также в планировщике cron добавляется задание с ограничением прав на редактирование.

Что делать, если сервер уже взломали?
Самый безопасный способ — перенос данных на новый виртуальный сервер с Centos 7 или Ubuntu 16/18 — на этих ОС при установке с ISPmanager автоматически устанавливается последняя версия Exim.

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

Выгрузка постов Эгеи в «Турбо-страницы» от Яндекса

Вчера мне не хватало в Эгеи «Турбо-страниц» Яндекса.

Сегодня решил это исправить и исправил существующий код, по требованиям Яндекса.

Для тех, что хочет выгружать свои записи по технологии «Турбо-страниц» от Яндекса, вот вам мой готовый файл RSS выгрузки.

Файл находится в папке system / default / rss.tmpl.php

Не забудьте в  Яндекс.Вебмастере, в источниках «Турбо-страниц» добавьте ссылку на вашу rss ленту, а так же включить турбо-страницы в Яндекс.Метрике.

Skype Сonversation

Если в Skype conversation выполнить команду /set options +HISTORY_DISCLOSED, то новые пользователи смогут читать предыдущие сообщения.

Определение города посетителя, для ленивых

В сети нашел способ определения города пользователя

See the Pen yandex-api-get-town by roosyak (@roosyak) on CodePen.

Шаг 1. Вставляем в конец страницы, вытаскиваем город
Шаг 2. Сохраняем адрес в куку, отправляем на сервер или любое другое действие.

Краткая история появления метода. На одном проекте, требовалось определить из какого города пришел пользователь. Проект маленький, приделывать таблицы городов и айпи адресов, было лень. Потому-что сами таблицы, занимают больше места чем проект целиком.

Пришлось искать простое решение, не требующее затрат времени и сил. Желательно чтоб город определился автоматически, без серверной части.

На другом проекте работал с картами Яндекса. Полез изучать документацию. В документации не нашел подходящих методов. Может быть они есть, может не за документированы, может не нашел. Полез изучать исходные коды карт. В исходных кодах увидел название своего города. Значит Яндекс знает откуда пришел посетитель. Придумал костыль, для вытаскивания адреса.

Делается это без учета информации от Яндекс Метрики.

Если есть способ определения город посетителя сайта проще и удобнее, сообщите, буду рад его использовать в будущем.

Автор статьи Якубович Руслан — http://e2.yaruslan.ru/

HTML5

С помощью этой инфографики отображены основные функции, которыми обладает HTML5. Наглядно представлена степень текущей поддержки новых возможностей основными браузерамии и перспективу поддержки в ближайшем будущем.

На схеме показно, что IE значительно отстает от других в плане поддержки, но намерен это поддерживать.

Крупнее — http://himich.com/notes/pictures/html5.jpg

_______________
В январе — инфографика
Реклама за 1 500 ₽ / месяц