MySQL最新漏洞分析

来源:站长家园 时间:2012-07-11 15:41:10 

在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时代。

标签:mysql,漏洞
0
投稿

猜你喜欢

  • 如何在页面错误时向数据库中添加记录?

    2010-06-26 12:26:00
  • 用javascript判断浏览器版本

    2008-04-21 13:50:00
  • 优化Oracle库表设计的若干方法

    2010-07-16 13:24:00
  • 按键标示的设计体验

    2008-08-27 12:06:00
  • 交互设计模式——分页

    2009-07-30 13:00:00
  • asp伪继承初探_实例代码

    2011-04-19 10:32:00
  • 产品交互原型设计工具分享

    2010-03-24 18:06:00
  • asp sql数据验证之特殊字符处理

    2008-02-24 16:35:00
  • 仿淘宝星级评分效果

    2010-09-03 18:37:00
  • 介绍讲解MySQL安装下载登录

    2010-10-25 20:34:00
  • windows7下调试ASP+ACCESS错误“未找到提供程序 该程序可能未正确安装”解决办法

    2009-12-26 18:35:00
  • Javascript特效--划过放大的列表

    2008-03-21 12:18:00
  • asp 实现的冒泡排序程序

    2011-03-25 11:13:00
  • 瞬间的设计 I

    2009-12-25 18:54:00
  • MySQL表设计优化与索引 (四)

    2010-10-25 19:50:00
  • MySQL的存储过程写法和Cursor的使用

    2008-12-03 15:55:00
  • eWebEditor不支持IE8/IE7的解决方法

    2010-02-28 10:27:00
  • 在SQL Server中处理空值时涉及的三个问题

    2009-02-05 15:30:00
  • ASP 使用jqGrid实现读写删的代码(json)

    2010-03-07 17:26:00
  • ASP 读取MP3文件帧的信息比特率,采样频率,播放时间

    2010-06-04 12:22:00
  • asp之家 网络编程 m.aspxhome.com