ORACLE角色权限安全性BUG--普通用户可以利用此漏洞“偷梁换柱”

据说,权限管理是 Oracle 系统的精华,它可以使得不同用户登录到同一数据库中,使得不同用户可能看到不同数量的表,拥有不同的权限。


Oracle 的权限分为系统权限和数据对象权限,共一百多种,如果单独对用户授权,非常的麻烦,由于有一些用户需要的权限是相同的,所以oracle在授权时,可以将这些用户的权限集中为——某种角色,将这些预定的共性权限的定义为角色,从而可以简化授权操作,角色是一组权限的集合。
一般做法是:管理员将权限赋给角色,然后把角色赋给用户,当然也可以直接把某权限赋给用户,所以Oracle 提供细粒度的权限。
也就是说,管理员SYS可以将如下细粒度的权限逐一授权给用户user1,如:
grant CREATE table ,CREATE session ,create view ,create sequence to user1 ;

也可以将以上四种权限中的前三种权限打包为角色role1,即:
create role role1;
grant CREATE table,CREATE session , create view to role1;


如此,管理员可轻松实现将角色role1授权给user2和其它用户,从而没有必要像执行user1授权一样将细粒度的权限逐一授权给用户user2,可通过如下语句简单完成:
grant role1 to user2;


那么问题来了,如果SYS用户想授于用户user1一定范围内的管理权限,即希望user1可以将自己的权限授权给第三方用户,使用的语句为with admin option;

由于可以将角色权限及系统权限一同授权给用户,并希望用户可以授权给第三方,那么下面的语句“没毛病”,反正role1就是前面授权的集合,再执行如下语句也没有问题, user1权限为所有权限的集合,不用权限可以重叠,所以,管理员很可能简单修改一下之前的语句:

修改前:

grant CREATE table ,CREATE session ,create view ,create sequence to user1 ;
修改后:
grant CREATE table ,CREATE session ,create view ,create sequence ,role1 to user1 with admin option;


用户user1的确可以将自己的这些权限授权给第三方用户user3,
grant CREATE session,role1 to user3;


显然user1用户没有create role的权限,且理论上role1的权限细节对user1是隐藏的,但user1却可以在自己权限范围内进行“偷梁换柱”,比如:
grant create table to role1;
revoke create table from role1;


grant CREATE session to role1;
revoke CREATE session from role1;


grant create sequence to role1;

此时的role1的基因已经完全突变,此时的用户user2居然莫名其妙的失去了登录数据库的权限,当user2气呼呼的去找SYS理论时,估计SYS也是一脸的“懵B相”,SYS一定坚定的说,不可能,你的权限和USER1差不多,BALABALBAL.....
当然user1甚至可以在user2找SYS理论时,悄悄的完成


grant CREATE session to role1;


此时SYS一试,好使,张口便骂USER2,你Y傻B呀!你试试,user2一试,果然好使,等回到工位时,又不能用了,请SYS来看,还真是不好使……


当然,user1的上述操作很可能并非诚心捣乱,,但绝对有可能在小心的情况下将role1外皮下的灵魂“移形换位”……



你可能感兴趣的:(ORACLE角色权限安全性BUG--普通用户可以利用此漏洞“偷梁换柱”)