Уязвимость в MySQL: простой SELECT дает неограниченные права на исполнение
9К открытий9К показов
В понедельник была опубликована информация от польского исследователя Давида Голунски о двух критических уязвимостях, которые он обнаружил. Уязвимости относятся ко всем версиям MySQL, включая последние (5.5, 5.6 и 5.7), а так же к клонам MySQL — MariaDB и Percona DB.
Что за уязвимость?
Уязвимость позволяет запустить стороннюю библиотеку с root-правами, а для её эксплуатации необходим доступ к СУБД с возможностью выполнять операции SELECT
и FILE
. Эта уязвимость получила код CVE-2016-6662. После её исправления Давид пообещал сообщить о ещё одной уязвимости (которая должна получить код CVE-2016-6663), которая позволяет делать то же самое, но уже без прав FILE
.
Самое главное — патчи уже есть?
Да, патчи уже есть: 5.5.52, 5.6.33 and 5.7.15.
Отлично. А как это работает?
Через изменение конфигурационных файлов с помощью операций логирования. Выглядит это примерно так:
После чего в файле /etc/my.conf
появятся строки:
И при следующем запуске MySQL указанная библиотека будет запущена от имени суперпользователя. Заметим, что в целом идея атак через правку my.conf не нова. Так, например, в 2003 году в выпуске 3.23.55 уже исправлялась эксплуатация через SELECT * INFO OUTFILE '/var/lib/mysql/my.cnf'
. Упоминание этого можно найти в описании обновления одного сервиса.
И что, уже даже есть готовый эксплойт?
Да, есть. Однако, он не содержит эксплуатации части обнаруженных Давидом уязвимостей, которые позволили бы проводить атаку без прав FILE
, не имея доступа к записи в my.conf
.
Но это же не полноценная уязвимость, а лишь возможность злоупотребить правами
Да, многие придерживаются такой же точки зрения. Тем не менее, права на выполнение запроса SELECT
и на запуск исполняемого файла с root-правами — сильно разные вещи, и возможность такого «злоупотребления» должна быть устранена. Заметим, что уже сейчас есть возможность не перезаписывать существующий конфигурационный файл в директории, права на работу с которой есть только у root’а, а создать новый в папке /var/lib/mysql
, права на запись в которую (естественно) есть у пользователя mysql
по умолчанию.
Каким образом исправили уязвимость?
Теперь для mysql_safe
аргумент --malloc-lib
должен принадлежать к одной из следующих директорий: /usr/lib, /usr/lib64, /usr/lib/i386-linux-gnu или /usr/lib/x86_64-linux-gnu. Опции --mysqld
и --mysqld-version
могут теперь применяться только к запуску из командной строки, и не могу быть описаны в конфигурационных файлах. Кроме этого, файлы с расширениями .ini или .cnf теперь не могут быть использованы для записи функциями логирования.
9К открытий9К показов