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

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

сервер

Рекламная среда — 3

Регистрация доменов № 1 в России. Более 3 000 000 доменов на обслуживании.

Хостинг и серверы от 91 ₽. Надёжный классический и VIP хостинг, VPS с SSD+HDD и SSD носителями, Dedicated. Домены в подарок.

SSL-сертификаты от 1099 ₽. Гарантия статуса сайта и безопасности передаваемых данных. Незаменимо для e-commerce.

Критическая уязвимость в 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, сменить все пароли, выполнить проверку и чистку сервера от вирусов — самостоятельно или с помощью профильных специалистов. В теории это может помочь — но нет гарантий, что злоумышленники не спрятали бэкдоров для повторных заражений.

О защите данных

Всем кто думает, что их панель администрирования сайта безопасна.

Знайте! Есть как минимум еще один человек. У него есть доступ к базе данных на сервере.

Официальная версия поломки Телеграма

Создатель Telegram Павел Дуров на своей странице в Twitter объяснил, почему мессенджер перестал работать. По его словам, причина заключается в отключении электричества в одном из дата-центров.

«Отключение питания в кластере серверов Telegram вызвало проблемы в Европе. Мы работаем над этим со своей стороны, однако многое зависит от того, когда провайдер дата-центра приведет оборудование в работоспособное состояние», — написал Дуров.

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

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

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

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

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

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

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

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

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

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

Реклама за 1 500 ₽ / месяц