Как украсть локальную базу данных у любого разработчика (bouk.co) 7 сентября 2016
Бауке ван дер Бейл показывает уязвимости, позволяющие любому сайту украсть данные из базы, работающей на компьютере посетителя. Уязвимы Redis, Memcached и Elasticsearch. Атака на них состоит из двух частей.
1. Межпротокольный скриптинг. У Redis и Memcached простой текстовый протокол, в котором игнорируются все невалидные команды. Это значит, что браузер может успешно выполнить такой HTTP-запрос к Redis, отправив его на localhost:6379
:
POST / HTTP/1.1
Host: localhost:6379
SET abc 123
QUIT
(В ближайшей версии Redis это поправят, но костыльно: команды POST
и Host:
станут алиасами для QUIT
.)
Протокол Elasticsearch основан на HTTP, поэтому запросы к нему можно делать без дополнительных хитростей.
Хотя браузер и может выполнить эти запросы, он не прочитает ответ из-за same-origin policy. Чтобы обойти это, используется вторая атака.
2. Перепривязка DNS. Когда браузер резолвит домен злого сайта, он получает ответ с маленьким временем жизни (например, 1 минута). Во время следующего (уже аяксового) запроса браузер снова резолвит этот домен, но вместо настоящего IP-адреса получает 127.0.0.1
. После этого код сайта сможет выполнять запросы на локальном компьютере без ограничений.
В сочетании с другой атакой на Redis злоумышленник способен не только украсть данные, но и исполнить произвольный код на компьютере жертвы. Например, перезаписав ей .bash_profile
.
Ван дер Бейл демонстрирует работоспособность атаки на extractdata.club.