В командном интерпретаторе Bash выявлена опасная уязвимость (CVE-2014-6271), позволяющая организовать выполнение кода в контексте другого сеанса bash. Проблема вызвана недоработкой в организации экспорта переменных окружения и shell-функций в другие экземпляры bash, что приводит к выполнению блоков кода из специально оформленных переменных окружения, полученных от других процессов.

Во многих типовых конфигурациях уязвимость может быть эксплуатирована по сети, если bash вызывается в качестве shell-интерпретатора. Потенциально может быть атаковано любое приложение которые запускает bash или скрипты на bash с установкой переменных окружения на основе внешних данных (манипуляция с подобными suid-программами может привести к повышению привилегий в системе). В том числе могут быть атакованы CGI-скрипты (написанные на bash или в которых вызывается bash), DHCP-клиенты, системы печати на базе CUPS и конфигурации OpenSSH (например, системы доступа к репозиториям Git и Subversion, ограниченные выполнением одной команды через опцию ForceCommand).

Текущие версии bash используют переменные окружения для экспорта функций, при этом если в переменной содержится "() {", то её содержимое воспринимается как функция. Из-за ошибки, после завершения тела функции, обработка продолжается и после символа "}". Если после функции указана команда, то bash выполнит и её (например, "VAR=() { ignored; }; /bin/id"). Уязвимость проявляется для любых переменных окружения, имя не имеет значения.

В случае с OpenSSH атака может быть проведена через подстановку переменной окружения SSH_ORIGINAL_COMMAND:


ssh -o 'rsaauthentication yes' 0 '() { ignored; }; /usr/bin/id'
 

После выполнения указанной команды в переменную окружения будет скопирована в том числе строка '() { ignored; }; /usr/bin/id', которая инициирует запуск команды /usr/bin/id на стороне удалённой системы. Аналогичные атаки могут быть проведены через переменную окружения TERM или при запуске CGI-скриптов через переменные REMOTE_USER, HTTP_CUSTOM, QUERY_STRING и т.п. (например, можно передать значение "() {" вместо имени пользователя или в теле HTTP-заголовка "Custom:").

Для устранения проблемы подготовлена серия патчей. Обновления пакетов с bash уже выпущены для Debian, Ubuntu, RHEL, CentOS. Оценить появление обновлений для других систем можно на следующих страницах: Fedora, openSUSE, SLES, Slackware, Gentoo, OpenBSD, NetBSD, FreeBSD.

Для проверки системы на наличие уязвимости можно выполнить команду:


env x='() { :;}; echo vulnerable'
bash -c "echo this is a test"

В качестве обходного временного пути защиты может быть применена блокировка по маске через iptables:


iptables using -m string --hex-string '|28 29 20 7B|'

Дополнение 1: Выявлены методы (CVE-2014-7169) обхода патча, представленного вчера для устранения критической уязвимости в Bash. Для решения проблемы подготовлен новый патч. В дистрибутивах проблема пока остаётся неисправленной. Для проверки на наличие обходного пути эксплуатации уязвимости можно использовать команду (успешно срабатывает после установки вчерашнего обновления bash в Ubuntu и Debian):


env X='() { (a)=>\' sh -c "echo date"; cat echo

Дополнение 2: Проведена попытка массового сканирования серверов на предмет наличия уязвимости в Bash. Первый же эксперимент выявил около 3 тысяч хостов, подверженных уязвимости в Bash при запросе корневой страницы по IP, без заполнения заголовка Host (при полноценном сканировании с указанием корректных имён домена таких сайтов может оказаться в 50 раз больше). Организация целевых атак на конкретные CGI-скрипты, например, на /cgi-sys/defaultwebpage.cgi из CPanel позволяет как минимум в 10 раз расширить область действия атаки. Так как уязвимость очень проста в эксплуатации не исключается появление в ближайшее время червей, нацеленных на поражение конкретных проблемных CGI-скриптов.

Дополнение 3: Доступен PoC, показывающий взлом системы через DHCP-клиент при обработке параметров от подконтрольного злоумышленнику DHCP-сервера. Проблема усугубляется тем, что в большинстве случаев DHCP-клиент работает с правами root.

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