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

MySQL 3.23.31 之前版本緩衝區溢位漏洞分析與升級修復指南

     編輯:MySQL 資料庫相關知識

漏洞概述

  • CVE:CVE-2002-1374 (對應文中描述的緩衝區溢位)
  • 影響版本:所有 < 3.23.31 版本
  • 攻擊向量:合法登入用戶透過超長識別碼觸發 SELECT 緩衝區溢位
  • 後果:mysqld Segmentation Fault (crash),攻擊者取得 mysqld 執行權限 (通常為 mysql 用戶)

漏洞複現 (原始報告)

# 終端 1:啟動 mysqld
/sbin/init.d/mysql start

# 終端 2:發送惡意查詢
mysql -p -e "SELECT a.\`perl -e 'print \"A\"x130'\`.b"

# 結果:mysqld 崩潰,錯誤日誌顯示
safe_mysqld: line 149: 15557 Segmentation fault
# gdb 顯示 eip = 0x41414141 ('AAAA'),確認 EIP 被覆寫

根因分析

解析器處理反引號識別碼時,未檢查長度直接複製到固定大小堆疊緩衝區 (128/256 bytes),導致堆疊溢位覆蓋返回地址 (EIP)。

修復與緩解

  1. 升級至 3.23.31+:官方修補了長度檢查。
  2. 臨時緩解:限制資料庫用戶權限,移除不必要的 SELECT 權限 (但影響業務)。
  3. 網路層:防火牆限制 3306 僅信任 IP 存取。

升級檢查清單

  • 備份 mysql 系統庫與所有使用者資料庫。
  • 檢查 CHANGES 文件確認相容性變更 (如預設 SQL_MODE、字元集)。
  • 測試環境完整回歸測試後再上生產。
  • 升級後執行 mysql_upgrade 修正系統表結構。

安全最佳實踐

  • 訂閱 MySQL/Oracle 關鍵安全公告 (CVE 通知)。
  • 定期掃描 mysql.user 弱密碼、匿名帳號、Host='%' 高權限帳號。
  • 啟用 validate_password 強制密碼複雜度。
  • 最小權限原則:應用帳號僅授予特定庫的 CRUD,無 FILE/PROCESS/SHUTDOWN 權限。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved