"Да это просто праздник какой-то!" (c)Карабас-Барабас
Проблема не в -1/0/1, а тупом преобразовании результата memcmp к некому типу my_bool (скорее всего, обычному char). Классическая реализация memcmp обрабатывает байт за байтом, с ней проблемы не будет. А оптимизированная небось обрабатывает по несколько байт за раз, вычитая полное слово - возвращает что-то типа 0x12345600 - последний байт 0x00 - добро пожаловать, люди добрые!
Некорректное приведение типов в процедуре проверки паролей ряда сборок MySQL и MariaDB приводит к тому, что с вероятностью 1/256 удается выполнить подключение, используя любой пароль - достаточно знать имя пользователя (ну а root-то там обычно бывает). Затронуты версии вплоть до 5.1.61, 5.2.11, 5.3.5, 5.5.22. Разумеется, во многих конфигурациях MySQL закрыт для всех коннектов снаружи, но так бывает далеко не всегда. Ну и героический брутфорс открывает все двери за пару-тройку сотен попыток, на что уйдет менее секунды.
Уязвимые версии собраны с использованием функции memcmp из оптимизированной под SSE линуксовой glibc. Встроенная memcmp из gcc незатронута, как и memcmp из BSDшной libc.
В пересчете на реальные операционные системы, затронуты 64-битные Ubuntu версий 10.04, 10.10, 11.04, 11.10, и12.04, Fedora и OpenSUSE 12.1. Чисты Debian, Gentoo...
"Да это просто праздник какой-то!" (c)Карабас-Барабас
Проблема не в -1/0/1, а тупом преобразовании результата memcmp к некому типу my_bool (скорее всего, обычному char). Классическая реализация memcmp обрабатывает байт за байтом, с ней проблемы не будет. А оптимизированная небось обрабатывает по несколько байт за раз, вычитая полное слово - возвращает что-то типа 0x12345600 - последний байт 0x00 - добро пожаловать, люди добрые!
да, я уже потом посмотрел. надо будет поправить13.06.12 16:39 Автор: dl <Dmitry Leonov>