| 項目 | 內容 |
|---|---|
| CVE | CAN-2002-1374 / CVE-2002-1374 |
| BID | 6373 |
| 影響版本 | 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)。
COM_CHANGE_USER 封包,user=root、password=猜測首字元+任意。DROP USER ''@'%';UPDATE user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;caching_sha2_password / sha256_password,完整挑戰-回應機制。caching_sha2_password,支援 TLS 加密傳輸認證資料。COM_CHANGE_USER 仍存在但已修補驗證邏輯,且需 CHANGE_USER 權限 (8.0+)。# 簡易檢測:嘗試切換用戶 (需有效帳號)
mysql -u test -p -e "SELECT CURRENT_USER();"
# 若可切換至 root 即存在漏洞
此漏洞是早期 MySQL 認證協定設計缺陷的經典案例,提醒我們:任何認證狀態變更都必須完整重新驗證,不可信任客戶端提交的部分資訊。