首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL COM_CHANGE_USER 密碼認證繞過漏洞 (CVE-2002-1374) 分析與修補

     編輯:MySQL 資料庫相關知識

漏洞概覽

項目內容
CVECAN-2002-1374 / CVE-2002-1374
BID6373
影響版本MySQL 3.22.26 ~ 3.23.53、4.0.0 ~ 4.0.5a
修補版本3.23.54+、4.0.6+
嚴重度高 (CVSS 7.5)
攻擊向量本地/遠程 已認證用戶
利用條件猜中目標帳號密碼首字元 (1/32 機率)

根因分析

COM_CHANGE_USER 封包允許已連線客戶端切換身分。Server 驗證邏輯僅比對客戶端提交的 scramble_buffer 首字元,導致攻擊者最多嘗試 32 次 (合法字符集大小) 即可繞過認證,劫持任意帳號 (含 root)。

攻擊流程

  1. 正常登入低權限帳號 (或匿名帳號)。
  2. 發送 COM_CHANGE_USER 封包,user=root、password=猜測首字元+任意。
  3. Server 僅檢查首字元匹配即認證成功。
  4. 取得 root 權限,進一步植入 UDF、讀寫檔案、執行系統指令。

修補建議

  1. 升級: 3.23.54 / 4.0.6 或更新版本 (含完整 scramble 驗證)。
  2. 臨時緩解 (無法升級):
    • 移除匿名帳號:DROP USER ''@'%';
    • 限制 root 僅本地登入:UPDATE user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;
    • 防火牆封鎖 3306 對外存取。

現代版本防禦機制

  • 5.7+ 強制 caching_sha2_password / sha256_password,完整挑戰-回應機制。
  • 8.0 預設 caching_sha2_password,支援 TLS 加密傳輸認證資料。
  • COM_CHANGE_USER 仍存在但已修補驗證邏輯,且需 CHANGE_USER 權限 (8.0+)。

檢測腳本

# 簡易檢測:嘗試切換用戶 (需有效帳號)
mysql -u test -p -e "SELECT CURRENT_USER();"
# 若可切換至 root 即存在漏洞

此漏洞是早期 MySQL 認證協定設計缺陷的經典案例,提醒我們:任何認證狀態變更都必須完整重新驗證,不可信任客戶端提交的部分資訊。

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