Magento是一套開源的電子商務(wù)系統(tǒng),是主要面向企業(yè)的應(yīng)用,可處理電子商務(wù)各方面的需求,包括像購物、航運(yùn)、產(chǎn)品評(píng)論等等,最終為建設(shè)一個(gè)多用途和適用面廣的電子商務(wù)網(wǎng)站提供幫助。
Magento項(xiàng)目小組目前已經(jīng)發(fā)布補(bǔ)丁,修復(fù)Magento上一個(gè)高危的安全漏洞。
漏洞信息
這個(gè)漏洞是一個(gè)存儲(chǔ)型XSS,是安全廠商Sucuri于2015年11月10日發(fā)現(xiàn)的,可實(shí)施攻擊的場景為:當(dāng)用戶注冊(cè)一個(gè)新賬戶時(shí)或者當(dāng)用戶更改當(dāng)前賬戶的郵件地址時(shí)等涉及到郵箱賬號(hào)提交的場景。
該問題關(guān)鍵在于CMS(內(nèi)容管理系統(tǒng))如何過濾在用戶側(cè)輸入的包含郵件地址信息的數(shù)據(jù)。據(jù)Sucuri的研究發(fā)現(xiàn),Magento并沒有有效地對(duì)郵件地址中可能存在的惡意字符進(jìn)行過濾。
這種不安全的數(shù)據(jù)過濾機(jī)制能夠讓攻擊者在輸入電子郵箱的同時(shí)附加上惡意代碼。
漏洞分析
這個(gè)問題存在于Magento中的app/design/adminhtml/default/default/template/sales/order/view/info.phtml
正如從上面的代碼段中看到的,template會(huì)將getcustomeremail方法的返回值(即用戶填入的郵箱地址)傳遞到管理面板上。而繼續(xù)我們的分析,在以下代碼段中也有所發(fā)現(xiàn):
根據(jù)上述的代碼段編寫的規(guī)則,Magento可以接受兩種不同的郵件格式:
1、一種較為常見,沒有雙引號(hào),沒有“<”符號(hào)等等;
2、另外一種,為引用字符串格式,它幾乎可以接受任何可打印字符,只要輸入數(shù)據(jù)的周圍有兩個(gè)雙引號(hào)。
此刻,從理論上,我們嘗試使用比如“>”@sucuri.net 作為用戶賬號(hào)郵箱,提交一個(gè)訂單,接著觀察當(dāng)管理員在后臺(tái)管理面板上查看我們提交的訂單時(shí)會(huì)發(fā)生什么情況?
上圖的結(jié)果證實(shí)了我們的猜測,Magento確實(shí)存在一個(gè)XSS漏洞。
漏洞的易利用性
正如前面的POC結(jié)果展示的,如果攻擊者接著利用像上述所說的帶有惡意代碼的郵箱地址的賬戶下了一個(gè)訂單,當(dāng)網(wǎng)站管理員在后臺(tái)打開這個(gè)訂單時(shí),那么惡意代碼將會(huì)執(zhí)行。而基于攻擊的原理,該漏洞其實(shí)對(duì)于任何攻擊者來說都是容易掌握利用的。
比如JS代碼能被用于訪問cookies,所以攻擊者可以通過竊取管理員的cookies,隨后用于非法訪問站點(diǎn)。當(dāng)然,也可以實(shí)施其他的攻擊,攻擊的方式也取決于攻擊者的技術(shù)能力。
WordPress站點(diǎn)此前也面臨同樣問題
從原理上來看, 該漏洞類似于Sucuri在10月份發(fā)現(xiàn)的存在于 Jetpack WordPress plugin的一個(gè)XSS漏洞。Jetpack WordPress plugin的XSS漏洞同樣也是攻擊者可以通過將惡意代碼附加到郵箱地址,并通過反饋的形式發(fā)送到后臺(tái),因此導(dǎo)致在后臺(tái)執(zhí)行惡意代碼。
受影響版本
目前受影響的版本包括Magento 社區(qū)版1.9.2.3及更早版本,Magento 企業(yè)版 1.14.2.3及更早版本,當(dāng)前的2.x版本并未受該問題的影響。
如果還運(yùn)行著Magento的老版本,網(wǎng)站管理員需盡快升級(jí)在線商城。