Критическая уязвимость в 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: Доступен бинарный патч ( ещё один), который можно использовать для правки исполняемого файла, когда нет возможности пересобрать его из исходных текстов или установить обновление.

Источники[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Критическая уязвимость в bash, которая может привести к удалённому запуску команд (дополнено)», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.