Критическая уязвимость в bash, которая может привести к удалённому выполнению кода

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

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

Текущие версии 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|'

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.