Несколько часов назад в списке рассылки SecLists сообщили о критической уязвимости в командной оболочке bash, которая установлена почти на всех популярных дистрибутивах Linux.
Уязвимость допускает удалённое исполнение кода на компьютере, где установлен bash. Это связано с некорректной обработкой переменных окружения и определений функций. В текущих версиях bash переменная окружения именуется так же, как функция, а определение функции начинается со знаков “() {”. Уязвимость связана с тем, что bash не останавливается после обработки определения функции, а продолжает парсить код и выполнять команды оболочки, которые следуют дальше. Например, в переменной окружения
VAR=() { ignored; }; /bin/id
будет исполнен /bin/id
при импорте окружения в процесс bash.
Для проверки у себя можно запустить и такой код:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Таким образом, переменную окружения с произвольным именем можно использовать как носителя для доставки на компьютер жертвы нужных команд. В данный момент наиболее опасным применением этого бага считают HTTP-запросы к скриптам CGI.
Уязвимости присвоен идентификатор CVE-2014-6271.
Два часа назад Чет Рэми (Chet Ramey), официальный мейнтейнер GNU bash, выложил официальные патчи.
http://ftp.gnu.org/pub/gnu/bash/bash-3.0-patches/bash30-017
http://ftp.gnu.org/pub/gnu/bash/bash-3.1-patches/bash31-018
http://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052
http://ftp.gnu.org/pub/gnu/bash/bash-4.0-patches/bash40-039
http://ftp.gnu.org/pub/gnu/bash/bash-4.1-patches/bash41-012
http://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-048
http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-025
Уязвимость обнаружил несколько дней назад Стефан Чазелас (Stephane Chazelas).