В Bash выявлено ещё четыре уязвимости, эксплуатируемые через переменные окружения
29 сентября 2014 года
В дополнение к изначальной выявленной уязвимости в Bash (CVE-2014-6271) и обходному методу атаки (CVE-2014-7169) исследователи безопасности выявили ещё три уязвимости, вызванные ошибками в реализации кода разбора функций. Так как разбор функций производится в Bash для всех переменных окружения, данные уязвимости также могут быть легко эксплуатированы через формирование специального содержимого, попадающего в переменные окружения. Уязвимости в bash последние дни появляются достаточно интенсивно и многие эксперты прогнозируют, что не все проблемы устранены. Для комплексной проверки систем на подверженность атакам Shellshock подготовлен универсальный скрипт.
Проблемы CVE-2014-7186 и CVE-2014-7187 обнаружены Флорианом Ваймером (Florian Weimer) из компании Red Hat, который сразу подготовил патч с исправлением. Проблемы вызваны некорректной обработкой операций с памятью при разборе выражений и позволяют обойти внесённые прошлыми патчами ограничения для организации выполнения кода. Кроме непосредственного устранения уязвимости патч включает и превентивную меру - вводит в обиход специальный префикс "BASH_FUNC_", при котором, в сочетании с наличием в имени суффикса "()", допускается разбор функций в переменных окружения. Для переменных не соответствующих маске "BASH_FUNC_имя()" обработка функций отключена. В связи с этим, дистрибутивы выпустили третью волну обновлений Bash, в том числе включающую привязку к именам "BASH_FUNC_имя()".
Протестировать наличие проблем CVE-2014-7186 и CVE-2014-7187 можно при помощи выражений:
bash -c "true $(printf '/dev/null if [ $? != 0 ]; then echo -e "Vulnerable to CVE-2014-7186" fi bash -c "`for i in {1..200}; do echo -n "for x$i in; do :;"; done; for i in {1..200}; do echo -n "done;";done`" 2/dev/null if [ $? != 0 ]; then echo -e "Vulnerable to CVE-2014-7187" fi
Интересно, что проблем удалось избежать в NetBSD и FreeBSD, так как после первой уязвимости сопровождающие порт с Bash полностью отключили поддержку передачи функций через переменные окружения, посчитав, что, в данном случае, безопасность важнее обратной совместимости.
Что касается пятой и шестой уязвимостей (CVE-2014-6277 и CVE-2014-6278), то их выявил Михаил Залевский (Michal Zalewski), известный польский эксперт в области компьютерной безопасности, работающий в Google. Информация о проблеме пока не придана огласке (ожидается включение исправлений в bash). Общий прогноз достаточно пессимистичен, так как при разборе кода функций в bash применяется большой универсальный пласт кода, который потенциально может предоставлять множество различных векторов для атак, так как данный код написан без оглядки на обработку данных, поступающих извне. Для решения проблемы рекомендовано использовать вышепредставленный патч Флориана с ограничением имён переменных, содержащих функции.
Кроме того, можно отметить статью разработчиков языка Perl, в которой описываются пути проявления уязвимости в perl-скриптах, запускаемых в системах, в которых bash используется как /bin/sh и $SHELL. Проблемы могут проявляться в скриптах, в которых используются вызовы system и exec без разделения аргументов или при открытии потока через open с перенаправлением вывода. Проблемы не специфичны для Perl и проявляются в любых других языках, позволяющих выполнять команды с использованием командной оболочки.
Также опубликован дополнительный анализ возможных серверных систем, в которых не исключено проведение атаки Shellshock. Кроме уже упоминавшихся атак на DHCP-клиенты, CGI-скрипты и ssh-аккаунты для Git/Subversion, в обзоре утверждается о вероятном проявлении проблемы в OpenVPN (при соединении с сервером злоумышленника), Exim, qmail, procmail, Mailfilter, SER, Phusion Passenger, Radius-серверах и службах Inetd (например, tcpserver). Не подвержены проблеме Postfix, stunnel, OpenBSD inetd и xinetd.
Дополнение 1: Доступен бинарный патч ( ещё один), который можно использовать для правки исполняемого файла, когда нет возможности пересобрать его из исходных текстов или установить обновление.
Дополнение 2: Патч для ядра Linux, вырезающий "() {" из переменных окружения.
Дополнение 3: Опубликована коллекция подтверждённых и потенциально возможных прототипов атак на различные виды ПО.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.