Критическая уязвимость в bash, которая может привести к удалённому запуску команд (дополнено)
24 сентября 2014 года
В командном интерпретаторе Bash выявлена опасная уязвимость (CVE-2014-6271), позволяющая организовать выполнение кода в контексте другого сеанса bash. Проблема вызвана недоработкой в организации экспорта переменных окружения и shell-функций в другие экземпляры bash, что приводит к выполнению блоков кода из специально оформленных переменных окружения, полученных от других процессов.
Во многих типовых конфигурациях уязвимость может быть эксплуатирована по сети, если bash вызывается в качестве shell-интерпретатора. Потенциально может быть атаковано любое приложение которые запускает bash или скрипты на bash с установкой переменных окружения на основе внешних данных (манипуляция с подобными suid-программами может привести к повышению привилегий в системе). В том числе могут быть атакованы CGI-скрипты (написанные на bash или в которых вызывается bash), DHCP-клиенты (Архивная копия от 25 сентября 2014 на Wayback Machine), системы печати на базе 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 (Архивная копия от 6 октября 2014 на Wayback Machine), 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 (Архивная копия от 25 сентября 2014 на Wayback Machine), показывающий взлом системы через DHCP-клиент при обработке параметров от подконтрольного злоумышленнику DHCP-сервера. Проблема усугубляется тем, что в большинстве случаев DHCP-клиент работает с правами root.
Дополнение 4: Выявлено ещё 4 уязвимости и представлены векторы атак для OpenVPN (при соединении с сервером злоумышленника), Exim, qmail, procmail, Mailfilter, SER, Phusion Passenger, Radius-серверов и служб Inetd (например, tcpserver). Не подвержены проблеме Postfix, stunnel, OpenBSD inetd и xinetd.
Дополнение 5: Доступен бинарный патч ( ещё один), который можно использовать для правки исполняемого файла, когда нет возможности пересобрать его из исходных текстов или установить обновление.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.