网盾安全 - 服务器租用、高防IP、云WAf等

值得信赖的互联网安全服务商,最新动态、新的产品促销活动分享,网络安全动态!

请及时升级MySQL身份认证漏洞

发布时间:2020-12-10 14:24:22      来源: 网盾      作者: 夶夏

近期爆出了一个关于MySQL的安全漏洞,几乎影响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。

漏洞分析:

出问题的代码如下

/*

Check that scrambled message corresponds to the password; the function

is used by server to check that recieved reply is authentic.

This function does not check lengths of given strings: message must be

null-terminated, reply and hash_stage2 must be at least SHA1_HASH_SIZE

long (if not, something fishy is going on).

SYNOPSIS

check_scramble()

scramble     clients' reply, presumably produced by scramble()

message      original random string, previously sent to client

(presumably second argument of scramble()), must be

exactly SCRAMBLE_LENGTH long and NULL-terminated.

hash_stage2  hex2octet-decoded database entry

All params are IN.

RETURN VALUE

0  password is correct

!0  password is invalid

*/

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);

/* create key to encrypt scramble */

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);

/* encrypt scramble */

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

/* now buf supposedly contains hash_stage1: so we can get hash_stage2 */

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“。

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

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

请广大客户尽快升级MYsql 数据库软件.或参考:http://www.netshield.cn/support/3248/

有什么问题请及时与我们技术支持联系。

 

 

加入网盾,开启安全防护

网盾安全 高防服务器、游戏盾、DDoS高防IP、云WAF等多款安全产品

立即体验