MySQL AB MySQL 3.20.32a ~ 4.1.0-alpha (含 3.22.x、3.23.x 全系列、4.0.x 全系列)
作業系統:Debian 3.0、Mandrake 8.1/8.2/9.0、RedHat 7.2/7.3、SuSE 8.1/8.2 等主流 Linux 發行版
mysqlbug 是錯誤回報腳本,啟動文字編輯器讓用戶填寫回報。問題在於:用戶直接離開編輯器未修改內容時,腳本執行:
if cmp -s $TEMP $TEMP.x
then
echo "File not changed, no bug report submitted."
cp $TEMP /tmp/failed-mysql-bugreport
...
fi
使用靜態檔名 /tmp/failed-mysql-bugreport,導致競爭條件。
ln -s /etc/passwd /tmp/failed-mysql-bugreportmysqlbug 並直接離開編輯器$TEMP 內容複製到符號連結指向的 /etc/passwd,導致關鍵系統檔被覆寫mysqlbug 腳本:使用 mktemp 產生隨機臨時檔名mysqlbug 執行權限:chmod 700 /usr/bin/mysqlbug 僅 root 可執行/tmp 目錄 sticky bit:chmod +t /tmp (防止刪除/覆寫他人檔案)