GHOST — уязвимость gethostbyname() в glibc

Специалисты Qualys сообщили о наличии уязвимости в gethostbyname () и gethostbyname2() в GNUC Library (glibc), которая, как минимум в одном случае, способна привести к удаленному выполнению кода. Уязвимость позволяет перезаписать до 4 байт на 32-битных системах и до 8 байт на 64-битных системах в куче числами (0…9), точкой (.) и NULL-символом (0×00).Уязвимость появилась в версии glibc-2.2 от 10 ноября 2000 года и была закрыта в версии 21 мая 2013 года с glibc-2.18, поэтому уязвимы только LTS-дистрибутивы Linux: Debian 7, Red Hat Enterprise Linux 6 и 7, CentOS 6 и 7, Ubuntu 12.04.

Уязвимым является код, который отвечает за получение hostname. Для перезаписи кучи, имя хоста должно удовлетворять следующим условиям:

Содержать в себе только цифры и точку Первый символ должен быть цифрой Последний символ не должен быть точкой Быть достаточно длинным, чтобы переполнить буфер (>1КБ) Следует заметить, что опасность эксплуатации значительно снижается из-за двух факторов: вызов gethostbyname () является устревшим из-за отсутствия поддержки IPv6, поэтому ПО чаще использует getaddrinfo (), чем его; вызов inet_aton () перед gethostbyname () предотвращает уязвимость.Несмотря на эти два фактора, ребятам из Qualys удалось осуществить удаленное выполнение кода в exim4, перезаписав размер выделенного буфера и использовав встроенный в exim4 вызов $run{}. Обещают в скором времени выложить эксплоит для metasploit.В других реализациях libc (uclibc, musl) уязвимость отсутствует.

CVE-2015–0235Страница на qualys.comПодробное описание в рассылке oss-security

© Habrahabr.ru