Moodle安全漏洞如何啟動(dòng)遠(yuǎn)程代碼執(zhí)行?
Moodle是開源基于PHP的學(xué)習(xí)管理系統(tǒng),全球數(shù)以萬(wàn)計(jì)的大學(xué)都在使用它,然而,近日Moodle中發(fā)現(xiàn)的漏洞可能讓服務(wù)器及其數(shù)據(jù)受到攻擊。根據(jù)發(fā)現(xiàn)該漏洞的研究人員表示,Moodle安全漏洞實(shí)際由幾個(gè)小漏洞組成,它可使攻擊者在相關(guān)服務(wù)器執(zhí)行PHP代碼。那么,這個(gè)漏洞執(zhí)行條件是什么,以及我們應(yīng)該如何阻止它?
Michael Cobb:Vaultra公司安全研究人員兼首席執(zhí)行官Netanel Rubin發(fā)現(xiàn),通過(guò)利用一系列小漏洞,他可將它們鏈接起來(lái)在運(yùn)行Moodle的服務(wù)器遠(yuǎn)程執(zhí)行代碼。
Moodle是一個(gè)開源學(xué)習(xí)管理系統(tǒng),它存儲(chǔ)著大量敏感信息,例如學(xué)生成績(jī)、測(cè)試和隱私數(shù)據(jù),這使其成為黑客的攻擊目標(biāo)。Moodle安全漏洞被跟蹤為CVE-2017-2641以及Moodle Tracker問(wèn)題MDL-88010。
這種攻擊幾乎可在所有Moodle版本執(zhí)行,因此管理員應(yīng)該升級(jí)到最新版本3.2.2,以盡快解決該問(wèn)題。除了更新到最新版本,管理和還應(yīng)該檢查Moodle內(nèi)任何新管理員、插件或者模板,并在文件系統(tǒng)中搜索任何新文件,以防服務(wù)器遭到入侵。
Moodle系統(tǒng)的規(guī)模和復(fù)雜性導(dǎo)致這些編碼和邏輯缺陷,也最終產(chǎn)生這個(gè)Moodle安全漏洞;Moodle系統(tǒng)包含數(shù)千個(gè)文件、數(shù)百個(gè)組件以及大約200萬(wàn)行PHP代碼,由不同開發(fā)人員在不同時(shí)間編寫和更新。
此前,Moodle中添加了一個(gè)新函數(shù)update_user_preferences來(lái)替換update_users函數(shù),它會(huì)進(jìn)行特權(quán)檢查,因此即使攻擊者可通過(guò)用戶偏好設(shè)置來(lái)更改設(shè)置,也只能以自己的權(quán)限更改。
雖然這個(gè)新函數(shù)消除了更改每個(gè)用戶屬性的可能性,但該代碼無(wú)法檢查哪些偏好設(shè)置被更改。前面的函數(shù)使用setuserpref.php文件來(lái)檢查需要更新的偏好設(shè)置列在ajax_updatable_user_prefs數(shù)組中,該數(shù)組定義了可通過(guò)Ajax更改的偏好設(shè)置,以確保不會(huì)更改關(guān)鍵值。
具有諷刺意味的是,為了減少對(duì)該用戶屬性更新功能的任何潛在濫用情況,這個(gè)新的特權(quán)檢查實(shí)際上引入了Moodle安全漏洞。開發(fā)人員可能認(rèn)為用戶偏好設(shè)置不可能被利用來(lái)加載全面攻擊,因?yàn)樗鼈冎皇怯绊憟D形用戶界面部分。
然而,缺乏包含讓對(duì)象注入攻擊可更新整個(gè)數(shù)據(jù)庫(kù)的任何行,例如管理員賬戶、密碼和站點(diǎn)配置。Rubin發(fā)現(xiàn),在代碼開發(fā)過(guò)程中做出的這個(gè)假設(shè)和其他假設(shè)可能被利用來(lái)最終執(zhí)行PHP代碼。
邏輯漏洞可能出現(xiàn)在任何具有大型代碼庫(kù)的系統(tǒng)中,特別是在由不斷變化的開發(fā)團(tuán)隊(duì)在長(zhǎng)時(shí)間開發(fā)的系統(tǒng)。
根據(jù)《Code Complete》作者Steve McConnell表示,超過(guò)512000行代碼的軟件項(xiàng)目平均每千行代碼中有4到100個(gè)編碼錯(cuò)誤。典型的Web應(yīng)用會(huì)使用多種語(yǔ)言,例如Java、HTML、PHP、Python、CSS、第三方庫(kù)和組件等,很少有開發(fā)人員知道或者了解如何使用和整合它們,而不會(huì)引入任何安全漏洞。
為了減少開發(fā)人引入邏輯漏洞或者省略安全及驗(yàn)證檢查,應(yīng)該要求他們使用約定的注釋風(fēng)格來(lái)添加最低級(jí)別的代碼注釋,以及更詳細(xì)的支持文檔。維基百科有完整的注釋樣式列表。
盡管花時(shí)間評(píng)論和記錄代碼會(huì)減緩開發(fā)速度,但這可確保在未來(lái)更改代碼的開發(fā)人員可完全了解函數(shù)的作用、操作方式以及需要對(duì)處理的數(shù)據(jù)進(jìn)行哪些檢查。同樣重要的是當(dāng)函數(shù)在接收其他函數(shù)傳遞的數(shù)據(jù)時(shí),不能認(rèn)為數(shù)據(jù)已經(jīng)經(jīng)過(guò)檢查,因?yàn)榍懊娴暮瘮?shù)可能通過(guò)不同的要求或規(guī)則對(duì)其進(jìn)行檢查。
這方面很好的示例是電話號(hào)碼,從數(shù)據(jù)庫(kù)檢索和顯示用戶電話號(hào)碼的函數(shù)可能會(huì)接收+和()符號(hào),但如果該函數(shù)將數(shù)據(jù)傳遞給實(shí)際撥打號(hào)碼的函數(shù),且在處理前沒有移除這些符號(hào),可能會(huì)導(dǎo)致該函數(shù)失效。