На днях было заявлено об обнаружении новой уязвимости glibc, затрагивающей значительную часть прикладного ПО на Linux-системах, включая почтовые и веб-сервера. Также были опубликованы подробности атаки на EXIM-сервер.
Уязвимость связана с переполнением буфера в функциях gethostname
библиотек glibc. Эти функции вызываются всеми прикладными программами, когда необходимо обработать входящий хост запроса (т.е. при значительном количестве пользовательских запросах). Переполнение памяти в совокупности со специально подобранными последующими запросами позволяет выполнять произвольный код на атакуемой системе (находящейся под управлением Linux систем).
Как защититься?
Если у вас есть контроль над серверным окружением, то необходимо выполнить обновление всех системных библиотек и перезапустить службы. Это устранит уязвимость сервера. Если контроля над серверным окружением у вас нет, то необходимо написать вашему хостинг провайдеру о необходимости обновления.
Если возможности полностью перезапустить сервер нет, то можно обновить все службы, использующие уязвимую библиотеку:
lsof | grep libc | awk '{print $1}' | sort | uniq
После этого получить список запущенных служб :
service --status-all | grep running
И последовательно перезапустить каждую службу.
Подробнее о процессе обновления можно прочитать здесь. Все сервера Айри уже обновлены и полностью защищают хостинг ваших сайтов от этой угрозы.
Техническая подробности
Команда Openwall подготовила детальное исследование, как указанная уязвимость может быть использована и почему она настолько опасна. К счастью, использование уязвимости существенно зависит от приложение, на котором она будет эксплуатироваться. И требуется глубоко изучить архитектуру работы с памятью как приложения, так и операционной системы, чтобы корректно воспользоваться «дырой».
Переполнение памяти возможно при использование очень длинных IPv4 адресов в качестве хоста, который должен проверяться системой (например, при проверке Reverse DNS). В этом случае возможна перезапись нескольких битов в следующем за IP-адресом блоке памяти, что можно использовать, зная процесс выделение памяти в приложении. В частности, для EXIM-сервера возможно следующая ситуация:
|< malloc_chunk |< malloc_chunk | | -----|----------------------|---------------------+-------|----------+----|----- ... | gethostbyname buffer |p|s|f|b|F|B| aaaaaaa |p|s|f|b|F|B| r message | ... -----|----------------------|---------------------+-------|----------+----|----- | | X | |<------------------->|< ---------------->| allocated chunk free chunk
Пока неизвестны корректные векторы атаки для других приложений — например, SSH, Apache или nginx — но их все нужно обновить во избежание угрозы.