Обнаружена критическая уязвимость в Glibc

В системной библиотеке Glibc выявлена критическая уязвимость (CVE-2015-0235), которая может использоваться для организации выполнения кода в системе и проявляется при обработке специально оформленных данных в функциях gethostbyname() и gethostbyname2(), которые используются во многих программах для преобразования имени хоста в IP-адрес.

По степени опасности уязвимость, которая получила кодовое имя GHOST, сравнима с уязвимостями в Bash и OpenSSL. Для демонстрации уязвимости подготовлен рабочий прототип эксплоита, позволяющий организовать удалённое выполнение кода на почтовом сервере Exim, обойдя все доступные механизмы дополнительной защиты (ASLR, PIE, NX) на 32- и 64-разрядных системах, сообщает opennet.ru.

Проблема вызвана переполнением буфера в функции __nss_hostname_digits_dots(), используемой в gethostbyname() и gethostbyname2(). Несмотря на то, что вызовы gethostbyname() и gethostbyname2() устарели (следует использовать getaddrinfo()), они продолжают применяться для преобразования имени хоста во многих актуальных приложениях. Атака затруднена в серверных программах, которые используют gethostbyname() для обратной проверки данных, полученных через DNS, а также в привилегированных suid-утилитах, в которых вызов getaddrinfo() применяется только при сбое выполнения inet_aton(). Опасность представляют в основном приложения, передающие в getaddrinfo() данные, полученные извне, такие как почтовые серверы и манипулирующие именами хостов утилиты. Например, уязвимость подтверждена в Exim (при использовании настроек "helo_verify_hosts", "helo_try_verify_hosts" или ACL "verify = helo"), procmail и clockdiff.

Примечательно, что проблема присутствует в коде Glibc начиная с версии 2.2, выпущенной в ноябре 2000 года. При этом проблема была молча устранена в мае 2013 года без указания на то, что исправленная ошибка имеет отношение к серьёзным проблемам с безопасностью. Glibc 2.18 и более новые выпуски не подвержены уязвимости. Уязвимость не проявляется в дистрибутивах, построенных на основе свежих версий Glibc, например, в последних версиях Fedora и Ubuntu.

При этом, уязвимости подвержены длительно поддерживаемые промышленные дистрибутивы, которые требуют незамедлительного обновления. В частности, проблема проявляется в Debian 7 (wheezy), Red Hat Enterprise Linux 6 и 7, CentOS 6 и 7, Ubuntu 10.04 и 12.04, SUSE Linux Enterprise 10 и 11. В настоящее время обновление уже выпущено для Ubuntu 10.04/12.04, Debian 7 и RHEL 7,6,5. На стадии подготовки обновления для SUSE и CentOS. После обновления glibc следует не забыть перезапустить сетевые приложения.