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
投稿

猜你喜欢

  • Javascript模拟加速运动与减速运动代码分享

    2024-06-07 15:27:46
  • python实现好看的时钟效果

    2021-02-11 23:44:25
  • 详解mysql 使用left join添加where条件的问题分析

    2024-01-15 18:30:27
  • Bootstrap轮播插件简单使用方法介绍

    2024-04-27 15:19:06
  • Python数据获取实现图片数据提取

    2022-08-15 03:37:30
  • Python 面向对象之封装、继承、多态操作实例分析

    2021-04-09 10:03:54
  • Python面向对象编程(三)

    2021-10-09 18:28:06
  • JavaScript实现的反序列化json字符串操作示例

    2024-04-10 10:46:01
  • 查询SQLServer启动时间的三种方法

    2024-01-15 18:15:42
  • div中class与id的区别及应用

    2007-09-22 08:37:00
  • 对python中大文件的导入与导出方法详解

    2021-02-11 12:32:47
  • python中的断言(assert语句)

    2022-05-21 12:04:56
  • Python新手学习标准库模块命名

    2021-01-16 05:18:06
  • mysql 设置默认的时间值

    2024-01-18 02:49:46
  • Python实现读取txt文件并转换为excel的方法示例

    2023-07-25 15:20:16
  • 浅谈java里的EL表达式在JSP中不能解析的问题

    2023-06-20 11:55:05
  • 《细节决定交互设计的成败》

    2009-06-02 11:23:00
  • python实现简单反弹球游戏

    2021-05-06 23:25:45
  • 基于Python的自媒体小助手---登录页面的实现代码

    2021-12-27 16:46:17
  • 深入了解Golang包的获取方法

    2024-03-23 14:34:30
  • asp之家 网络编程 m.aspxhome.com