Oracle Database 10g Release 1 版本中存在一個嚴重的緩衝區溢出漏洞,位於 DBMS_SNAPSHOT_UTL 套件的公開程序 VERIFY_LOG 中。由於該套件預設授予 PUBLIC 角色 EXECUTE 權限,任何擁有資料庫帳號的使用者皆可利用此漏洞,導致任意程式碼執行或拒絕服務攻擊。
DBMS_SNAPSHOT_UTL 套件用於管理具體化視圖。其 VERIFY_LOG 程序未對輸入參數進行邊界檢查,攻擊者可透過傳遞超長字串觸發緩衝區溢出,進而在資料庫伺服器進程的上下文中執行任意程式碼。值得注意的是,Oracle 在 2006 年 4 月的關鍵補丁更新 (CPU) 中雖提及此缺陷,但直到發布時止,大多數平台仍未提供官方修補程式。
在官方補丁釋出前,建議採取以下措施降低風險:
REVOKE EXECUTE ON SYS.DBMS_SNAPSHOT_UTL FROM PUBLIC FORCE;
CREATE OR REPLACE PROCEDURE REVOKE_EXECUTE_PRIV (
P_OWNER IN VARCHAR2,
P_OBJECT_NAME IN VARCHAR2
) AUTHID CURRENT_USER IS
CURSOR my_cur IS
SELECT grantee FROM dba_tab_privs
WHERE owner = P_OWNER AND table_name = P_OBJECT_NAME;
BEGIN
FOR my_rec IN my_cur LOOP
DBMS_OUTPUT.PUT_LINE('Revoking EXECUTE privilege from ' || my_rec.grantee);
EXECUTE IMMEDIATE 'REVOKE EXECUTE ON ' || P_OWNER || '.' || P_OBJECT_NAME || ' FROM ' || my_rec.grantee || ' FORCE';
END LOOP;
END REVOKE_EXECUTE_PRIV;
/
BEGIN
REVOKE_EXECUTE_PRIV('SYS', 'DBMS_SNAPSHOT_UTL');
END;
/
密切關注 Oracle 官方安全公告,儘快套用相關平台的修補程式。在此之前,務必實施上述權限收斂措施,並監控資料庫審計日誌中針對 DBMS_SNAPSHOT_UTL 的異常呼叫。