

網絡事件解讀(2):CVE-2024-4577漏洞之PHP-CGI安全事件
前段時間新出現一個攻擊范圍很廣的漏洞,一些XAMPP服務器受到攻擊。這個攻擊事件是怎么發生的呢?背后的原因以及技術細節是什么呢?本文帶領大家透過這次PHP CGI攻擊事件了解網絡攻擊的背后真相以及相關原理。
1. 常見Web漏洞
Web安全漏洞是Web應用中的一些安全缺陷,可能導致黑客利用來進行一些惡意的網絡活動。常見的安全漏洞有:
SQL注入漏洞
通過將惡意的SQL代碼插入到應用程序處理的SQL語句中,導致攻擊者可以修改數據庫查詢,從而讀取,修改或者刪除數據。
跨站腳本(XSS)漏洞
跨站腳本漏洞是客戶端代碼注入攻擊,利用Web應用程序對用戶輸入檢查不足的漏洞,將惡意腳本注入到網頁中。當用戶訪問該網頁時候,惡意腳本在用戶的瀏覽器端執行,從而竊取用戶數據。
弱口令漏洞
弱口令漏洞是通常設置容易被別人猜測或被破解工具破解的口令,從而導致泄露敏感信息。
跨站請求偽造(Cross-Site Request Forgery, CSRF)
攻擊者功過偽裝成合法用戶發送惡意請求到Web應用,已到達非法授權操作的目的。
目錄遍歷漏洞
目錄遍歷漏洞允許攻擊者通過URL中的特殊字符訪問未授權的目錄和文件,導致敏感信息泄露或系統文件被篡改。
RCE漏洞
RCE漏洞即遠程代碼執行(Remote Code Execution)漏洞,是軟件缺陷導致攻擊者可以在后臺服務器并在上面執行任意代碼。
RCE漏洞是指Web開發中,開發人員使用了一些特殊函數,這些函數以一些字符串作為輸入,功能是將輸入的字符串當做代碼或者命令來執行。當攻擊者可以控制這些函數的輸入時,就產生了RCE漏洞。正如本文接下來要介紹的PHP-CGI漏洞就是這種安全漏洞。
2. PHP-CGI安全事件
時間:2024年6月
目標: 使用PHP-CGI的Web服務器
結果: Web服務器受到黑客攻擊,所有的文件都被加密鎖住,黑客在服務器目錄下留下勒索文件Read_Me.html,打開后內容如下:
3. CVE-2024-4577漏洞
本次攻擊事件是黑客使用locked勒索病毒,通過利用XAMPP在PHP-CGI模式下在六月公布的遠程代碼執行漏洞CVE-2024-4577后對使用低版本的PHP Web服務器發起的典型Day1攻擊。
該漏洞是由DEVCORE團隊發現,PHP-CGI在設計實現時未能考慮Windows平臺的Best-Fit字符編碼轉換特性,使得黑客可以構造特定的請求,繞過安全機制,從而直接在遠程服務器上任意執行代碼。當前主要影響特定語系設置的Windows系統,包括簡體中文(936),繁體中文(950)以及日文(932), 影響的PHP版本包括PHP8.3(<8.3.8)/PHP8.2(<8.2.20)/PHP8.1(<8.1.29)以及其他可能低于PHP8或者已經不維護的版本。
漏洞背景原理
1) PHP CGI
CGI (Common Gateway Interface通用網關接口) 是通用網關協議,可以將客戶端請求傳給其他程序(如PHP),收集程序的輸出再返回給客戶端。PHP-CGI是用于Web服務器和PHP代碼之間的通信,通常用于PHP 5.x版本。也正是在PHP-CGI模式下爆出了CVE-2012-1823這個安全缺陷。
2) CVE-2012-1823漏洞
該漏洞不能正確處理缺少=(等號)字符的查詢字符串。根據RFC3875規范,如果查詢字符串缺少未解碼的等號,那么整個查詢字符串應當被視為CGI參數進行傳遞,這給攻擊者帶了注入非法命令行參數的機會,攻擊者可以通過在查詢字符串中添加命令行選項來執行任意代碼。
PHP-CGI的命令行參數如下圖所示:
那么攻擊者如果利用上述參數去構造RCE攻擊呢?他們需要利用以下參數和配置:
a. -d選項,該參數可以通過修改ini條目更改php配置。
b. allow_url_include, 設置它為on,可以開啟php://input將php代碼發到服務器并執行。
c. auto_prepend_file, 指定每個php腳本執行前自動包含的文件,它是全局的,對所有腳本生效。
通過上述參數和配置就可以構造出如下攻擊url:
攻擊者只需要將自己的php惡意代碼構造到http內容中,就可以發送到服務器上并被執行從而達到攻擊的目的。
3)Windows ‘Best-Fit’編碼
PHP后來對上述的CVE-2012-1823漏洞做了修復,只要匹配到上傳參數中沒有=(等號)且第一個字符是-的話,則不會去執行并解析命令行。
而Windows ‘Best-Fit’編碼給黑客繞過了這個修復的機會。
Windows系統使用代碼也來支持不同語言和區域的字符編碼,如簡體中文使用代碼頁936來映射字符和計算機的數值。如果用戶輸入了代碼頁中不支持的字符,為了能繼續運行,不能因為無法識別字符而崩潰,Windows使用了Best-Fit這種兼容機制,采用最接近的字符來替換無法識別的字符。
如bestfit936顯示如下的映射部分截取圖所示。
CVE-2024-4577利用了Windows的Best-Fit編碼,使用%ad來替代之前查詢字符串中的-, 則可以繞過之前CVE-2012-1833修復中對-的檢測,而Windows在解析的時候,給轉化成-了,從而又重新完成了命令的執行。這也是本次CVE-2024-4577漏洞的根本原因。
新的RCE攻擊的url格式則被構造如下所示:
4. CyberFlood漏洞庫抓包示例
該PHP CGI安全漏洞公布后,CyberFlood在TestCloud漏洞庫中也迅速更新了此漏洞,我們可以利用測試平臺抓包看一下該漏洞的具體信息。
漏洞的信息描述:
把漏洞加入CTA測試模板運行后,抓包可以看到Post的構造的URL跟前文一致。
5. 解決方案建議
對于此次安全漏洞,推薦如下一些應對措施但不限于:
升級到最新的版本,目前官方已經發布了PHP版本的更新,修復了漏洞。
加強Web服務器的安全配置,例如限制訪問,使用防火墻規則等。
使用Web應用防火墻(WAF)來增強防護。
建立良好的備份策略,以便在遭受攻擊時快速恢復。
本 本期為大家介紹了CVE-2024-4577 PHP-CGI漏洞的相關知識及原理,后續我們可以繼續探討一些相關熱點安全問題,歡迎大家關注思博倫技術公眾號。
關鍵字: 漏洞,Web安全,PHP,網絡安全,CVE,CyberFlood,RCE,遠程代碼執行漏洞,TestCloud,病毒