В утилите GNU grep обнаружена опасная уязвимость, которая проявляется при обработке специально оформленного входного потока и может быть использована для инициирования отказа в обслуживании, а также, возможно, для выполнения произвольного кода. Подвержены выпуски утилиты GNU grep до версии 2.11. В выпуске 2.11, вышедшем в начале марта 2012 года, эта уязвимость была исправлена, однако не было сделано никаких специальных анонсов о том, что ошибка имеет отношение к проблемам с безопасностью.

Проблема связана с переполнением памяти при обработке длинных строк (на архитектуре x86_64 длина опасной строки составляет порядка 2 Гб). Ошибка была случайно обнаружена одним из пользователей Ubuntu, который пытался обрабатывать grep'ом вывод команды "ls -la" на своем хосте. Уязвимости присвоен идентификатор CVE-2012-5667.

Простейший метод проверки наличия уязвимости (проблема присутствует, если после выполнения нижеприведённой команды выводится ошибка сегментирования):


$ perl -e 'print "x"x(2**31)' | grep x > /dev/null

Debian и Ubuntu на данный момент ещё не успели выпустить исправления. Однако, отдельные дистрибутивы, поставляющие свежие версии ПО, либо бэкпортирующие ключевые программы, не подвержены данной уязвимости (например, в Fedora 17 используется grep 2.14).

Опасность уязвимости усугубляется тем, что многие администраторы используют утилиту grep для автоматизированной обработки различных данных (в частности, системного лога). Часто такие процессы выполняются с административными привилегиями, что может оказаться фатальным в случае успешной атаки злоумышленника.

Дополнительно, стоит отметить, что в выпуске 2.11 присутствовали ещё как минимум два патча которые, возможно, исправляют не менее опасные уязвимости. В настоящее время в отношении них производится проверка.

Дополнение: вышеприведенный код для проверки на уязвимость дает положительный результат для утилиты GNU grep из состава FreeBSD, вариант утилиты grep под лицензией BSD не подвержен проблеме.

Источник: http://www.opennet.ru/opennews/art.shtml?num=35700