PHP-FPM遠程代碼執行漏洞(CVE-2019-11043)


0x00 簡介

在長亭科技舉辦的 Real World CTF 中,國外安全研究員 Andrew Danau 在解決一道 CTF 題目時發現,向目標服務器 URL 發送 %0a 符號時,服務返回異常,疑似存在漏洞。

在使用一些有錯誤的Nginx配置的情況下,通過惡意構造的數據包,即可讓PHP-FPM執行任意代碼。

但由於是配置文件的開放性。還請使用 nginx+php-fpm 的服務管理員/運維人員及時做好自查自檢工作。

0x01 漏洞詳情

由於\n(%0a)的傳入導致nginx傳遞給php-fpm的PATH_INFO為空。

進而導致可以通過FCGI_PUTENV與PHP_VALUE相結合,修改當前的php-fpm進程中的php配置。在特殊構造的配置生效的情況下可以觸發任意代碼執行。

注:完全復制Nginx官方給出的php-fpm示例配置的用戶受到此漏洞影響

示例配置如下:

location ~ [^/]\.php(/|$) {
...
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO       $fastcgi_path_info;
fastcgi_pass   php:9000;
...
}

0x02 漏洞復現

在vulhub上已經更新了相應的靶場環境:

https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043

拉取鏡像環境:

環境啟動后,訪問http://your-ip:8080/index.php即可查看到一個默認頁面。

使用https://github.com/neex/phuip-fpizdam中給出的工具,發送數據包:
(前提本機擁有正常的golang環境)

可見,這里已經執行成功。

我們訪問http://your-ip:8080/index.php?a=id,即可查看到命令已成功執行:

注意,因為php-fpm會啟動多個子進程,在訪問/index.php?a=id時需要多訪問幾次,以訪問到被污染的進程。

0x03 修復建議

1.修改 nginx 配配置文件中fastcgi_split_path_info的正則表達式,不允許.php之后傳入不可顯字符
2.暫停使用 nginx+php-fpm 服務
3.刪除如下配置

fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO       $fastcgi_path_info;

0x04 參考鏈接

https://www.anquanke.com/post/id/189415
https://github.com/vulhub/vulhub/blob/master/php/CVE-2019-11043/README.zh-cn.md
https://mp.weixin.qq.com/s/XPFIEiNvNorfgQHein_NGw


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM