2021-03-18 分類: 網(wǎng)站建設(shè)
據(jù)統(tǒng)計,全球29%的網(wǎng)站使用的都是WordPress。由于WordPress的使用非常廣泛,使得WordPress插件的安全問題成為了網(wǎng)絡(luò)犯罪分子們關(guān)注的焦點。一般來說,第三方提供的插件其安全等級肯定沒有WordPress核心插件的安全等級高,因此它們對于攻擊者來說,絕對是極具吸引力的攻擊目標(biāo)。為了入侵目標(biāo)WordPress站點,攻擊者需要利用插件中的安全漏洞,那么靜態(tài)代碼分析技術(shù)能檢測到這些漏洞嗎?
在這篇文章中,我們將會對2017年影響最為嚴(yán)重的插件漏洞進(jìn)行分析。除此之外,我們還會跟大家介紹靜態(tài)代碼分析工具如何才能檢測到這些漏洞。
二、漏洞選取
我們選取公開已知插件漏洞的條件如下:
RIPS可以對非WordPress核心插件進(jìn)行代碼分析,接下來,我們會對WordPress的相關(guān)功能進(jìn)行分析,并介紹如何對插件進(jìn)行深入的代碼分析。
1. Loginizer 1.3.5-SQL注入漏洞(CVE-2017-12650)
目前,總共有55萬WordPress站點安裝了Loginizer插件。這款插件的作用理應(yīng)是通過屏蔽暴力破解攻擊、啟用雙因素身份驗證、以及reCAPTCHA驗證碼機(jī)制來給WordPress的登錄功能增加安全性。但是在今年八月份,研究人員在Loginizer的登錄程序中發(fā)現(xiàn)了一個SQL注入漏洞,而這個漏洞反而會讓原本需要得到保護(hù)的管理員憑證處于安全風(fēng)險之中。
接下來,我們一起看一看包含漏洞的代碼,并且跟大家解釋靜態(tài)代碼分析工具(以下簡稱SAST工具)如果想要檢測到這類漏洞的話,需要什么樣的要求。在接下來的分析過程中,我們給大家提供的只是簡單的代碼段,而實際的分析會更加復(fù)雜。
(1) 第一步:識別自定義的SQL封裝器
首先,SAST工具最基本的就是要識別出該插件中用戶自定義的函數(shù)lz_selectquery(),這個函數(shù)可以利用WordPress的數(shù)據(jù)庫驅(qū)動器來執(zhí)行SQL語句。當(dāng)這個函數(shù)被調(diào)用的時候,它需要對第一個參數(shù)進(jìn)行SQL注入檢測。
modules/Emails/DetailView.php
(2) 第二步:識別輸入來源
對于SAST工具而言,另一種基本功能就是它必須能夠識別出PHP中所有常見的和不常見的用戶輸入來源。但攻擊者可以修改用戶自定義函數(shù)lz_getip()所返回的HTTP請求頭,因此該函數(shù)所返回的值就是不可信的了,所以整個數(shù)據(jù)流必須進(jìn)行精準(zhǔn)跟蹤。
modules/Emails/DetailView.php
(3) 第三步:分析WordPress的action和filter
WordPress允許我們定義各種不同的action來調(diào)用自定義函數(shù),為了跟蹤插件的控制流程,SAST工具必須要了解這些回調(diào)的運行機(jī)制。在下面給出的代碼段中,我們可以看到loginizer_load_plugin()函數(shù)是通過action調(diào)用的,這個函數(shù)可以從lz_getip()函數(shù)中獲取用戶輸入,并將其存儲再全局?jǐn)?shù)組$loginizer之中,然后再通過WordPress filter來調(diào)用另一個自定義函數(shù)loginizer_wp_authenticate()。因此,除了WordPress action之外,SAST工具還需要了解WordPress filter的工作機(jī)制。
modules/Emails/DetailView.php
(4) 第四步:分析全局變量
雖然下面這段代碼對于我們?nèi)祟悂碚f可以輕易看懂,但是對于SAST工具來說分析起來可就非常復(fù)雜了。它需要通過多個函數(shù)調(diào)用來分析全局?jǐn)?shù)組$loginizer的數(shù)據(jù)流,只有這樣它才能夠檢測到lz_getip()函數(shù)傳遞給loginizer_can_login()函數(shù)(為對SQL語句中的拼接內(nèi)容進(jìn)行數(shù)據(jù)過濾)的用戶輸入信息。其中的SQL語句是通過自定義的SQL函數(shù)lz_selectquery()實現(xiàn)的,雖然WordPress可以通過模擬magic_quotes來防止注入,但是來自HTTP頭中的惡意用戶輸入數(shù)據(jù)并不會受此影響。
modules/Emails/DetailView.php
由于RIPS的分析算法主要針對的是PHP語言,因此它對WordPress的分析會比較到位,因此它能夠識別出WordPress復(fù)雜的數(shù)據(jù)流,并成功檢測出插件中的SQL注入漏洞。
2. Ultimate Form Builder Lite 1.3.6-SQL注入漏洞(CVE-2017-15919)
Ultimate Form Builder插件目前的安裝量已經(jīng)超過了5萬,它允許我們使用拖拽的形式來創(chuàng)建聯(lián)系表單。在今年十月份,研究人員在該插件中發(fā)現(xiàn)并報告了一個嚴(yán)重的SQL注入漏洞,而該漏洞將允許攻擊者接管目標(biāo)WordPress網(wǎng)站。
接下來,我們會分析代碼中存在的問題,以及SAST工具如何才能檢測到這個安全漏洞。
(1) 第一步:識別上下文環(huán)境
首先,插件要執(zhí)行的所有SQL語句都需要被分析,雖然WordPress數(shù)據(jù)庫驅(qū)動跟插件代碼無關(guān),但它所使用的方法(例如get_rwo())是可以被RIPS引擎識別的(搜索潛在的SQL注入漏洞)。
modules/Emails/DetailView.php
在這里,引擎可以分析SQL語句以識別注入環(huán)境。一般來說,這種地方的安全漏洞是很難被發(fā)現(xiàn)的。如果它讀取的是form_id=’$form_id’而不是form_id=$form_id,那么這條語句就沒有安全問題了,因為WordPress可以對用戶的輸入進(jìn)行甄別。因此,只有那些上下文環(huán)境敏感的SAST工具才能夠感知到這種隱蔽的安全問題。
(2) 第二步:跟蹤用戶輸入數(shù)據(jù)流
這一步相對來說比較簡答,你可以從在下面的代碼中看到,如果工具無法分析到$form_id的潛在隱患,那么受污染的數(shù)據(jù)將有可能擴(kuò)散到其他功能函數(shù)中。
modules/Emails/DetailView.php
分享名稱:wordpress插件有哪些是有漏洞的?
文章鏈接:http://muchs.cn/news10/105410.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、外貿(mào)建站、用戶體驗、面包屑導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容