首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Database 10g 緩衝區溢出漏洞風險與緩解措施

     編輯:Oracle 資料庫基礎

漏洞概述

Oracle Database 10g Release 1 版本中存在一個嚴重的緩衝區溢出漏洞,位於 DBMS_SNAPSHOT_UTL 套件的公開程序 VERIFY_LOG 中。由於該套件預設授予 PUBLIC 角色 EXECUTE 權限,任何擁有資料庫帳號的使用者皆可利用此漏洞,導致任意程式碼執行或拒絕服務攻擊。

影響範圍

  • Oracle Database 10g R1

技術細節

DBMS_SNAPSHOT_UTL 套件用於管理具體化視圖。其 VERIFY_LOG 程序未對輸入參數進行邊界檢查,攻擊者可透過傳遞超長字串觸發緩衝區溢出,進而在資料庫伺服器進程的上下文中執行任意程式碼。值得注意的是,Oracle 在 2006 年 4 月的關鍵補丁更新 (CPU) 中雖提及此缺陷,但直到發布時止,大多數平台仍未提供官方修補程式。

臨時緩解方案

在官方補丁釋出前,建議採取以下措施降低風險:

  1. 撤銷 PUBLIC 的執行權限:僅保留必要帳號的存取權。
    REVOKE EXECUTE ON SYS.DBMS_SNAPSHOT_UTL FROM PUBLIC FORCE;
  2. 徹底移除所有帳號的執行權限(可能影響依賴該套件的應用程式):
    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 的異常呼叫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved