Исследователи Google Project Zero и Red Hat сообщили о выявлении опасной проблемы в составе GNU C Library (glibc), которая используется практически во всех популярных дистрибутивах Linux. Баг найден в составе DNS-преобразователя и срабатывает в результате вызова функции getaddrinfo(). Фактически он позволяет спровоцировать стековое переполнение буфера и исполнение вредоносного кода.
Исследователи выяснили, что злоумышленники, оперирующие вредоносным DNS-сервером, могут направить в ответ на lookup-запрос излишнее количество данных, что вызовет переполнение буфера, скомпрометирует приложение или вообще всю систему в целом.
Хакерам даже не обязательно заниматься компрометацией реального DNS-сервера: атаку можно осуществить и посредством man-in-the-middle атаки, перехватив DNS-запрос пользователя и подделав ответ.
Эксперты опубликовали proof-of-concept код, демонстрирующий эксплуатацию уязвимости. Эксплоит для удаленного исполнения вредоносного кода специалисты обнародовать не стали, лишь отметили, что провернуть это будет уже не так просто: понадобится обойти ASLR и другие средства защиты.
По сути, исследователи обнаружили новый способ эксплуатации старого бага CVE-2015-7547, который присутствует в glibc после версии 2.9, вышедшей в мае 2008 года. Проблему заметили еще в июле 2015 года, однако выпускать исправление тогда никто не спешил. Только теперь, после того как эксперты Project Zero и Red Hat нашли столь разрушительный способ использования бага, команда разработки glibc выпустила патч.
К сожалению, glibc используется в бессчетном количестве приложений. Библиотека применяется на десктопах, в дата-центрах, сетевом оборудовании и IoT-устройствах. Так как исправления для популярных дистрибутивов Linux и другого ПО могут появиться не сразу, исследователи рекомендуют пока ограничить TCP DNS-ответы 1024 байтами и не принимать пакеты UDP DNS больше 512 байт.
С подробным отчетом экспертов Project Zero можно ознакомиться здесь. Анализ специалистов Red Hat можно найти здесь.