mysql 漏洞升级_MySQL身份认证漏洞 升级到5.5.24可修正

我今天早上打开电脑,在seclists中看到一个很惊人的thread:seclists/oss-sec/2012/q2/493MySQL爆出了一个很大的安全漏洞,几乎影响5.1至5.5的所有版本。出问题的模块是登录时密码校验的部分(password.c),在知道用户名的环境下(如root),直接反复重试(平均大约256次)即可登入。不过,MySQL身份认证的时候是采用3元组,username,ip,password。如果client的IP在mysql.user表中找不到对应的,也无法登陆。

这个BUG实际上早在4月份就被发现了,本年5月7号,MySQL发布5.5.24的时候,修正了这个BUG。

漏洞分析:

my_bool

check_scramble(const uchar *scramble_arg, const char

*message,

const uint8 *hash_stage2)

{

SHA1_CONTEXT sha1_context;

uint8 buf[SHA1_HASH_SIZE];

uint8 hash_stage2_reassured[SHA1_HASH_SIZE];

mysql_sha1_reset(&sha1_context);

mysql_sha1_input(&sha1_context, (const uint8 *)

message, SCRAMBLE_LENGTH);

mysql_sha1_input(&sha1_context, hash_stage2,

SHA1_HASH_SIZE);

mysql_sha1_result(&sha1_context, buf);

my_crypt((char *) buf, buf, scramble_arg, SCRAMBLE_LENGTH);

mysql_sha1_reset(&sha1_context);

mysql_sha1_input(&sha1_context, buf,

SHA1_HASH_SIZE);

mysql_sha1_result(&sha1_context,

hash_stage2_reassured);

return memcmp(hash_stage2, hash_stage2_reassured,

SHA1_HASH_SIZE);

}

memcmp的返回值实际上是int,而my_bool实际上是char。上海到黄山那么在把int转换成char的时候,就有可能发生截断。比如,memcmp返回0×200,截断后酿成了0,调用check_scramble函数的就误以为“password

is correct“。

原文链接: udpwork/redirect/7463

出问题的代码以下

但是一般来说,memcmp的返回值都在[127,-128]之内。glibc的经SSE优化后的代码,不是如此。所以这个BUG只在特定的编译环境下才会触发:即编译MySQL的时候加了-fno-builtin,并且所利用的glibc是经SSE优化后的(一般系统自带的都是如此)。这里所说的glibc是指Linux的glibc,黄山醉温泉FreeBSD的libc不受影响。

总的来说这个BUG照样比较严重的,上次MySQL出现这样的BUG照样在3.23/4.0时代。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值