Опубликованы сведения о критической уязвимости (CVE-2016-6662) в MySQL и производных продуктах, таких как MariaDB и Percona Server. Уязвимость позволяет локально или удалённо атаковать сервер MySQL и повысить свои привилегии до пользователя root.

Смягчает опасность то, что для эксплуатации требуется аутентифицированный доступ к БД или проведение дополнительной атаки на web-приложения, в результате которой необходимо получить возможность подстановки SQL-кода. Усугубляет проблему то, что опубликован начальный прототип эксплоита (полный эксплоит планируется опубликовать позднее, дав время на выпуск обновления), в то время как сама уязвимость проявляется во всех ветках MySQL. Проблема устранена в выпусках MySQL 5.7.15, 5.6.33 и 5.5.52, а также в MariaDB 10.0.27 и Percona Server 5.7.14-7. Обновления пакетов с прошлыми версиями mysql/mariadb в дистрибутивах пока не выпущены (Ubuntu, Debian, RHEL, FreeBSD, CentOS, Fedora, SUSE). Применяемые по умолчанию правила SELinux и AppArmor не влияют на результаты атаки.

Сама по себе выявленная уязвимость позволяет любому пользователю СУБД с правами на выполнение операций SELECT/FILE (без прав FILE можно обойтись, но информация об обходе будет опубликована позднее под CVE-2016-6663) получить доступ к функциям работы с логами, которые должны быть доступны только пользователю admin. Через манипуляции с функциями записи в лог атакующий может изменить или создать файл конфигурации my.cnf. Если для файла my.cnf запрещена запись от пользователя mysql, то атакующий может создать новый файл в директории с данными (/var/lib/mysql), которая по умолчанию допускает запись для пользователя mysql.

Возможность выполнения кода с правами root достигается через добавление к конфигурацию конструкции, загружающей подставную библиотеку при очередном перезапуске mysql. В частности, процесс mysqld работает от непривилегированного пользователя, но при запуске используется скрипт mysqld_safe с правами root. В mysqld_safe среди прочего можно загрузить альтернативную библиотеку с реализацией функций malloc. Имя библиотеки передаётся через параметр "malloc_lib/--malloc-lib=LIB", который может быть определён в секциях '[mysqld]' и '[mysqld_safe]' файла конфигурации my.cnf. Таким образом, атакующий, имеющий возможность записи в my.cnf, может инициировать загрузку любой библиотеки с правами root.

Интересно, что атака через правку my.cnf не нова и в 2003 году уже исправлялась в выпуске 3.23.55 (эксплуатация сводилась к выполнению "SELECT * INFO OUTFILE '/var/lib/mysql/my.cnf'). Новая атака позволяет использовать функции записи в лог, например: "set global general_log_file = '/var/lib/mysql/my.cnf'; set global general_log = on; select 'malloc_lib=/var/lib/mysql/mysql_hookandroot_lib.so'; set global general_log = off;".

Источник: http://www.opennet.ru/opennews/art.shtml?num=45127