Опубликован выпуск почтового сервера Exim 4.94.2 с устранением 21 уязвимости (CVE-2020-28007-CVE-2020-28026, CVE-2021-27216), которые выявлены компанией Qualys и представлены под кодовым именем 21Nails. 10 проблем могут быть эксплуатированы удалённо (в том числе для выполнения кода с правами root), через манипуляции с SMTP-командами при взаимодействии с сервером.
Проблемам подвержены все версии Exim, история которых отслеживается в Git с 2004 года. Для 4 локальных уязвимостей и 3 удалённых проблем подготовлены рабочие прототипы эксплоитов. Эксплоиты для локальных уязвимостей (CVE-2020-28007, CVE-2020-28008, CVE-2020-28015, CVE-2020-28012) позволяют поднять свои привилегии до пользователя root. Две удалённые проблемы (CVE-2020-28020, CVE-2020-28018) позволяют без аутентификации выполнить код с правами пользователя exim (затем можно получить доступ root, эксплуатировав одну из локальных уязвимостей).
Уязвимость CVE-2020-28021 позволяет сразу удалённо выполнить код с правами root, но требует аутентифицированного доступа (пользователь должен установить аутентифицированный сеанс, после чего может эксплуатировать уязвимость через манипуляции с параметром AUTH в команде MAIL FROM). Проблема вызвана тем, что атакующий может добиться подстановки строки в заголовок spool-файла из-за записи значения authenticated_sender без должного экранирования спецсимволов (например, передав команду "MAIL FROM:<> AUTH=Raven+0AReyes").
Дополнительно отмечается, что ещё одна удалённая уязвимость CVE-2020-28017 пригодна для эксплуатации для выполнения кода с правами пользователя "exim" без аутентификации, но требует наличия более 25 ГБ памяти. Для остальных 13 уязвимостей потенциально также могут быть подготовлены эксплоиты, но работа в этом направлении пока не проводилась.
Разработчики Exim были уведомлены о проблемах ещё в октябре прошлого года и потратили более 6 месяцев на разработку исправлений. Всем администраторам рекомендовано срочно обновить Exim на своих почтовых серверах до версии 4.94.2 (напомним, что Exim используется примерно на 59% почтовых серверов). Все версии Exim до выпуска 4.94.2 объявлены устаревшими (obsolete). Публикация новой версии была скоординирована с дистрибутивами, которые одновременно опубликовали обновления пакетов: Ubuntu, Arch Linux, FreeBSD, Debian, SUSE и Fedora. RHEL и CentOS проблеме не подвержены, так как Exim не входит в их штатный репозиторий пакетов (в EPEL обновление пока отсутствует).
Удалённые уязвимости:
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=55079
Проблемам подвержены все версии Exim, история которых отслеживается в Git с 2004 года. Для 4 локальных уязвимостей и 3 удалённых проблем подготовлены рабочие прототипы эксплоитов. Эксплоиты для локальных уязвимостей (CVE-2020-28007, CVE-2020-28008, CVE-2020-28015, CVE-2020-28012) позволяют поднять свои привилегии до пользователя root. Две удалённые проблемы (CVE-2020-28020, CVE-2020-28018) позволяют без аутентификации выполнить код с правами пользователя exim (затем можно получить доступ root, эксплуатировав одну из локальных уязвимостей).
Уязвимость CVE-2020-28021 позволяет сразу удалённо выполнить код с правами root, но требует аутентифицированного доступа (пользователь должен установить аутентифицированный сеанс, после чего может эксплуатировать уязвимость через манипуляции с параметром AUTH в команде MAIL FROM). Проблема вызвана тем, что атакующий может добиться подстановки строки в заголовок spool-файла из-за записи значения authenticated_sender без должного экранирования спецсимволов (например, передав команду "MAIL FROM:<> AUTH=Raven+0AReyes").
Дополнительно отмечается, что ещё одна удалённая уязвимость CVE-2020-28017 пригодна для эксплуатации для выполнения кода с правами пользователя "exim" без аутентификации, но требует наличия более 25 ГБ памяти. Для остальных 13 уязвимостей потенциально также могут быть подготовлены эксплоиты, но работа в этом направлении пока не проводилась.
Разработчики Exim были уведомлены о проблемах ещё в октябре прошлого года и потратили более 6 месяцев на разработку исправлений. Всем администраторам рекомендовано срочно обновить Exim на своих почтовых серверах до версии 4.94.2 (напомним, что Exim используется примерно на 59% почтовых серверов). Все версии Exim до выпуска 4.94.2 объявлены устаревшими (obsolete). Публикация новой версии была скоординирована с дистрибутивами, которые одновременно опубликовали обновления пакетов: Ubuntu, Arch Linux, FreeBSD, Debian, SUSE и Fedora. RHEL и CentOS проблеме не подвержены, так как Exim не входит в их штатный репозиторий пакетов (в EPEL обновление пока отсутствует).
Удалённые уязвимости:
- CVE-2020-28017: Целочисленное переполнение в функции receive_add_recipient();
- CVE-2020-28020: Целочисленное переполнение в функции receive_msg();
- CVE-2020-28023: Чтение из области вне выделенного буфера в функции smtp_setup_msg();
- CVE-2020-28021: Подстановка новой строки в заголовок спул-файла;
- CVE-2020-28022: Запись и чтение в области вне выделенного буфера в функции extract_option();
- CVE-2020-28026: Усечение и подстановка строки в функции spool_read_header();
- CVE-2020-28019: Сбой при сбросе указателя на функцию после возникновения ошибки BDAT;
- CVE-2020-28024: Переполнения через нижнюю границу буфера в функции smtp_ungetc();
- CVE-2020-28018: Обращение к буферу после его освобождения (use-after-free) в tls-openssl.c
- CVE-2020-28025: Чтение из области вне выделенного буфера в функции pdkim_finish_bodyhash().
- CVE-2020-28007: Атака через символическую ссылку в каталоге с логом Exim;
- CVE-2020-28008: Атаки на каталог со спулом;
- CVE-2020-28014: Создание произвольного файла;
- CVE-2021-27216: Удаление произвольного файла;
- CVE-2020-28011: Переполнение буфера в функции queue_run();
- CVE-2020-28010: Запись за границу буфера в функции main();
- CVE-2020-28013: Переполнение буфера в функции parse_fix_phrase();
- CVE-2020-28016: Запись за границу буфера в функции parse_fix_phrase();
- CVE-2020-28015: Подстановка новой строки в заголовок спул-файла;
- CVE-2020-28012: Отсутствие флага close-on-exec для привилегированного неименованного канала;
- CVE-2020-28009: Целочисленное переполнение в функции get_stdinput().
Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=55079