網站維護者宜升級phpMyAdmin,免除XSS干擾
- 發布單位:TWCERT/CC
- 更新日期:2019-04-03
- 點閱次數:621
CVE編號
內文
●概述:
以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,破壞性不容小覷。
影響產品
解決辦法
相關連結
- https://www.phpmyadmin.net/security/PMASA-2018-5/
- https://blue-bird1.github.io/2018/08/25/CVE-2018-15605/
- https://securitytracker.com/id/1041548
- https://github.com/phpmyadmin/phpmyadmin/commit/00d90b3ae415b31338f76263359467a9fbebd0a1
- https://www.phpmyadmin.net/news/2018/8/22/security-fix-phpmyadmin-483-released/
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-15605
- https://vuldb.com/?id.123229
- https://zh.wikipedia.org/wiki/PhpMyAdmin
- http://mark528.pixnet.net/blog/post/7267524-mysql%25E7%25AE%25A1%25E7%2590%2586%25E5%25B7%25A5%25E5%
- https://www.yiibai.com/mysql/signal-resignal.html
- http://komivlad.net/blog/wp-content/uploads/2017/10/phpmyadmin.png