按 Enter 到主內容區
:::

TWCERT-電子報

:::

網站維護者宜升級phpMyAdmin,免除XSS干擾

發布日期:
字型大小:
  • 發布單位:TWCERT/CC
  • 更新日期:2019-04-03
  • 點閱次數:621
網站維護者宜升級phpMyAdmin,免除XSS干擾

CVE編號

CVE-2018-15605

內文

●概述:
以PHP開發之免費軟體工具phpMyAdmin,支援在網頁伺服器管理MySQL資料庫,其優勢為鉅量資料的匯入匯出,能產出HTML頁面俾供操作。經分析Sql.php、import.php程式碼察覺XSS破綻,因phpMyAdmin匯入檔案作業欠缺資料檢核機制,在惡意檔案內埋藏特殊指令SIGNAL SQLSTATE語法或其他腳本碼,可將攻擊型payload送入,輾轉經由getWarnings( )、getWarningMessagesArray( )、addHTML( )等函數加以運算執行,最終觸發指令生效,此類Cross-Site Scripting行為若結合系統級權限,恐危害網站資料庫完整性,The phpMyAdmin Project已於上週完成修補並釋出昇級版。
●編註:
免費公開軟體的好處,就是容易在原始碼中找線索,本次phpMyAdmin弱點牽涉Sql.php、import.php,先從資料輸入源頭說明,有一個關鍵函數getWarnings( ):
public function getWarnings($link = DatabaseInterface::CONNECT_USER)
{ return $this->fetchResult('SHOW WARNINGS', null, null, $link); }
程式碼內函數fetchResult( )功用係SQL查詢,而getWarnings( )運算結果值,則經getWarningMessagesArray( )輾轉交給addHTML( )運用,剛巧addHTML( )缺乏內容檢查,程式設計者將警告訊息字串視作百分百安全,忽略參數值在多個函數間流轉,可能有被探勘注入惡意內容的機會:
public function addHTML($content)
{
if (is_array($content)) {
foreach ($content as $msg) { $this->addHTML($msg); }
} elseif ($content instanceof Message) {
$this->_HTML .= $content->getDisplay();
} else { $this->_HTML .= $content; }
}
由上可知,addHTML( )僅對輸入值content做類型判斷,而不做有效性判斷,直接增加至html內容,故駭客藉著MySQL內建SIGNAL語法(控制並回傳錯誤訊息),撰寫跨站台腳本的惡意碼,例:
SIGNAL SQLSTATE '01000' SET MESSAGE_TEXT = 'Warning:

'
駭客只須類似的SIGNAL敘述語法構成payload,寫入特製sql檔案,待受害者操作檔案匯入,接收處理資料庫警訊同時,也發動Cross-Site Scripting,冒出"攻擊成功"對話框,乍看無甚威脅可言,但XSS漏洞若被用以發動可更動系統組態的script code,破壞性不容小覷。

影響產品

phpMyAdmin 4.8.2以前版本

解決辦法

參考官網下載專頁 https://www.phpmyadmin.net/downloads/ ,取得phpMyAdmin 4.8.3壓縮檔。
回頁首