发布日期:2003-09-10
更新日期:2003-09-15
受影响系统:
MySQL AB MySQL 4.0.9
MySQL AB MySQL 4.0.8
MySQL AB MySQL 4.0.7
MySQL AB MySQL 4.0.6
MySQL AB MySQL 4.0.5a
MySQL AB MySQL 4.0.5
MySQL AB MySQL 4.0.4
MySQL AB MySQL 4.0.3
MySQL AB MySQL 4.0.2
MySQL AB MySQL 4.0.14
MySQL AB MySQL 4.0.13
MySQL AB MySQL 4.0.12
MySQL AB MySQL 4.0.11
MySQL AB MySQL 4.0.10
MySQL AB MySQL 4.0.1
MySQL AB MySQL 4.0.0
MySQL AB MySQL 3.23.9
MySQL AB MySQL 3.23.8
MySQL AB MySQL 3.23.57
MySQL AB MySQL 3.23.56
MySQL AB MySQL 3.23.55
MySQL AB MySQL 3.23.54
MySQL AB MySQL 3.23.53a
MySQL AB MySQL 3.23.53
MySQL AB MySQL 3.23.52
MySQL AB MySQL 3.23.51
MySQL AB MySQL 3.23.50
MySQL AB MySQL 3.23.5
MySQL AB MySQL 3.23.49
MySQL AB MySQL 3.23.48
MySQL AB MySQL 3.23.47
MySQL AB MySQL 3.23.46
MySQL AB MySQL 3.23.45
MySQL AB MySQL 3.23.44
MySQL AB MySQL 3.23.43
MySQL AB MySQL 3.23.42
MySQL AB MySQL 3.23.41
MySQL AB MySQL 3.23.40
MySQL AB MySQL 3.23.4
MySQL AB MySQL 3.23.39
MySQL AB MySQL 3.23.38
MySQL AB MySQL 3.23.37
MySQL AB MySQL 3.23.36
MySQL AB MySQL 3.23.34
MySQL AB MySQL 3.23.31
MySQL AB MySQL 3.23.30
MySQL AB MySQL 3.23.3
MySQL AB MySQL 3.23.29
MySQL AB MySQL 3.23.28 gamma
MySQL AB MySQL 3.23.28
MySQL AB MySQL 3.23.27
MySQL AB MySQL 3.23.26
MySQL AB MySQL 3.23.25
MySQL AB MySQL 3.23.24
MySQL AB MySQL 3.23.23
MySQL AB MySQL 3.23.2
MySQL AB MySQL 3.23.10
不受影响系统:
MySQL AB MySQL 4.0.15
描述:
--------------------------------------------------------------------------------
MySQL是一款开放源代码关系型数据库系统。
MySQL中一个涉及到密码检查的函数缺少正确的边界缓冲区检查,本地或者远程攻击者可以利用这个漏洞对MySQL进行缓冲区溢出攻击,可造成拒绝服务或者以MySQL进程权限在系统上执行任意指令。
MySQL用户的Passwords存储在"mysql"数据库中的"User"表中,这些密码存储在密码字段通过HASH后以16个字符长度十六进度形式存储。但是设计到密码检查的函数没有进行正确边界检查,如果使用的"Password"字段超过16个字符,可发生缓冲区溢出。
sql/password.c中定义的get_salt_from_password()函数接受任意长的HEX密码并返回任意长数组值,在传递这些密码HASH值到sql/sql_acl.cc进行处理时没有进行正确缓冲区检查,可在acl_init()函数中触发缓冲区溢出。
<*来源:Jedi/Sector One (j@pureftpd.org)
链接http://marc.theaimsgroup.com/?l=bugtraq&m=106323221912927&w=2
*>
测试方法:
--------------------------------------------------------------------------------
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
Jedi/Sector One (j@pureftpd.org)提供了如下测试方法:
> USE mysql;
> ALTER TABLE User CHANGE COLUMN Password Password LONGTEXT;
> UPDATE User SET Password =
123456781234567812345678123456781234567812345678123456781234567812345678
123456781234567812345678123456781234567812345678123456781234567812345678
123456781234567812345678123456781234567812345678123456781234567812345678
12345678123456781234567812345678... WHERE User = abcd;
> FLUSH PRIVILEGES;
建议:
--------------------------------------------------------------------------------
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* MySQL 4.0.14第三方补丁如下:
--- 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",
厂商补丁:
MySQL AB
--------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载升级到MySQL 4.0.15:
http://www.mysql.com/downloads/mysql-4.0.html