Найдена "смешная" уязвимость в MySQL под Linux 64-bit

12.06.2012 | 10:34
Найдена
В субботу координатор по безопасности проекта MariaDB Сергей Голубчик (petropavel) сообщил об интересной уязвимости в MySQL/MariaDB до версий 5.1.61, 5.2.11, 5.3.5, 5.5.22.

Суть в том, что при подключении пользователя MariaDB/MySQL вычисляется токен (SHA поверх пароля плюс хэш), который сравнивается с ожидаемым значением. При этом функция memcmp() должна возвращать значение в диапазоне -128..127, но на некоторых платформах (похоже, в glibc в Linux с оптимизацией под SSE) возвращаемое значение может выпадать из диапазона.

В итоге, в 1 случае из 256 процедура сравнения хэша с ожидаемым значением всегда возвращает значение true, независимо от хэша. Другими словами, система уязвима перед случайным паролем с вероятностью 1/256.

В итоге, простая команда на bash даёт злоумышленнику рутовый доступ к уязвимому серверу MySQL, даже если он не знает пароль.

$ for i in `seq 1 1000`; do mysql -u root --password=bad -h 127.0.0.1 2>/dev/null; done
mysql>


На данный момент наличие уязвимости неофициально подтверждено в следующих конфигурациях:

Ubuntu Linux 64-bit (10.04, 10.10, 11.04, 11.10, 12.04)
Debian Linux 64-bit (пока непонятно, в каких конкретно версиях)
Arch Linux (то же самое)
Fedora 16 (64-bit)

Пользователи также сообщают конфигурации, в которых уязвимость вроде бы не наблюдается:

Официальные билды MySQL и MariaDB (включая Windows)
Red Hat Enterprise Linux, CentOS (32-bit и 64-bit)
Ubuntu Linux 32-bit (10.04, 11.10, 12.04, вероятно все)
Debian Linux 6.0.3 64-bit (Version 14.14 Distrib 5.5.18)
Debian Linux lenny 32-bit 5.0.51a-24+lenny5
Debian Linux lenny 64-bit 5.0.51a-24+lenny5
Debian Linux lenny 64-bit 5.1.51-1-log
Debian Linux squeeze 64-bit 5.1.49-3-log
Debian Linux squeeze 32-bit 5.1.61-0+squeeze1
Debian Linux squeeze 64-bit 5.1.61-0+squeeze1

Точного списка уязвимых и неуязвимых систем нет.

Джошуа Дрейк из компании Accuvant Labs опубликовал программу для проверки на уязвимость.
уязвимость, MySQL, Linux 64-bit
По материалам habrahabr.ru
Лента новостей: FacebookLiveJournalЯндекс

Комментарии (1)
  1. Добавлено Демон 13.06.2012 | 00:52FreeBSD 8.2-STABLE от 03.01.2012 (32-бит). Программа для проверки говорит что уязвимость есть, но доступ поучить не удается. Испоьзова немного модифицированный скрипт, потому как bash у меня нет.

    #!/bin/sh

    i=1

    while [ $i -le 1000 ]
    do
    mysql -u root --password=bla -h 127.0.0.1
    i=$(($i+1))
    done
Оставьте комментарий:CaptchaОбновить проверочный код