SQL吧 网站源码下载 企业网站源码下载 免费网站源码下载

当前位置: 主页 > 教程 > 数据库 > Mysql教程 >

MySQL最新漏洞分析

时间:2013-04-15 14:18来源:网络整理 作者:SQL吧 点击:
MySQL最新漏洞分析
企业站建365全包!先制作!后付款!600多套模版任你选择!晴网www.138.la专注企业站建仿站、域名、空间、云主机、服务器, 咨询电话:020-29031983 qq:2769485357 在seclists中看到一个很惊人的thread:http://seclists.org/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);

  /* 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时代。

(责任编辑:编辑部)
顶一下
(0)
0%
踩一下
(0)
0%
0
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
栏目列表
推荐内容