網站使用PHP開發,並以Nginx建置網頁伺服器,而且開啟了PHP-FPM、進行遠端程式碼執行(RCE)攻擊

PHP再傳遠端程式碼執行漏洞,波及Nginx網頁伺服器

假若你的網站使用PHP開發,並以Nginx建置網頁伺服器,而且開啟了PHP-FPM(FastCGI Process Manager)處理網頁存取的請求,那麼就要針對最近被揭露的PHP漏洞CVE-2019-11043加以防範,PHP官方團隊也在接獲通報之後,於10月24日推出修補版本7.1.33、7.2.24,以及7.3.11,研究人員公開這個漏洞不久,網路威脅情報公司Bad Packets也向媒體ZDNet表示,已有濫用漏洞的攻擊事件出現。

發現這項漏洞的經過,是Wallarm公司的資安研究員Andrew Danau於9月中旬時,參與Capture the Flag(CTF)競賽,解題時偶然找到PHP腳本不尋常的處理行為。他在網址列上輸入%0a(代表換到新的一行),發現伺服器回應比預期還要多的資料。雖然當時並未因此成功找到出題者的答案,但Andrew Danau與組隊的兩名隊友,也就是Emil Lerner和Omar Ganior,決定進一步探討背後的原因為何,隨後他們找到濫用的途徑,並且能夠用來進行遠端程式碼執行(RCE)攻擊,最近Emil Lerner與Omar Ganiev也公開概念驗證(PoC)攻擊程式。

Andrew Danau表示,攻擊者若要濫用這個PHP臭蟲,必須要傳送一個特別的封包,裡面包含具有fastcgi_split_path參數的Nginx組態檔案,因此,並非所有使用PHP的網站都會受害,而是需要同時具備2個條件,首先,是網頁伺服器以Nginx架設,再者則是要啟用PHP裡面提供的PHP-FPM模組,這個模組主要的用途,就是支援PHP網頁處理FastCGI協定。Andrew Danau指出,前述漏洞影響PHP 7的所有版本,發動攻擊的過程中,需要使用FastCGI參數_fcgi_data_seg,這是PHP 7才開始提供的功能,因此,只能針對較新的PHP 7發動攻擊,而無法在終止支援的PHP 5上執行。

網站管理者若是無法更新PHP軟體,還是有一些緩解之道,像是Andrew Danau認為,可透過網頁應用程式防火牆(WAF),過濾%0a和%0d字串的網址請求(但可能會出現誤判的情況),而弱點管理業者Tenable則提出從網頁程式碼下手的做法,像是加入try_files指令,或是透過if宣告方式,如if (-f $uri),驗證是否有網頁伺服器上的檔案能被直接存取。

根據W3Techs網站的統計,目前全球的網站有30.6%採用Nginx網頁伺服器,33%網頁採用PHP 7,網站經營者很有可能同時採用上述兩者,再搭配PHP-FPM運作。因此這樣的漏洞,仍然相當值得管理者加以留意。

🍎たったひとつの真実見抜く、見た目は大人、頭脳は子供、その名は名馬鹿ヒカル!🍏