Pull to refresh
0
Digital Security
Безопасность как искусство

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

Reading time 1 min
Views 18K
Специалисты Qualys сообщили о наличии уязвимости в gethostbyname() и gethostbyname2() в GNU
C Library (glibc), которая, как минимум в одном случае, способна привести к удаленному выполнению кода. Уязвимость позволяет перезаписать до 4 байт на 32-битных системах и до 8 байт на 64-битных системах в куче числами (0…9), точкой (.) и NULL-символом (0x00).

Уязвимость появилась в версии 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) уязвимость отсутствует. Eglibc уязвим.

CVE-2015-0235
Страница на qualys.com
Подробное описание в рассылке oss-security
Tags:
Hubs:
+24
Comments 25
Comments Comments 25

Articles

Information

Website
dsec.ru
Registered
Founded
Employees
51–100 employees
Location
Россия