安全研究

安全漏洞
MySQL/MariaDB用户验证绕过漏洞

发布日期:2012-06-10
更新日期:2012-06-11

受影响系统:
MySQL AB MySQL < 5.6.6
MySQL AB MySQL < 5.5.24
MySQL AB MySQL < 5.1.63
MariaDB MariaDB < 5.5.23
MariaDB MariaDB < 5.3.6
MariaDB MariaDB < 5.2.12
MariaDB MariaDB < 5.1.62
描述:
BUGTRAQ  ID: 53911
CVE ID: CVE-2012-2122

MySQL是一款流行的开源数据库。MariaDB是为MySQL提供偶然替代功能的数据库服务器。

MariaDB 5.1.62, 5.2.12、5.3.6、5.5.23之前版本和MySQL 5.1.63、5.5.24、5.6.6之前版本在用户验证的处理上存在安全漏洞,可能导致攻击者无需知道正确口令就能登录到MySQL服务器。

用户连接到MariaDB/MySQL后,应用会计算和比较令牌值。漏洞发生在password.c文件中的check_scramble()函数,其使用了memcmp()
函数来检查用户输入的密码是否正确,由于memcmp()函数返回值为int类型(返回值为0代表被比较的数据相同),而check_scramble()函数的返回值为my_bool类型(1 byte),在int类型转换为my_bool类型时会出现数据截断。在可能存在问题的memcmp实现中,会导致虽然被比较的两个缓冲区数据不同,但经过平均大约256次尝试,就可使得截断后的数据为零。从而绕过了登录检查,可以无需有效密码即可远程登录数据库。

目前已知Mysql官方发布的二进制包不受此问题影响。而在一些开启了glibc sse优化的Linux平台上,gcc编译时选择了-fno-built选项(不使用内置函数)的mysql版本则会受此问题影响。

<*来源:Sergei Golubchik
  
  链接:http://seclists.org/oss-sec/2012/q2/493
        http://pastie.org/4064638
        https://community.rapid7.com/community/metasploit/blog/2012/06/11/cve-2012-2122-a-tragically-comedic-security-flaw-in-mysql
        http://bugs.mysql.com/bug.php?id=64884
        http://www.reddit.com/r/netsec/comments/uvfg6/security_vulnerability_in_mysqlmariadb/
        https://www.secmaniac.com/blog/2012/06/11/massive-mysql-authentication-bypass-exploit/
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

Sergei Golubchik ()提供了如下测试方法:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
        int one, two, ret;
        time_t start = time(0);
        time_t now;

        srand(getpid()*start);
        while (1) {
                one = rand();
                two = rand();
                ret = memcmp(&one, &two, sizeof(int));
                if (ret < -128 || ret > 127)
                        break;
                time(&now);
                if (now - start > 10) {
                        printf("Not triggered in 10 seconds, *probably* not vulnerable..\n");
                        return 1;
                }
        }
        printf("Vulnerable! memcmp returned: %d\n", ret);
        return 0;
}

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 对MySQL或相关网络进行配置,只允许可信的来源访问。

厂商补丁:

MySQL AB
--------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.mysql.com/

MariaDB
-------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://mariadb.org/

浏览次数:4532
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障