Мир: В библиотеке glibc обнаружена критическая уязвимость

2

Исследователи Google совместно с инженерами Red Hat обнаружили опасную уязвимость в библиотеке glibc, позволяющую удаленному пользователю выполнить произвольный код на целевой системе. Как сообщается в блоге компании, злоумышленник может вызвать переполнение стекового буфера и скомпрометировать систему.


Уязвимость CVE-2015-7547 обнаружил анонимный инженер Google. По словам специалиста, при подключении к определенному хосту происходило аварийное завершение работы клиента SSH. После проведенного расследования специалисты обнаружили ошибку в библиотеке glibc, использующейся в данном клиенте.

Клиентский механизм разрешения DNS подвержен уязвимости переполнения стекового буфера при использовании функции getaddrinfo(). Удаленный пользователь может выполнить произвольный код с помощью специально сформированного ответа UDP или TCP. Следующий за данным ответом запрос вызовет переполнение стекового буфера. Для успешной эксплуатации уязвимости также необходимо обойти ограничения ASLR.

glibc резервирует 2048 байтов в стеке с помощью функции alloca() для DNS-ответа на _nss_dns_gethostbyname4_r() для хранения ответов на DNS-запрос. Проблема присутствует в функциях send_dg() и send_vc(). Если размер ответа превышает 2048 байт, из динамической памяти выделяется новый буфер и происходит обновление информации об указателе буфера, новом размере буфера и размере ответа.

В некоторых случаях может произойти несоответствие между стековым буфером и новым размещением динамической памяти. В результате стековый буфер будет использоваться для хранения DNS-запроса, даже если размер данного запроса больше стекового буфера. Подобное поведение приведет к переполнению буфера. Уязвимость затрагивает все версии glibc, начиная с 2.9. Для устранения ошибки необходимо установить обновление, доступное в репозитории исходного кода Sourceware. (Google/NovostIT)