| 項目 | 詳情 |
|---|---|
| 影響版本 | MySQL 5.0.26、5.0.34、5.0.40-debug (及相近 5.0.x 版本) |
| 漏洞類型 | 遠端拒絕服務 (DoS) — 空指標解引用導致 mysqld 崩潰 |
| 攻擊向量 | 經驗證的資料庫使用者提交惡意構造的 IF() 查詢 |
| CVSS 評分 | 約 4.0 (中等,需認證、可用性影響) |
| 修補狀態 | 官方已發布修補版本 |
MySQL 在處理 IF(expr1, expr2, expr3) 函數時,對特定邊界條件的運算式組合 (如嵌套 IF、特定資料類型轉換、NULL 處理) 存在邏輯缺陷,導致內部函數 Item_func_if::val_int() 或相關虛函數呼叫鏈中出現**空指標解引用**,觸發 SIGSEGV 使 mysqld 進程異常終止。
觸發條件範例 (概念性,非實際 PoC):
SELECT IF(IF(NULL, 1, 2), 'a', 'b'); -- 某種嵌套/類型組合導致內部臨時物件未正確初始化
攻擊者只需擁有普通查詢權限,即可反覆發送惡意查詢,導致服務反覆重啟,構成拒絕服務。
max_join_size、max_execution_time (5.7+)MemoryLimit/CPUQuota 限制單一進程影響systemd 設定 Restart=on-failure、RestartSec=5,搭配健康檢查腳本IF 巢狀模式# 升級後確認版本
mysql -u root -p -e "SELECT VERSION();"
# 應顯示 5.0.41+ 或 5.7.x / 8.0.x
# 簡單功能測試
mysql -u root -p -e "SELECT IF(1>0, 'yes', 'no');"
# 正常回傳 'yes'
結語:雖此漏洞年代久遠 (MySQL 5.0 時代),但其提醒我們:**資料庫引擎本身也會有漏洞,持續修補、最小暴露面、纵深防禦** 才是長久之計。若您仍在運行 MySQL 5.0/5.1/5.5,請將升級列為最高優先級專案。